Mise en place

Fixer les politiques par défaut

Comme nous l'avons dit, nous allons dans un premier temps refuser et donc supprimer tous les paquets ne correspondant pas aux critères que nous allons définir, et passant par les chaînes INPUT, OUTPUT et FORWARD.

# on fixe les politiques par défaut
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP

Gestion du trafic considére comme « sûr »

# on considere que la machine elle même est sûre
# et que les processus locaux peuvent communiquer entre eux
# via l'interface locale
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT

# on considère que notre réseau local est
# également sûr (ce qui n'est pas forcément vrai).
#iptables -A INPUT -i vmnet0 -j ACCEPT
#iptables -A OUTPUT -o vmnet0 -j ACCEPT

Gestion du trafic réseau local/extérieur

# les connexions qui sortent du réseau local
# vers le net sont acceptées
#iptables -A FORWARD -i vmnet0 -o eth0 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

# seules les connexions déjà établies ou en relation avec
# des connexions établies sont acceptées venant du net vers le LAN
#iptables -A FORWARD -i eth0 -o vmnet0 -m state \
--state ESTABLISHED,RELATED -j ACCEPT

Gestion du trafic DNS

# autorisation des requêtes DNS de la passerelle, pour
# que dnsmasq puisse envoyer des requêtes à l'extérieur
# (on attend la réponse sur un port supérieur ou égal à 1024)
#iptables -A OUTPUT -o eth0 -p udp --sport 1024: --dport 53 \
-m state --state ! INVALID -j ACCEPT
#iptables -A INPUT -i eth0 -p udp --sport 53 --dport 1024: \
-m state --state RELATED,ESTABLISHED -j ACCEPT

Accès SSH depuis l'extérieur

# accès SSH depuis le net sur la passerelle
#iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport ssh -o eth0 -j ACCEPT

Petite amélioration

En cas d'erreur ICMP, l'en-tête du paquet qui a généré l'erreur est reproduite dans le message. Le suivi de connexion ICMP s'en sert pour déclarer ce paquet « RELATED ». En ce qui concerne les machines du réseau local, on laisse passer tous les paquets « RELATED », donc pas de problème. On ajoute cette ligne pour que la passerelle ne réponde pas au ping, ainsi qu'aux autres requêtes ICMP mais qu'elle laisse passer les erreurs ICMP.

#iptables -A INPUT -p icmp  -m state --state RELATED -j ACCEPT

Gestion du log de filtrage

Nous allons ajouter dans /etc/syslog.conf la ligne suivante, qui permettra de placer les logs dans un fichier séparé, à savoir /var/log/iptables, au lieu de /var/log/messages.

kern.=debug    /var/log/iptables

Nous allons ensuite forcer le démon syslog à recharger sa configuration :

$sudo /etc/init.d/sysklogd reload
# on loggue tout les paques n'ayant pas été acceptés
#iptables -A INPUT -j LOG --log-prefix "[INPUT]"
--log-level debug
#iptables -A OUTPUT -j LOG --log-prefix "[OUTPUT]"
--log-level debug
#iptables -A FORWARD -j LOG --log-prefix "[FORWARD]"
--log-level debug