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