TP SECU NAT ARS IRT 2010 2011 ( CORRECTION ) Présentation du TP le firewall sera une machine virtuelle sous Devil Linux le firewall a deux cartes réseaux eth0 ( interface externe ) et eth1 (interface interne) addresse IP du réseau interne 10.0.0.0/24 le fw en 10.0.0.10 et le serveur en 10.1.0.100 le serveur interne sera la machine virtuelle SERVEUR sous Mandriva 2008.0 quelques indications: iptables t nat F : vide la table nat de toute les règles ( F pour Flush ) iptables t nat D «règle» : supprime une règle iptables t nat L : liste les règles en cours exemples : iptables t nat L nv ( n signifie numeric ( pas de résolution dns et v verbose )) I Préparation Le FIREWALL est une machine sous devil linux ( http://www.devil linux.org/ ) le principe est de booter sur un CDROM et de sauvegarder la configuration sur une disquette ou bien une clef USB. Dans le cadre du tp le cdrom est virtuel ( c'est une image iso ) la disquette est elle aussi virtuelle ( c'est un fichier ). Lorsque l'on fait des modifications des configurations ilest important de sauvegarder la configuration par la commande save config. Sur la devil, il existe une commande de configuration ( setup ) le seul login existant sur le firewall est root et il n'a pas de mot de passe 1 démarrer la machine virtuelle FIREWALL mettre azerty comme mot de passe à root et sauvegarder la configuration passwd save-config noter les adresses IP des interfaces eth0 et eth1 root@firewall:~ # ifconfig eth0 eth0 Link encap:ethernet HWaddr 00:0C:29:B6:33:6C inet addr:134.157.5.41 Bcast:134.157.5.255 Mask:255.255.255.0 root@firewall:~ # ifconfig eth1 eth1 Link encap:ethernet HWaddr 00:0C:29:B6:33:76
inet addr:10.0.0.10 Bcast:10.0.0.255 Mask:255.255.255.0 regarder la valeur de l'ip FORWARDING si il est à zero activez le Méthode 1: root@firewall:~ # cat /proc/sys/net/ipv4/ip_forward 0 root@firewall:~ # echo 1 > /proc/sys/net/ipv4/ip_forward root@firewall:~ # cat /proc/sys/net/ipv4/ip_forward 1 ceci est à refaire à chaque boot Methode 2 vi /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p ceci sera automatiquement remis à chaque boot 2 démarrer la machine virtuelle serveur ( mandriva 2008.0 ) donner moi l'adresse IP, le netmask et le broadcast du serveur virtuel [vmuser@serveur ~]$ /sbin/ifconfig eth0 eth0 Link encap:ethernet HWaddr 00:0C:29:CF:1C:90 inet adr:10.0.0.100 Bcast:10.0.0.255 Masque:255.255.255.0 trouver quel est le serveur de nom (DNS) pour cette machine [vmuser@serveur ~]$ cat /etc/resolv.conf search localdomain nameserver 192.168.200.200 quelle est la passerelle [vmuser@serveur ~]$ netstat -rn Table de routage IP du noyau Destination Passerelle Genmask Indic MSS Fenêtre irtt Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 10.0.0.10 0.0.0.0 UG 0 0 0 eth0 10.0.0.10 est la route par défaut ( vers le firewall ) vérifiez que le serveur peut pinger le firewall ainsi que l'inverse [vmuser@serveur ~]$ ping 10.0.0.10 PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data. 64 bytes from 10.0.0.10: icmp_seq=1 ttl=64 time=4.54 ms 64 bytes from 10.0.0.10: icmp_seq=2 ttl=64 time=0.784 ms 64 bytes from 10.0.0.10: icmp_seq=3 ttl=64 time=1.09 ms --- 10.0.0.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.784/2.141/4.545/1.704 ms root@firewall:~ # ping 10.0.0.100 PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=64 time=4.49 ms 64 bytes from 10.0.0.100: icmp_seq=2 ttl=64 time=1.22 ms 64 bytes from 10.0.0.100: icmp_seq=3 ttl=64 time=0.682 ms 10.0.0.100 ping statistics 3 packets transmitted, 3 received, 0% packet loss, time 2025ms rtt min/avg/max/mdev = 0.682/2.136/4.499/1.685 ms II MASQUERADE et NAT A partir de là il vous faudra trois terminaux : un sur la machine virtuelle un sur le firewall un sur srvlnx.formation.jussieu.fr pour jouer le rôle de client externe toutes les commandes de translation se déroulent sur le firewall ;) 1 activer la masquerade pour le réseau interne normalement le serveur virtuel peut pinger l'addresse 134.157.46.129 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -jmasquerade pour vérifier : bash-3.00# iptables -L -nv -t nat Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) 0 0 MASQUERADE all -- * eth0 10.0.0.0/24 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) 2 désactiver la masquerade ( iptables -t nat -F ) faire attention les règles de translation sont comme les règles de filtrage elle s'ajoute les unes à la suite des autres et la première correspondante est utilisée iptables -t nat -D POSTROUTING -o eth0 -s 10.1.0.0/24 -jmasquerade on aurait pu aussi faire iptables -t nat -F ( -F = flush ) ce qui supprime toutes les règles de translation d'un seul coup root@firewall:~ # iptables -t nat -F root@firewall:~ # iptables -t nat -L -nv Chain PREROUTING (policy ACCEPT 1 packets, 245 bytes) Chain POSTROUTING (policy ACCEPT 1 packets, 116 bytes) Chain OUTPUT (policy ACCEPT 1 packets, 116 bytes) 3 IP aliasing sur le firewall mettre une deuxieme addresse IP à l'interface eth0 ( addresse IP std de votre poste +100 ) exemple: si votre poste à l'adresse 192.168.216.15, la deuxieme addresse sera 192.168.216.115 Le nom de l'interface virtuelle : «eth0:0» root@firewall:~ # ifconfig eth0:0 192.168.216.115 netmask 255.255.255.0 up si on voulait garder ce setup au reboot il suffit de créer le fichier
/etc/sysconfig/nic/ifcfg-eth0:0 ( Ceci n'est valide que pour la devil ) avec les bon paramètres pour une ip statique ( on ne peut pas faire de dhcp pour l'alias ( la mac-adresse est la même )) 4 Ecrire la règle de NAT statique du réseau 10.0.0.0/24 sur l'adresse secondaire du FIREWALL vérifier que le serveur virtuel peut sortir ( firefox, icmp, résolution dns ) iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to-source 192.168.216.<<xxx+100>> ping srvlnx.formation.jussieu.fr host www.google.fr 5 Sur le firewall, activez le port forwarding de ssh vers le serveur interne uniquement pour l'adresse secondaire du firewall. Faites un essai depuis srvlnx.formation.jussieu.fr iptables -t nat -A PREROUTING -i eth0 -d 192.168.216.115/32 --dport 22 -j DNAT --to 10.0.0.10:22 bash-3.00# iptables -t nat -L -nv Chain PREROUTING (policy ACCEPT 18 packets, 1846 bytes) 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 192.168.216.115 to:10.1.0.10:22 Chain POSTROUTING (policy ACCEPT 44 packets, 4129 bytes) 0 0 SNAT all -- * eth0 10.1.0.10 0.0.0.0/0 to:192.168.216.115 ssh 192.168.216.15 : avec ceci je me connecte sur le firewall ssh 192.168.216.115: avec ceci je me connecte sur le serveur virtuel mandriva 6 Sur le firewall, activez le port forwarding de ftp pour toutes les adresses externes du Firewall vers le serveur interne iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to 10.0.0.10:21 depuis srvlnx faites ftp 192.168.216.1XX ( xx étant le numero de votre poste) login : anonymous pass :user@ dir cela marche t'il? oui car par défaut nous sommes en mode standard donc le canal de donnée est une connexion sortante depuis le serveur virtuel à partir du port 20 à destination du client sur un port supérieur à 1024 qui est donc réécrite par la règle du point 4 toujours active suivante : iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to-source 192.168.216.215 passer les commandes suivantes passive dir pouvez vous expliquer le problème et le corriger en mode passif, le canal de données est une connexion entrante sur un port supérieur à 1024 il faudrait donc forwarder le port mais on ne le connais pas à l'avance pour régler ce problème, il suffit de charger le module ip_nat_ftp dans le noyau # modprobe ip_nat_ftp
7 Supprimer les règles de translation précédentes ash-3.00# iptables -t nat -F bash-3.00# iptables -t nat -L -nv Chain PREROUTING (policy ACCEPT 19 packets, 1922 bytes) Chain POSTROUTING (policy ACCEPT 56 packets, 5462 bytes) faite un NAT static bidirectionnel pour le serveur interne sur l'adresse IP secondaire du firewall iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.100/32 -jsnat to-source 192.168.216.115 iptables -t nat -A PREROUTING -i eth0 -d 192.168.216.115 -jdnat --to 10.0.0.100 tester en faisant à la fois un tcpdump sur la machine virtuelle et un nmap depuis le client externe depuis srvlnx.formation.local nmap 192.168.216.115 sur la machine virtuelle; tcpdump -n -i eth0 et l'on voit passer tous les paquets venant de srvlnx.formation.local