Partager sa connexion internet ADSL avec OpenBSD et protéger l
Transcription
Partager sa connexion internet ADSL avec OpenBSD et protéger l
Partager sa connexion internet ADSL avec OpenBSD et protéger l'accès en Wifi avec Authpf Tout est dans le titre, cette doc devrait vous permettre de protéger vos ordinateurs d'internet, de contrôler l'accès des clients Wifi, et de séparer votre Lan privé du Wlan (Wireless lan ou réseau wifi). Cette doc fonctionne avec OpenBSD 3,3 voir 3,4. Pré requis: savoir installer OpenBSD et manipuler l'éditeur Vi. 1) Le réseau avec tout d' abord un shéma: Nous avons donc 3 interfaces sur la machine, rl0, rl1, rl2. rl0 est l'interface relié au modem ethernet, elle est juste active donc paramétré comme suit dans le fichier /etc/hostname.rl0 : up rl1 est l'interface relié au LAN, son adresse ip est 192.168.0.1, le LAN étant le réseau 192.168.0.*, le fichier /etc/hostname.rl1: inet 192.168.0.1 255.255.255.0 NONE rl2 est l'interface relié au Wlan, son adresse ip est 192.168.1.1, le Wlan étant le réseau 192.168.1.*, le fichier /etc/hostname.rl2 : inet 192.168.0.1 255.255.255.0 NONE 2) La configuration de la connexion au net: Le fichier de configuration du compte adsl (protocole pppoe) ppp.conf dans /etc/ppp se présente comme suit: default: set log Phase Chat LCP IPCP CCP tun command set redial 15 0 set reconnect 15 10000 pppoe: set device "!/usr/sbin/pppoe -i rl0" disable acfcomp protocomp deny acfcomp set mtu max 1492 set speed sync enable lqr set lqrperiod 5 set cd 5 set dial set login set timeout 0 set authname Monlogin set authke Monpass enable dns enable mssfixup Noter bien qu'il faut remplacer Monlogin par le votre, idem pour le pass, et dans le set device: rl0 correspond à notre interface relié au modem ethernet si votre interface se nomme autrement à vous de changer cette ligne. Quand la connexion se met en route ppp.linkup s'éxécute , voici le contenu de ce fichier (dans /etc/ppp/): MYADDR: ! sh -c "/sbin/route del default" ! sh -c "/sbin/route add default HISADDR -mtu 1492" ! sh -c "/sbin/pfctl -f /etc/pf.conf -e" # ! sh -c "/usr/local/sbin/ntpd -p /var/run/ntpd.pid" Quand la connexion s'arrète ppp.linkdown s'éxécute, voici le contenu de ce fichier (dans /etc/ppp/): MYADDR: ! sh -c "/sbin/pfctl -d" On verra plus tard qu'en fait on active et on désactive dans ces fichiers le firewall pf, en utilisant la commande pfctl. 3) Lancement de la connexion: Ajouter ceci dans /etc/netstart: echo -n "Trying to establish PPPoE DSL"; ppp -ddial pppoe for i in 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0; do sleep 5 echo -n.$i" if /usr/local/sbin/adsl-status>/dev/null; then break fi done echo /usr/local/sbin/adsl-status Qui lance donc le script adsl-status à mettre dans /usr/local/sbin/ avec le droit d'éxécution, voici ce que contient adsl-status: #!/bin/sh IP=$(/sbin/ifconfig tun0 | awk '/netmask/{print $2}') if [ -z "$IP" ]; then echo "ADSL link is down." exit 1 else echo "ADSL is up, IP address $IP" exit 0 fi 4) Le parefeu ou firewall: Il faut tout d'abord activer le forwarding (transfert) pour faire fonctionner le parefeu, pour cela décommenter la ligne: net.inet.ip.forwarding=1 dans le fichier /etc/sysctl.conf.(c'est à dire enlever le petit # au début de la ligne). Puis paramétré votre fichier de configuration du firewall comme suit, pf.conf dans /etc: (j'ai volontairement enlever des parties inutiles pour la compréhension à vous d'incorporer ces lignes dans votre pf.conf) # $OpenBSD: pf.conf,v 1.19 2003/03/24 01:47:28 ian Exp $ # # See pf.conf(5) and /usr/share/pf for syntax and examples. # Required order: options, normalization, queueing, translation, filtering. # Macros and tables may be defined and used anywhere. # Note that translation rules are first match while filter rules are last match. # Macros: je déclare mes interfaces et mes réseaux. ext_if="tun0" int_if="rl1" int_if2="rl2" internal_net="192.168.0.1/24" internal_net2="192.168.1.1/24" # Normalization: je normalise. scrub in all # Translation: je fais du NAT, network adress translation, obligatoire !! nat on $ext_if from $internal_net to any -> ($ext_if) nat on $ext_if from $internal_net2 to any -> ($ext_if) # Filtering: filrage implicite. pass in all pass out all #smtp local....pas forcément utile... pass in quick on lo0 all pass out quick on lo0 all # bloque certains paquets et laisser passer pour me connecter en ssh de l'extérieur #et sur l'interface du wlan pour authpf. block in log all pass in on $ext_if proto tcp from any to any port 22 keep state pass out on $ext_if proto { tcp, udp, icmp } all keep state pass in on $int_if proto { tcp, udp, icmp } all keep state pass in on $int_if2 proto tcp from $internal_net2 to $int_if2 port 22 keep state #je déclare authpf sur l'interface du wlan anchor authpf in on $int_if2 Maintenant pour lancer le parefeu pf au démarrage éditer /etc/rc.conf et mettre YES à la ligne adéquate: pf=YES # Packet filter / NAT Quelques commandes utiles: Pour couper le parefeu, pftcl -d Pour le relancer en suivant les règles de /etc/pf.conf, pfctl -e -f /etc/pf.conf 5) Et voilà enfin authpf: La définition que j'avais donné pour l'ebook: http://www.nantes-wireless.org/pages/wiki/index.php/Authpf « Qu'est ce que Authpf? C'est une application qui tourne sur le système OpenBSD (www.openbsd.org), authpf est donc le diminutif de authentification + pf, pf étant le Firewall d'OpenBSD. Quel est son utilité ? Toute personne qui se logge et s'authentifie avec SSH, le système détermine des règles de Firewall personnalisées à cette utilisateur connecté , tout ceci grâce à Authpf. Ce qui veut dire que par la gestion d'Authpf nous pouvons par exemple interdire ou autoriser un utilisateur à surfer si OpenBSD et Authpf sont sur la passerelle. C'est une sorte de gestion dynamique du Firewall, c'est donc un moyen efficace de sécuriser sa passerelle sans fil relié à Internet Ou tout autre réseau. » La page du manuel relative d'authpf pour tout aprofondissement: http://www.openbsd.org/cgibin/man.cgi?query=authpf&apropos=0&sektion=0&manpath=OpenBSD+Current&arch =i386&format=html Tout d'abord pour sécuriser un peu plus, éditer votre / etc/ssh/sshd_config pour y faire apparaître ces paramêtres: Protocol 2 ClientAliveInterval 15 ClientAliveCountMax 3 Maintenant éditer authpf.rules dans /etc/autphf pour les règles spécifiques du parefeu pour les utilisateurs connectés, par défaut on bloque tout sauf ssh dans pf.conf sur l'interface du réseau wifi, une fois connecté c'est les règles d'authpf.rules qui comptent. ext_if="tun0" int_if="rl1" int_if2="rl2" internal_net="192.168.0.1/24" internal_net2="192.168.1.1/24" pass in on $int_if2 proto { tcp, udp, icmp } from $user_ip keep state Voilà il ne reste plus qu'a déclarer authpf comme shell, créer les utilisateurs et les autorisés. On rajoute le shell dans /etc/shells: # $OpenBSD: shells,v 1.5 1997/05/28 21:42:20 deraadt Exp $ # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/sh /bin/csh /bin/ksh /usr/bin/false /usr/sbin/authpf On creait un user avec la commande adduser, à la fin vous devez avoir une proposition de ce style avec comme shell authpf: Name: Password: Fullname: Uid: Gid: Groups: HOME: Shell: OK? (y/n) lisa **** lisa 1005 1005 (lisa) lisa /home/lisa /usr/sbin/authpf [y]: Autoriser lisa dans /etc/authpf/authpf.allow : herbert johnny lisa et faire un message «sympathique» de bienvenue dans /etc/authpf/authpf.message : *********************************************************** Hello Bienvenue sur cette passerelle, ne faites pas de bétises sous peine de privations ;-) L'admin ********************************************************** Si vous avez des remarques, si cette doc vous a été utile merci de m'envoyer un petit mail à [email protected] Les liens pour aprofondir ou s' aider: Quelques fichiers de conf zippés: http://earxtacy.free.fr/authpf.tar.gz Comment se connecter en ssh sur la passerelle: http://earxtacy.free.fr/comment-se-connecter.pdf Un super site sur l'installation et la configuration d'OpenBSD, à lire avant de se plaindre ;-) : http://www.openbsd-edu.net/ La FAQ officiel sur pf: http://www.openbsd.org/faq/pf/ et bien sur google est ton ami: http://www.google.fr