Documentation NetFilter - Direction du Système d`Information (DSI)
Transcription
Documentation NetFilter - Direction du Système d`Information (DSI)
Netfilter 1. Définition Netfilter est la suite d'un ensemble de code de filtrage dans les noyaux linux : ipfw pour les noyaux 2.0, ipchains pour les noyaux 2.2. Suite aux insuffisances du code ipchains, il a été décidé de créer un autre mécanisme, plus propre, et surtout permettant de faire du stateful inspection en filtrage. Ce nouveau code est inclus dans les noyaux Linux à partir de la 2.4.0. Depuis la version du noyau 2.6.20, le processus de suivi de connexion ip_conntrack (uniquement IPV4) est remplacé par nf_conntrack. Depuis la version 2.6.30, un nouvel outil fait un début d'apparition nftables, qui sera amené à remplacer dans l'avenir iptables. Il sera plus rapide, plus efficace, et multi-protocoles (Ipv4, Ipv6 et arptables). 2. Les conditions d’utilisation Si l’on veut faire un Pare-feu autre que purement local, il faut mettre l’IP forwarding actif : echo 1>/proc/sys/net/ipv4/ip_forward Pour obtenir un filtrage STIC et un NAT STIC, il faut de plus charger les modules propres aux protocoles que l’on souhaite traiter. A l’heure actuelle pour le noyau 2.6.32 les modules suivants sont traités : ftp, irc, h323, sip, netbios, amanda plus quelques autres. modprobe nf_conntrack_ftp modprobe nf_conntrack_irc modprobe nf_nat_ftp modprobe nf_nat_irc Mais le mieux sera d'utiliser le fichier /etc/sysconfig/iptables_config 3. Les fichiers systèmes à modifier Dans le fichier /etc/sysctl.conf, qui est pris en compte dès le démarrage (ou avec un sysctl -a) net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.log_martians = 1 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.neigh.default.gc_thresh3 = 16384 net.ipv4.neigh.default.gc_thresh2 = 4096 net.ipv4.neigh.default.gc_thresh1 = 512 net.ipv4.ip_conntrack_max = 1048576 # Activation du routage # Blocage de l'IP spoofing # On journalise les IP spoofing # Blocage du source routing # On élève le nombre d'arp possibles # Nombre de connexions simultanées On modifie aussi le fichier /etc/modprobe.conf options ip_conntrack hashsize=1048576 options ip_conntrack_ftp ports=21,9021 # Au cas où l'on a un ftp sur le 9021 options ipt_recent ip_list_tot=3000 ip_pkt_list_tot=50 4. IPTables : les ordres pour netfilter Les ordres associés à Netfilter sont établis grâce à la commande iptables. iptables -D <nom_de_la_chaîne> [numéro de la règle] détruit une règle d’une chaîne iptables –A <nom_de_la_chaîne> <règle> ajoute une règle à la fin de la chaîne iptables –F <nom_de_la_chaîne> vide la chaîne iptables –L [-v][nom_de_la_chaîne] liste (avec options) la chaîne (ou toutes) iptables –N <nom_de_la_nouvelle_chaîne> crée une nouvelle chaîne iptables –X <nom_de_la_chaîne> détruit une chaîne iptables –P <nom_de_la_chaîne> <cible> définit <cible> comme règle par défaut de chaîne Fabrice Prigent Documentation NetFilter :1/4 mercredi 4 mars 2009 4.1. Les chaînes: Il en existe 5 qui sont prédéfinies. On peut en ajouter d’autres qui seront considérées comme des sousprogrammes revenant à leur point d’origine si aucune cible n’a pu être sélectionnée. PREROUTING est réservé à l’usage du DNAT. Elle permet à l’ensemble des filtres de travailler avec l’adresse du vrai serveur et l’adresse du vrai client. INPUT est réservé au filtrage des paquets destinés au pare-feu FORWARD est réservé au filtrage des paquets qui traversent le pare-feu OUTPUT est réservé au filtrage des paquets produits par le pare-feu POSTROUTING est réservé à l’usage du SNAT. Cette séparation est vivement conseillée, cependant quelques cas peuvent exister où l’on transgressera ces règles. Interface(s) Interface(s) FORWARD PREROUTING POSTROUTING INPUT OUTPUT User-defined User-defined User-defined Processus 4.2. Les règles : Elles sont de la forme : iptables -A <nom_de_la_chaine> [condition]..[condition] -j <cible> 4.2.1. Les conditions disponibles pour les règles : ! -t -p --protocol -s --source -d --destination -i --in-interface -o --out-interface --sport --source-port --dport --destination-port --tcp-flags --icmp-type --mac-source --state -m Fabrice Prigent permet d’obtenir la négation d’une condition nom de la table à utiliser : filter (par défaut), nat, mangle, voire raw spécifie le protocole (tcp,udp,icmp,all) IP source (IP ou CIDR) IP destination (IP ou CIDR) interface d’entrée (lo,eth0,eth+…) sur INPUT et FORWARD interface de sortie disponible sur OUTPUT et FORWARD port source ex 21 ou 6001:6020 (de 6001 à 6020) port de destination ex 80 ou 1:1023 ou 1024 : suivi de 2 paramètres une liste de « flags TCP » testés (SYN,ACK,FIN, …,ALL,NONE) une liste de « flags TCP » activés (SYN,ACK,FIN, …,ALL,NONE) code ICMP (echo-reply, echo-request) adresse ethernet d’origine état : ESTABLISHED, NEW, INVALID, RELATED option : -mstate permet d’utiliser - -state -mmultiport permet de mettre plusieurs ports : 21,80,443 Documentation NetFilter :2/4 mercredi 4 mars 2009 4.2.2. les cibles : -j ACCEPT -j DROP -j REJECT -j LOG -j DNAT -j SNAT -j MASQUERADE -j <chaine_user> -j REDIRECT accepte le paquet détruit le paquet refuse le paquet (envoie un ICMP) on loggue le paquet suivi éventuellement de--log-prefix ‘chaine pour le syslog’ on fait du DNAT puis on fait suivre de --to-destination IP:port ou IP:port-port ou IP-IP ou CIDR on fait du SNAT puis on fait suivre de --to-source IP:port ou IP:port-port ou IP-IP ou CIDR on fait du PAT lance la chaîne utilisateur, si à la fin de celle-ci aucune décision n’est prise on revient à la chaîne « mère » on renvoie le paquet à un processus : généralement un proxy transparent 5. Quelques exemples iptables –A INPUT –s 10.0.0.0/8 –p tcp –dport 22 –j DROP Interdit de contacter en tcp le port 22 du firewall (chaîne INPUT) depuis le réseau 10.x iptables –A INPUT –s 127.0.0.1 –i eth1 -j LOG Journalise toute les tentatives de connexions provenant de l’interface eth1 avec l’adresse 127.0.0.1 iptables –N INCORRECT Crée une sous-chaîne INCORRECT iptables –N LOGDROP iptables –A LOGDROP -j LOG --log-level warn --log-prefix "ALERTE" iptables –A LOGDROP -j DROP Crée une sous-chaine spécialisée qui journalise avec le niveau warn les paquets en ajoutant le mot ALERTE dans le log iptables –A INCORRECT –p tcp ! --tcp-flags SYN,ACK,FIN SYN -m state --state NEW -j LOGDROP Envoie vers la sous-chaîne LOGDROP les paquets TCP dont l’état est NEW, alors qu’ils n’ont pas le seul bit SYN activé parmi SYN,ACK et FIN. Donc cette règle va détruire et logguer les paquets qui créent une nouvelle connexion, alors qu'ils ne respectent pas le schéma standard TCP. Mais elle bloquera les communications après réapplication des règles. iptables –A POSTROUTING –t nat -s 192.168.30.0/24 –j SNAT --to-source 193.49.59.1-193.49.59.10 Fait du SNAT pour toutes les machines du réseau 192.168.30.x et leur donne une adresse dans l’intervalle [193.49.59.1..193.49.59.10] iptables –A FORWARD –m state --state ESTABLISHED –j ACCEPT Accepte toute communication que l’on considère comme établie iptables –A FORWARD –m state --state ESTABLISHED,RELATED –j ACCEPT Accepte toute communication que l’on considère comme établie ou associée à une connexion établie 6. IP_conntrack et NF_conntrack NF_conntrack est capable de gérer IPV6, de synchroniser des tables de connexion de 2 firewalls en parallèle (démon conntrackd), interaction « facile » entre l'espace noyau et l'espace utilisateur qui permet de très nombreuses manipulations en « direct » des connexions, dont, en particulier, la gestion de la redondance des firewalls. IP_conntrack ne fonctionne plus depuis la 2.6.20. Fabrice Prigent Documentation NetFilter :3/4 mercredi 4 mars 2009 7. Pour en savoir plus http://www.netfilter.org Le site d’origine. C’est sur ce site que se trouvent toutes les informations les plus à jour. Evitez les traductions qui ont toujours un temps de retard. http://www.frozentux.net Le tutorial le plus complet sur IPTables Fabrice Prigent Documentation NetFilter :4/4 mercredi 4 mars 2009