A. Configuration type du filtrage réseau

Après avoir donné plusieurs exemples de règles de filtrage pour les services de gestion d'équipements réseau présentés, voici un fichier /var/lib/iptables/active/ complet. Même si le filtrage réseau sort du cadre de ce document, cette configuration essaie de respecter au mieux la règle d'or : décrire le plus précisement possible le premier paquet d'une nouvelle communication et faire confiance au suivi d'état ensuite.

[Avertissement] Attention !

Le fichier ci-dessous est fourni à titre d'exemple sans aucune garantie de quelque nature que ce soit.

Pour activer l'ensemble des règles il faut saisir une commande du type : iptables-restore </var/lib/iptables/active.

# Configuration type du filtrage réseau 
# pour un serveur de gestion d'équipement réseau
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Définition des interfaces
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# . eth0 : interface «réseau public»
# . eth2 : interface «périmètre gestion»
# 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Tables de traduction d'adresses
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE 
COMMIT
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Tables de filtrage
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
#
# -> Chaîne INPUT
# . toutes les communications internes sont autorisées
-A INPUT -i lo -j ACCEPT 
# . suivi de communication
-A INPUT -p udp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m conntrack --ctstate ESTABLISHED -m tcp ! --syn -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate RELATED -m tcp --syn -j ACCEPT
-A INPUT -p icmp -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -p icmp --icmp-type destination-unreachable \
                 -m conntrack --ctstate RELATED -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -m conntrack --ctstate RELATED -j ACCEPT
# . administration du serveur avec SSH
-A INPUT -i eth0 -p tcp --syn --dport 22 -m conntrack --ctstate NEW -j ACCEPT 
# . services de gestion d'équipements réseau
#   . exemple d'un commutateur 2950 avec l'@ IP 192.168.2.2
-A INPUT -i eth2 -s 192.168.2.2 -p udp --dport 69 -m conntrack --ctstate NEW -j ACCEPT 
-A INPUT -i eth2 -s 192.168.2.2 -p udp --dport 514 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -i eth2 -s 192.168.2.2 -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -i eth2 -s 192.168.2.2 -p udp --dport 162 -m conntrack --ctstate NEW -j ACCEPT
# . poubelle propre
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
#
# -> Chaîne FORWARD
# . suivi de communication
-A FORWARD -p udp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -p tcp -m conntrack --ctstate ESTABLISHED -m tcp ! --syn -j ACCEPT
-A FORWARD -p tcp -m conntrack --ctstate RELATED -m tcp --syn -j ACCEPT
-A FORWARD -p icmp -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A FORWARD -p icmp --icmp-type destination-unreachable \
                   -m conntrack --ctstate RELATED -j ACCEPT
-A FORWARD -p icmp --icmp-type time-exceeded -m conntrack --ctstate RELATED -j ACCEPT
# . poubelle propre
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
-A FORWARD -p udp -j REJECT --reject-with icmp-port-unreachable
COMMIT

Il est possible de simplifier la syntaxe de filtrage des communications par équipement en groupant les services ouverts. En prenant l'exemple ci-dessous on perd en lisibilité puisque le compteur d'utilisation de la règle ne permet pas de distinguer le service utilisé dans la liste.

-A INPUT -i eth2 -s 192.168.2.2 -p udp -m multiport --dports 69,123,162,514 \
        -m conntrack --ctstate NEW -j ACCEPT

Dans le but de mieux respecter la règle d'or du filtrage, il est possible de tester les adresses MAC source des équipements gérés. De cette façon, on limite les possibilités de spoofing.