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É?
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.
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