Pare-feu
Pare-feu Responsables : Hugo ETIEVANT (côté routeur), Benoît MAYNARD (côté client) Objectifs : sécuriser la passerelle et protéger le réseau privé Outil : ipchains
Outil ipchains Utilisation de l’outil standard de firewalling : ipchains. Permet d’établir des règles de filtrage selon une hiérarchie de chaînes arborescentes. Rapide, souple, efficace et très bien documenté. Ipchains pour les noyaux 2.2 Ensemble de règles régies par des polices (DENY, ACCEPT, REJECT, MASQ) Regroupées en chaînes (input, output, forward, définies par le user) Mode paranoïac : on rejète tout (REJECT)
Fonctionnement (I) Les règles de filtrage déterminent le devenir des paquets grâce à une police qui peut être : ACCEPT, REJECT, DENY, MASQ ou encore une redirection vers une chaîne. Les règles sont groupées en chaînes qui peuvent être celles de base : input, forward, output ou d’autres définies par l’utilisateur.
Fonctionnement (II) Les paquets entrants dans le pare-feu arrivent automatiquement dans la chaîne input. Ceux qui sont émis par le pare-feu, passent dans la chaîne output. Et ceux qui sont retransmis passent par la chaîne forward. Un paquet qui entre dans une chaîne teste toutes les règles de la chaîne jusqu’à en trouver une qui lui corresponde. Et il obéit à la police spécifiée par la règle trouvée.
Fonctionnement (III) Si aucune règle s’appliquant au paquet n’a été trouvée, alors c’est la police par défaut de la chaîne qui est utilisée pour savoir que faire de ce paquet. Il est donc important, avant de créer les règles, de définir la police par défaut d’une chaîne. Par sécurité, on applique REJECT en entrée (input) et en sortie (output) et DENY en redirection (forward). Pour définir les polices par défaut aux chaînes : ipchains –P input REJECT ipchains –P output REJECT ipchains –P forward DENY
Les polices Les polices de base : ACCEPT : le paquet est accepté REJECT : le paquet est rejeté avec envoi d’un message d’explication ICMP DENY : le paquet est rejeté en mode silencieux MASQ : le paquet est redirigé par masquerading (translation d’adresses IP NAT)
Les critères de sélection Les règles reposent sur des critères de sélection très variés : Machine source Port source Machine destination Port destination Interface TOS Protocole Drapeaux spéciaux du paquet TCP Types et codes spéciaux du paquet ICMP
Actions sur les paquets Les règles peuvent définir différentes actions sur un paquet : Mise en fichier de log Application d’une police Redirection vers une autre chaîne Marquage du paquet
Mode de construction des règles Chaînes création N vidage F suppression X affectation d’une police P affichage L Règles ajout en fin de liste A, insertion ordonnée I suppression D remplacement R changement d’ordre test C
Politique de sécurité IP masquerading Prohiber le Ping Palier à l’IP Spoofing Restreindre Telnet Gérer l’accès aux sites web Limiter les autres services Garder trace du trafic sensible
IP masquerading Pour un réseau local invisible de l’extérieur. Tout en lui permettant l’accès à l’extérieur incognito. echo 1 > /proc/sys/net/ipv4/ip_forward ipchains –P forward DENY ifconfig eth0 up 192.168.0.1 netmask 255.255.255.0 ifconfig eth1 up 134.214.90.20 netmask 255.255.252.0 ipchains –b –A forward –s 192.168.0.0/24 –j MASQ Activation du forwarding automatique du noyau Filtrage absolue Conf cartes réseau masquerading bidirectionnel (NAT)
Accès aux sites web Autoriser seulement les connexions HTTP vers l’extérieur. ipchains –A forward –p tcp –s 192.168.0.0/24 –d 0.0.0.0/0 80 –j MASQ Port 80 : HTTP ! –y Interdiction des datagrammes de demande de connexion (drapeau SYN) ipchains –A forward –p tcp ! –y –s 0.0.0.0/0 80 –d 192.168.0.0/24 –j MASQ
IP Spoofing Combattre l’usurpation d’identité, limité à la plage d’adresses de notre réseau privé et à l’adresse de notre passerelle. ipchains –N ipspoof ipchains –F ipspoof ipchains –A ipspoof –l –j DENY ipchains –A input –i eth1 –s 192.168.0.0/24 –j ipspoof ipchains –A input –i eth1 –s 134.214.90.20 –j ipspoof N : nouvelle chaîne F : flush (vidage) des règles de la chaîne A : ajout d’une règle -l : mise en fichier de log
Restrictions Telnet (I) Pour des besoins de maintenance à distance, autorisation est faite à la machine 134.214.90.14 de se connecter à la passerelle sur le port Telnet (port 23 selon /etc/services). L’accès des autres machines via Telnet est interdit.
Restrictions Telnet (II) – en entrée ipchains –N telin ipchains –F telin ipchains –A telin –s 134.214.90.14 –d 134.214.90.20 –j ACCEPT –l -j REJECT ipchains –A input –i eth1 –p tcp –s 0.0.0.0/0 23 –j telin
Restrictions Telnet (III) – en sortie ipchains –N telout ipchains –F telout ipchains –A telout –s 134.214.90.20 –d 134.214.90.14 –j ACCEPT –l –p tcp ! –y -j REJECT ipchains –A output –i eth1 –s 0.0.0.0/0 23 –j telout
Trafic ICMP (I) Internet Control Message Protocol (RFC 950) : mécanisme de contrôle des erreurs au niveau IP. Utilisé par les outils ping et traceroute afin de préparer les attaques par découverte des réseaux. Ping : teste l’existence d’une machine sur le réseau. Traceroute : suivi du trajet des paquets.
Trafic ICMP (II) – objectifs Pour éviter tout scan futur, la parade pour rester invisible aux outils de découverte du réseau est : Devenir invisible aux requêtes echo-request Malgré tout, on va participer à la gestion normale des erreurs Gérer normalement les autres messages ICMP
Ping – avant 134.214.90.20 134.214.88.12 ping 134.214.90.20 -c 1 64 bytes from 134.214.90.20: icmp_seq=0 ttl=240 time=17.3 ms
??? 100% packet loss Ping – après Mise en fichier de log. 134.214.90.20 134.214.88.12 ??? Mise en fichier de log. ping 134.214.90.20 -c 1 100% packet loss
Trafic ICMP (III) – en entrée ipchains -N icmpin ipchains -F icmpin ipchains -A icmpin -l -p icmp --icmp-type echo-request -j DENY ipchains -A input -i eth1 -j icmpin
Trafic ICMP (IV) – en sortie ipchains -N icmpout ipchains -F icmpout ipchains -A icmpout -l -p icmp --icmp-type echo-reply -j DENY ipchains -A output -i eth1 -j icmpout
Fichier de log Conserver les traces du trafic sensible (option -l) /etc/log/messages Exemple de trace : Nov 8 10:25:53 b710pbv kernel: Packet log: input REJECT eth1 PROTO=17 134.214.90.16:138 134.214.91.255:138 L=236 S=0x00 I=51490 F=0x0000 T=128 (#7) date et heure machine, système chaîne, police, interface protocole machine et port source machine et port destination taille du paquet TOS id du paquet IP grapeau et id de fragment durée de vie (TTL) index de la règle utilisée