3. Les outils de filtrage
réseau
Sur un système 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
(charge|décharge) 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
principaux de manipulation des fonctions de filtrage réseau
?
Rechercher dans le cache du gestionnaire de paquets de la
distribution des mots clés tels que iptables ou firewall à
l'aide des commandes apt-cache ou aptitude.
Dans le cadre des travaux pratiques, seuls les outils
élémentaires sont utilisés pour faciliter la compréhension des
mécanismes de suivi de communication du système de filtrage réseau.
On ne s'intéresse donc pas aux paquets qui fournissent des
solutions de filtrage «clé en main».
|
|
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.
Une recherche simple dans le catalogue des paquets donne le
résultat suivant.
$ aptitude search iptables
p arno-iptables-firewall - single- and multi-homed firewall script with DSL/ADSL support
i iptables - Outils d'administration pour le filtrage de paquets et le NAT
p iptables-dev - iptables development files
p iptables-persistent - Simple package to set up iptables on boot
p libiptables-chainmgr-perl - Perl extension for manipulating iptables policies
p libiptables-parse-perl - Perl extension for parsing iptables firewall rulesets
Une recherche plus précise dans les descriptions de paquets
donne une liste plus étoffée.
# aptitude search '~diptables' | grep ipt
p apf-firewall - easy iptables based firewall system
p arno-iptables-firewall - single- and multi-homed firewall script wi
p firehol - An easy to use but powerful iptables state
p fwsnort - Snort-to-iptables rule translator
p ipkungfu - iptables-based Linux firewall
i iptables - Outils d'administration pour le filtrage d
p iptables-dev - iptables development files
p iptables-persistent - Simple package to set up iptables on boot
i iptstate - Top-like state for netfilter/iptables
p libiptables-chainmgr-perl - Perl extension for manipulating iptables p
p libiptables-parse-perl - Perl extension for parsing iptables firewa
p mxallowd - Anti-Spam-Daemon using nolisting/iptables
p netscript-2.4 - Linux 2.4.x (and 2.6.x) router/firewall ne
p uif - Advanced iptables-firewall script
p uruk - Very small firewall script, for configurin
i xtables-addons-common - Extensions targets and matches for iptable
p xtables-addons-source - Extensions targets and matches for iptable
Comme 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.
# aptitude 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 ? Quelle option faut-il préciser pour spécifier la
table consultée : netfilter ou
nat.
Consulter les pages de manuels via # man
iptables.
|
|
La consultation des pages de manuels permet de relever le jeu
d'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'adresses doit être appelé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
?
Utiliser la commande qui sert à lister les modules chargés en
mémoire avant et après avoir consulté les tables de filtrage réseau
pour la première fois.
|
|
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.
-
Après consultation de la table netfilter :
# lsmod |less
Module Size Used by
iptable_filter 2258 0
ip_tables 13899 1 iptable_filter
x_tables 12845 1 ip_tables
<snipped/>
-
Après consultation de la table nat :
# lsmod |less
iptable_nat 4299 0
nf_nat 13388 1 iptable_nat
nf_conntrack_ipv4 9833 3 iptable_nat,nf_nat
nf_conntrack 46535 3 iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4 1139 1 nf_conntrack_ipv4
iptable_filter 2258 0
ip_tables 13899 2 iptable_nat,iptable_filter
x_tables 12845 2 iptable_nat,ip_tables
<snipped/>
|
|
4.
|
Quels sont les outils de sauvegarde et de restauration des
jeux de règles de filtrage réseau fournis avec le paquet
iptables ?
Consulter la liste des fichiers du 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 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
?
Après avoir utilisé la commande «historique» d'identification de
la version du noyau, faire une recherche dans l'arborescence des
modules de ce noyau avec la commande find. Trouver les fichiers dont
le nom comprend la chaîne netfilter.
|
|
On utilise la commande uname que l'on associe à une
recherche dans l'arborescence des modules du noyau en cours
d'exécution.
$ uname -r
2.6.32-5-amd64
$ find /lib/modules/`uname -r` -type d -name netfilter
/lib/modules/2.6.32-5-amd64/kernel/net/bridge/netfilter
/lib/modules/2.6.32-5-amd64/kernel/net/ipv4/netfilter
/lib/modules/2.6.32-5-amd64/kernel/net/decnet/netfilter
/lib/modules/2.6.32-5-amd64/kernel/net/ipv6/netfilter
/lib/modules/2.6.32-5-amd64/kernel/net/netfilter
|

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

|
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.
|
|

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

|
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. Même si l'arborescence /proc n'est pas un véritable système de fichiers,
il est possible d'effectuer des recherches toujours à l'aide de la
commande find.
|
|
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/net/ -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/net/ -name "*conntrack*"
/proc/net/ip_conntrack_expect
/proc/net/ip_conntrack
/proc/net/nf_conntrack
/proc/net/nf_conntrack_expect
/proc/net/stat/ip_conntrack
/proc/net/stat/nf_conntrack
|
|
3.
|
Comment visualiser les informations de la machine d'état
de suivi de communication ?
Rechercher les entrées de l'arborescence /proc dont le nom comprend la chaîne
conntrack.
La section «7.2 Les entrées de
conntrack» du Tutoriel iptables décrit
précisément 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.
|
|
Les états sont directement consultables à partir du fichier
virtuel /proc/net/ip_conntrack. Par
exemple :
# cat /proc/net/ip_conntrack
<snipped/>
udp 17 27 src=192.0.2.3 dst=192.0.2.1 sport=54932 dport=53 \
packets=1 bytes=59 src=192.0.2.1 dst=192.0.2.3 sport=53 dport=54932 \
packets=1 bytes=259 mark=0 secmark=0 use=2
L'exemple ci-dessus donne l'état du suivi de communication d'une
requête DNS entre un poste
client avec l'adresse 192.0.2.3 et
le port source 54932 et un serveur
avec l'adresse 192.0.2.1.
|