web-dev-qa-db-fra.com

iptables: différence entre les paquets NOUVEAUX, ÉTABLISSÉS et ASSOCIÉS

Partie d'un pare-feu sur un serveur:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Lorsque je recherche en ligne, je vois toujours NEW utilisé dans cette règle, mais j'ai du mal à comprendre pourquoi ESTABLISHED et RELATED ne sont pas utilisés.

Comme ça :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Quelqu'un peut-il m'expliquer quand exactement un NOUVEAU paquet se transforme en ÉTABLI et ASSOCIÉ?

47
Kris

Considérez un NOUVEAU paquet comme un appel téléphonique avant que le récepteur ne décroche. Un paquet ÉTABLI est leur "Bonjour". Et un paquet CONNEXE serait si vous appeliez pour leur parler d'un e-mail que vous étiez sur le point de leur envoyer. (L'e-mail étant ASSOCIÉ.)

Au cas où mon analogie ne serait pas si bonne, je pense personnellement que les pages de manuel la gèrent bien:

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

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.

iptables (8) - page de manuel Linux

48
Aaron Copley

Résumant pour le serveur et le client un INPUT restrictif et ouvert OUTPUT, c'est-à-dire:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Et de iptables-extensions (8) sur l'exemple de FTP en mode actif:

1. NOUVEAU

NOUVEAU Le paquet a démarré une nouvelle connexion ou autrement associé à une connexion qui n'a pas vu de paquets dans les deux sens.

Le client sur le port 50000 (Tout port aléatoire non privilégié) se connecte au serveur FTP sur le port 21, Le serveur en aura besoin au moins pour accepter cette connexion entrante:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. ÉTABLI

ESTABLISHED Le paquet est associé à une connexion qui a vu des paquets dans les deux sens.

Maintenant, côté client, il a ouvert une connexion sortante au serveur sur le port 21 En utilisant un port local 50000 Et il a besoin des iptables suivants pour permettre à la réponse d'arriver de server (21) à client (50000):

Sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. CONNEXES

CONNEXES Le paquet démarre une nouvelle connexion, mais est associé à une connexion existante, telle qu'un transfert de données FTP ou une erreur ICMP.

Maintenant, une fois la connexion FTP établie et une connexion de données sur le point d'être effectuée, le client ouvrira un socket de serveur (oui, avec le client FTP actif devient un serveur pour la connexion de données) sur le port 60000 (À mon le client de compréhension marquera ce port 60000 comme RELATED à l'autre connexion de 50000->21) et enverra ce numéro de port au serveur en utilisant la commande FTP PORT. Ensuite, le serveur FTP ouvrira une nouvelle connexion depuis son port 20 Vers le port 60000 Sur le client, et bien, le client a maintenant besoin des éléments suivants pour permettre à cette nouvelle connexion de réussir:

Sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Enfin, pour que cela fonctionne, vous devez activer le module du noyau ip_conntrack_ftp Pour permettre au système de marquer les connexions/packages comme RELATED (c'est ce que je comprends, je n'y ai pas trop creusé) :

modprobe ip_conntrack_ftp
14
Jaime Hablutzel