Ah oui, j’oubliais les règles iptables. On voit bien le côté parano dont tu parlais dans ton jeu de règles : il traite séparément les paquets ESTABLISHED et RELATED de chaque type de connexion alors que d’habitude on se contente de les accepter tous ensemble avec une règle globale dans chaque chaîne, et on n’a plus qu’à traiter les paquets NEW pour chaque type de connexion (après tout, si on bloque le paquet NEW d’une nouvelle connexion, il n’y aura jamais de paquet ESTABLISHED ou RELATED pour cette connexion).
Essentiellement, il y a deux modifications à apporter :
- changer les politiques par défaut des chaînes de la table filter à DROP (et attention de ne pas se louper à partir de ce moment, car on risque de s’enfermer dehors) ;
- intervertir INPUT et OUTPUT.
Il manque aussi une règle pour le trafic sur l’interface de loopback lo, qu’il faut accepter dans INPUT et OUTPUT, comme n’importe quelle interface en dépit de son fonctionnement particulier.
Aussi, à moins que tu envisage de faire du filtrage encore plus restrictif sur une autre interface (ex : VPN), il n’est pas nécessaire de spécifier l’interface eth0 dans toutes les règles.
Voici ce que cela pourrait donner (je ne mets pas les [mono]iptables[/mono] en début de ligne) :
[code]# politiques par défaut
-P INPUT DROP
-P OUTPUT DROP
trafic local
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
connexion SSH entrante
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
connexion de commande FTP entrante
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
connexion de données FTP passive entrante
-A INPUT -i eth0 -p tcp -m tcp --dport 49152:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 49152:65535 -m state --state ESTABLISHED -j ACCEPT
connexion de données FTP active sortante
-A OUTPUT -o eth0 -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
connexion HTTP entrante
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT[/code]
Si le serveur doit faire des connexions sortantes par exemple pour télécharger ses mises à jour (DNS, HTTP(S), FTP…), il faudra ajouter les règles correspondantes. Exemple :
[code]#requête DNS sortante en UDP et TCP
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
connexion HTTP(S) sortante
-A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INTPUT -i eth0 -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED -j ACCEPT[/code]
On peut être plus restrictif en n’acceptant les connexions sortantes que vers des adresses particulières.