Debian logo [inetdoc.LINUX]

3. Les outils de filtrage réseau

Sur un système Debian GNU/Linux, les fonctions de filtrage réseau sont réparties entre les espaces mémoire noyau (kernelspace) et utilisateur (userspace).

Que l'on utilise un noyau fourni par la distribution au le noyau construit à l'issue des travaux pratiques Configuration des fonctions réseau & compilation du noyau LINUX, les fonctions de filtrage réseau sont disponibles sous forme de modules que l'on (charger|décharger) de la mémoire système en cours d'exécution. Les outils de filtrage réseau du noyau Linux chargent dynamiquement ces modules en fonction de la syntaxe des règles de filtrage saisies.

3.1. Questions sur iptables

1.

Quels paquets contiennent les outils utilisateur basiques de manipulation des fonctions de filtrage réseau ?

On sait que la partie userspace des fonctions de filtrage réseau s'appelle iptables. On lance donc une recherche avec ce mot clé dans la base de données des paquets Debian et on installe les paquets intéressants.

# apt-cache search iptables |grep iptables
firehol - An easy to use but powerful iptables stateful firewall
ipac-ng - IP Accounting for iptables (kernel >=2.4)
ipkungfu - iptables-based Linux firewall
iptables - administration tools for packet filtering and NAT
iptables-dev - development files for iptable's libipq and libiptc
iptstate - Top-like state for netfilter/iptables
kmyfirewall - iptables based firewall configuration tool for KDE
libiptables-ipv4-ipqueue-perl - Perl extension for libipq
reaim - Enable AIM and MSN file transfer on Linux iptables based NAT
uif - Advanced iptables-firewall script
uruk - Very small firewall script, for configuring iptables

Pour ces travaux pratiques, on doit rester à un faible niveau d'intégration des règles de filtrage de manière à bien illustrer les mécanismes de suivi de communication. Les deux paquets retenus sont iptables et iptstate. On utilise les commandes usuelles d'installation et de consultation des informations sur ces deux paquets.

# apt-get install iptables iptstate
<snipped/>
# apt-cache show iptables
<snipped/>
# apt-cache show iptstate
<snipped/>

2.

Quelles sont les options de la commande iptables qui permettent de visualiser les règles de filtrage réseau actives ainsi que les compteurs correspondants ?

En consultant les pages de manuels via # man iptables, on relève les options -vL.

# iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

La table netfilter est utilisée de façon implicite alors que la table nat de traduction d'adresse doit être appellée explicitement.

# iptables -vL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

3.

Comment visualiser les modules chargés dynamiquement en fonction de l'utilisation des règles de filtrage réseau ?

La commande lsmod sert à lister les modules chargés en mémoire. En exécutant cette commande avant et après avoir utilisé iptables, on visualise par différence les nouveaux modules chargés par chaque appel. Par exemple, l'exécution des deux commandes de consultation de la question précédente provoque le chargement des modules suivants.

  • Consultation de la table netfilter :

    # lsmod |less
    Module                  Size  Used by
    iptable_filter          3200  0
    ip_tables              14536  1 iptable_filter
    x_tables               14852  1 ip_tables
    
  • Consultation de la table nat :

    # lsmod |less
    Module                  Size  Used by
    iptable_nat             7940  0
    ip_nat                 17836  1 iptable_nat
    ip_conntrack           53684  2 iptable_nat,ip_nat
    nfnetlink               6808  2 ip_nat,ip_conntrack
    iptable_filter          3200  0
    ip_tables              14536  2 iptable_nat,iptable_filter
    x_tables               14852  2 iptable_nat,ip_tables
    

4.

Quels sont les outils de sauvegarde et de restauration des jeux de règles de filtrage réseau fournis avec le paquet iptables ?

La liste des fichiers du paquet contient les outils recherchés : # dpkg -L iptables |grep bin. Les deux programmes iptables-save et iptables-restore permettent respectivement de sauvegarder et de restaurer l'ensemble des règles des tables netfilter et nat.

