Lorsque vous utilisez des règles de pare-feu iptables, pourquoi affirmer un nouvel état sur tous les ports autorisés?

23

Je vois souvent iptables configuré pour autoriser tous les paquets à des connexions ASSOCIÉES et les ports de service spécifiques à de NOUVELLES connexions.

Quelle est la raison de la mention NOUVEAU? Si une connexion n'est pas nouvelle, elle est liée, je suppose, donc la règle de port spécifique n'exécutera ni l'un ni l'autre. Alors pourquoi définir explicitement les ports de service avec NEW et pas seulement le protocole et le numéro de port?

dronus
la source

Réponses:

21

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 ACCEPTgrande 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.

HBruijn
la source
1
Une excellente réponse (+1 de ma part!) Sauf que vous dites "l' accès est autorisé sur une base de premier match ". Si la première correspondance se trouve être un DROP ou un REJET, cela ne permettra pas l'accès; s'il s'agit d'un LOG, vous devez continuer à trouver une correspondance ultérieure; et si des chaînes personnalisées s'impliquent, les choses peuvent devenir assez baroques. Je dirais plutôt que " le sort du paquet est déterminé sur une base de première correspondance ".
MadHatter prend en charge Monica le
5
Pouvez-vous réfléchir au cas où la related/establishedligne est présente mais les règles suivantes ne s'affirment pas NEW?
Daniel Widrick
13

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 iptablespage de manuel:

NOUVEAU - ce qui signifie que le paquet a démarré une nouvelle connexion, ou autrement associé à une connexion qui n'a pas vu de paquets dans les deux sens.

ESTABLISHED - ce qui signifie que le paquet est associé à une connexion qui a vu des paquets dans les deux sens.

RELATED - ce qui signifie que le paquet démarre une nouvelle connexion, mais qu'il est associé à une connexion existante, telle qu'un transfert de données FTP ou une erreur ICMP.

krisFR
la source
1
Quel mécanisme «associera» le port 20 au port 21? Une connexion IP ouverte peut-elle être transférée vers un autre port?
dronus
nf_conntrack_ftp.ko
mateusza
7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

L'ensemble de règles ci-dessus permet aux paquets d'accéder au port TCP 22 avec un état de INVALIDtraversACCEPT

Non valide : si aucun des états précédents ne s'applique, le paquet est dans l'état INVALIDE. Cela peut être dû à différents types de sondes réseau furtives, ou cela peut signifier que vous manquez d'entrées CONNTRACK (que vous devriez également voir indiqué dans vos journaux). Ou cela peut tout simplement être entièrement bénin.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


L'affirmation de STATE NEWgarantit que les paquets INVALID ne sont pas acceptés par erreur.

Et pour clarifier les significations:

  • NOUVEAU : Ceci est une nouvelle connexion
  • ESTABLISHED : Il s'agit d'un paquet impliqué dans une connexion actuelle
  • CONNEXES : Il s'agit d'une nouvelle connexion, mais a été prédite par une connexion existante
  • INVALIDE : aucune des conditions ci-dessus ne s'applique.
Daniel Widrick
la source