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

Documents pareils