Ces programmes sont indispensables pour éditer, insérer ou retirer des règles sans avoir à se préoccuper de l'ordre de saisie. De plus, le programme de restauration iptables-restore se charge de l'effacement des règles précédentes.

3.2. Questions sur netfilter

1.

Comment identifier la version du noyau utilisée et la disponibilité des fonctions de filtrage réseau de cette version ?

On utilise la commande rituelle d'identification du système uname que l'on associe à une recherche dans l'arborescence des modules du noyau en cours d'exécution.

# uname -r
2.6.18.3
$ find /lib/modules/`uname -r` -type d -name netfilter
/lib/modules/2.6.18.3/kernel/net/bridge/netfilter 1
/lib/modules/2.6.18.3/kernel/net/ipv4/netfilter   2
/lib/modules/2.6.18.3/kernel/net/ipv6/netfilter   3
/lib/modules/2.6.18.3/kernel/net/netfilter        4

1

Fonctions de filtrage au niveau liaison. Ces fontions ne sont pas utilisées ici.

2

Fonctions de filtrage au niveau réseau utilisant le protocole IPv4. C'est dans ce répertoire que se trouvent les modules utilisés dans ces travaux pratiques.

3

Fonctions de filtrage au niveau réseau utilisant le protocole IPv6. Ces fontions ne sont pas utilisées ici.

4

Fonctions communes de filtrage réseau indépendantes des niveaux et des protocoles utilisés. C'est notamment à ce niveau que l'on trouve les modules de la machine d'état de suivi de communications.

2.

Quels sont les objets du système de fichiers virtuel /proc relatifs aux fonctions de filtrage réseau du noyau Linux ?

Avec le chargement des modules en mémoire système, de nouvelles entrées apparaissent dans l'arborescence /proc. Le chargement des trois premiers modules entraîne la création des entrées relatives aux noms chaînes, aux correspondances et aux prises de décisions.

# find /proc -name "*tables*"
/proc/net/ip_tables_targets
/proc/net/ip_tables_matches
/proc/net/ip_tables_names

La consultation des règles de la table nat entraîne la création de toutes les entrées nécessaires à la machine d'état de suivi de communication.

# find /proc -name "*conntrack*"
/proc/sys/net/ipv4/ip_conntrack_max
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_max_retrans
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_be_liberal
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_loose
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_max_retrans
/proc/sys/net/ipv4/netfilter/ip_conntrack_log_invalid
/proc/sys/net/ipv4/netfilter/ip_conntrack_generic_timeout
/proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout
/proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream
/proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_last_ack
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_recv
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
/proc/sys/net/ipv4/netfilter/ip_conntrack_checksum
/proc/sys/net/ipv4/netfilter/ip_conntrack_buckets
/proc/sys/net/ipv4/netfilter/ip_conntrack_count
/proc/sys/net/ipv4/netfilter/ip_conntrack_max
/proc/net/ip_conntrack_expect
/proc/net/ip_conntrack
/proc/net/stat/ip_conntrack

3.

Comment visualiser les informations de la machine d'état de suivi de communication ?

Les états sont directement consultables à partir du fichier virtuel /proc/net/ip_conntrack. Par exemple :

# cat /proc/net/ip_conntrack
<snipped/>
udp      17 118 src=172.16.80.4 dst=172.16.80.1 sport=34100 dport=53 \
                packets=2 bytes=124 src=172.16.80.1 dst=172.16.80.4 sport=53 \
		dport=34100 packets=2 bytes=300 [ASSURED] mark=0 secmark=0 use=1

L'exemple ci-dessus donne l'état du suivi de communication d'une requête DNS entre un poste client avec l'adresse 172.16.80.4 et le port source 34100 et un serveur avec l'adresse 172.16.80.1.

La section 7.2 Les entrées de conntrack du Didacticiel sur Iptables décrit précisement les différents champs du suivi de communication.

Le programme iptstate affiche les entrées de la table de suivi de communication sur le même mode que la commande top.