Les règles d'un pare-feu netfilter (iptables) sont vérifiées séquentiellement et le sort du paquet (ACCEPT, DROP, REJECT etc.) est déterminé sur la base de la première correspondance.
En rendant le pare-feu complet et la première règle, la -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
grande majorité typique du trafic légitime vers votre serveur est acceptée après avoir passé cette seule règle. Ce trafic n'a pas besoin de traverser d'autres règles.
Selon la taille de votre base de règles, cela peut signifier une différence significative dans les performances de votre pare-feu.
Le seul trafic que le pare-feu doit désormais valider sont les nouvelles connexions explicites.
C'est-à-dire comparer un pare-feu pour un serveur Web public avec un accès pour une poignée de webmasters à partir de leurs postes de travail:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Environ 99% des paquets légitimes appartiendront à des connexions établies, atteignant uniquement la première règle. Parmi les paquets ne correspondant pas à cette règle, la majorité devrait être de nouvelles connexions à votre site Web, le module multiport peut accorder l'accès à HTTP ou HTTPS dans une seule règle. Les webmasters se connectent à partir d'un certain nombre de postes de travail avec des adresses fixes en utilisant ssh et sftp et tout le reste est rejeté.
Un pare-feu où les règles sont ordonnées logiquement par le port TCP:
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Ici , chaque paquet de votre serveur Web HTTP devrait être comparé à 5 règles avant que l'accès ne soit accordé. Et avec plus de services exécutés sur un serveur qui peuvent facilement devenir 50 règles ou bien plus lorsque vous utiliseriez par exemple fail2ban ou des produits similaires.
related/established
ligne est présente mais les règles suivantes ne s'affirment pasNEW
?NEW
signifie que le paquet a commencé une nouvelle connexion.Il est géré par des modules du noyau appelés
ip_conntrack_*
qui rendent votre pare-feu dynamique . Les pare-feu avec état peuvent surveiller les flux de trafic.Si vous spécifiez simplement le protocole et le numéro de port, votre pare-feu n'est pas avec état mais sans état. Signifie qu'il restreint ou bloque simplement les paquets. Ces types de pare-feu ne connaissent pas les flux de données.
Un bon exemple est FTP: le FTP actif utilise le port 21 pour le canal de contrôle mais utilise ensuite le port 20 pour le canal de données. Dans le cas d'un pare-feu avec état, vous n'avez pas besoin d'ouvrir explicitement le port 20 car il est lié à une nouvelle connexion établie précédemment sur le port 21.
Voici un extrait de la
iptables
page de manuel:la source
L'ensemble de règles ci-dessus permet aux paquets d'accéder au port TCP 22 avec un état de
INVALID
traversACCEPT
/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables
L'affirmation de STATE
NEW
garantit que les paquets INVALID ne sont pas acceptés par erreur.Et pour clarifier les significations:
la source