pare - feu généralités et iptables Cycle Ingénierie 3e année SRT Dernière mise à jour : 12/12/2006 Adrien URBAN
pare-feu général routeurs pare-feu sans état pare-feu avec état pare-feu avec état et inspection translation d'adresses iptables filter nat 2/22
routeurs Extérieur sans filtre routeur * * Intérieur Avec un simple routeur : Aucune restrictions Tous les types de flux passent 3/22
pare-feu sans état (stateless) tcp Extérieur pare-feu filtre simple (http) tcp: *:* *:80 tcp: *:* *:80 Intérieur sans état, on doit accepter les paquets dans les deux sens : la connection en sortie la réponse client:31456 srv:80 SYN srv:80 client:31456 SYN,ACK client:31456 srv:80 ACK... srv:80 client:31456 client:31456 srv:80 4/22
pare-feu sans état (stateless) udp Extérieur pare-feu filtre simple (dns) udp: *:* *:53 udp: *:* *:53 Intérieur client:31456 srv:53... srv:53 client:31456... client:31456 srv:53 5/22
pare-feu sans état (stateless) attaques Extérieur pare-feu tcp: *:* *:80 tcp: *:* *:80 udp: *:* *:53 udp: *:* *:53 (tftp) evil:53 client:69... client:69 evil:53... evil:53 client:69 Intérieur (ssh) evil:80 client:22 SYN client:22 evil:80 SYN,ACK evil:80 client:22 ACK... 6/22
pare-feu avec état (stateful) tcp Extérieur pare-feu filtre à état (http) tcp: *:* *:80 (syn) + cx établies Intérieur avec état, on doit accepter les paquets dans les deux sens : la création de connexions en sortie les paquets d'une connexion établie client:31456 srv:80 SYN enregistrement de la connexion srv:80 client:31456 SYN,ACK client:31456 srv:80 ACK... srv:80 client:31456 client:31456 srv:80 7/22
pare-feu avec état (stateful) udp Extérieur pare-feu filtre à état (dns) udp: *:* *:53 + cx établies Intérieur client:31456 srv:53 enregistrement de la connexion... srv:53 client:31456... client:31456 srv:53 8/22
pare-feu avec état (stateful) attaques Extérieur pare-feu tcp: *:* *:80 udp: *:* *:53 + cx établies (tftp) evil:53 client:69 connexion non-enregistrée -> paquet rejeté Intérieur (ssh) evil:80 client:22 SYN connexion non-enregistrée -> paquet rejeté 9/22
pare-feu avec inspection ftp actif Protocole FTP actif : client:31222 srv:21 220 Welcome to FTP server USER anonymous 331 Please specify the password. PASS email 230 Login successful. PORT 10,11,12,13,212,49 200 PORT command successful. LIST. srv:33262 client:54321 150 Here comes the directory listing. drwxr-xr-x 3 ftp ftp 4096 Oct 24 13:17 mirrors 226 Directory send OK. QUIT 221 Goodbye. Chaque transfert de données. (list d'un répertoire, envoie d'un fichier, récupération d'un fichier) donne lieu a une nouvelle connexion de données. Le port est choisi aléatoirement pour chaque connexion par le client. Le serveur se connecte au client. IP client: 10.11.12.13 212 256+49 = 54321 10/22
pare-feu avec inspection ftp passif Protocole FTP passif : client:31222 srv:21 220 Welcome to FTP server USER anonymous 331 Please specify the password. PASS email 230 Login successful. PASV 227 Entering Passive Mode (10,20,30,40,198,138) LIST. client:34651 srv:50826 150 Here comes the directory listing. drwxr-xr-x 3 ftp ftp 4096 Oct 24 13:17 mirrors 226 Directory send OK. QUIT 221 Goodbye. Le port est choisi aléatoirement pour chaque connexion par le serveur. Le client se connecte au client. IP serveur: 10.20.30.40 198 256+138 = 50826 11/22
pare-feu avec inspection Il n'y a pas que les connexions établies, il y a également les connexions en relation avec des échanges en cours 12/22
translation d'adresses sources (SNAT) IPv4 - adresses publiques sont limitées - utilisations d'adresses privées en local - connexions avec une machine externe client 10.11.12.13 10.11.12.254 pare-feu 195.167.200.130 serveur 212.27.48.10 10.11.12.13 212.27.48.10 10.11.12.13 212.27.48.10 212.27.48.10 10.11.12.13?? 13/22
translation d'adresses sources (SNAT) Le pare-feu doit donc changer l'adresse source des paquets sortant Il y place donc une IP publique qui lui correspond. client 10.11.12.13 10.11.12.254 pare-feu 195.167.200.130 serveur 212.27.48.10 10.11.12.13 212.27.48.10 195.167.200.130 212.27.48.10 212.27.48.10 10.11.12.13 212.27.48.10 195.167.200.130 14/22
translation d'adresses destinations (DNAT) IPv4 - un serveur avec une IP publique associée - on veux placer un pare-feu avant ce serveur - il utilise une IP privée, le pare-feu récupérera et transmettra les informations - connexions sur un serveur depuis l'extérieur client 212.27.48.10 10.11.12.254 pare-feu 195.167.200.130 195.167.200.131 serveur 10.20.30.40 212.27.48.10 195.167.200.131 212.27.48.10 10.20.30.40 195.167.200.131 212.27.48.10 10.20.30.40 212.27.48.10 15/22
iptables filter interface réseau FORWARD routing routing INPUT OUTPUT applications locales 16/22
iptables filter Squelette : # on désactive le relais de paquets echo 0 > /proc/sys/net/ipv4/ip_forward # POLICY on défini l'action par défaut iptables -t filter -P FORWARD DROP # FLUSH on supprime toutes les règles iptables -t filter -F FORWARD # mise en place des différents filtres # on active le relais de paquets echo 1 > /proc/sys/net/ipv4/ip_forward 17/22
iptables filter Les filtres : # ici, eth0 = LAN, eth1 = NET # les connexions http sortantes iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport http -j ACCEPT # les connexions dns sortantes iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport domain -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p udp --dport domain -j ACCEPT # ce qui est établis ou en relation avec une connexion établie iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 18/22
iptables nat interface réseau PREROUTING POSTROUTING routing routing OUTPUT applications locales 19/22
iptables nat - source SNAT # le changement de source ne peut se faire que dans la table POSTROUTING iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -F POSTROUTING # toutes connexions depuis 10.20.30.41 sortira avec l'adresse publique 132 iptables -t nat -A POSTROUTING -o eth1 -s 10.20.30.41 \ -j SNAT --to-source 195.167.200.132 # tout autre connexion sortante sur eth1 (net) utilisera l'ip de l'interface iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 20/22
iptables nat - destination DNAT # le changement de source peut se faire en PREROUTING ou OUTPUT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -F PREROUTING # tout ce qui est a destination de 131 ira vers le serveur 40. iptables -t nat -A PREROUTING -i eth1 -d 195.167.200.131 \ -j DNAT --to-destination 10.20.30.40 21/22
iptables global interface réseau PREROUTING (DNAT) POSTROUTING (SNAT) FORWARD routing routing INPUT OUTPUT (DNAT) applications locales 22/22