[quote=“flyght”] j’aimerais avoir plus d’info sur les règles :
NEW,ESTABLISHED,RELATED[/quote]
Ce ne sont pas des règles mais des états de paquets, gérés par le suivi de connexion (conntrack).
[quote=“flyght”]New : nouvelle connexion
Established : connexion en cours
Related : nouvelle connexion qui dépend d’une autre[/quote]
En gros, c’est bien ça. Il y a deux notions à ne pas mélanger : l’état d’une “connexion” (flux de paquets bidirectionnel et cohérent), et l’état d’un paquet individuel. NEW, ESTABLISHED, RELATED, INVALID… sont les états de paquets individuels. L’état des connexions connues peut être obtenu avec la commande conntrack ou dans le contenu de /proc/net/nf_conntrack.
Quand un paquet est susceptible de créer une nouvelle connexion (paquet TCP SYN, paquet UDP, requête ICMP echo…) qui n’existe pas dans la table de suivi, alors il est classé NEW. Si le paquet n’est pas bloqué pour une raison quelconque (bloqué par une règle de filtrage, réseau de destination injoignable…) alors la connexion correspondante est mémorisée.
Quand un paquet appartenant à cette même connexion est vu dans l’autre sens (“réponse”), alors il est classé ESTABLISHED et la connexion est confirmée. Tous les paquets suivants dans les deux sens appartenant à cette connexion sont aussi dans l’état ESTABLISHED.
L’état RELATED qualifie deux types de paquets.
- Les messages d’erreur ICMP liées à une connexion existante.
- Les paquets qui créent une nouvelle connexion (et devraient normalement avoir l’état NEW) lorsque celle-ci est liée à une autre connexion existante. Comme déjà évoqué, c’est le cas des connexions de données FTP qui ont été négociées dans la connexion de commande FTP d’origine. Ces connexions liées utilisent souvent des ports aléatoires, il serait donc très difficile de les gérer correctement avec des règles de filtrage simple basées sur les ports. Un module spécial du noyau effectuant le suivi du protocole concerné (nf_conntrack_ftp pour FTP) doit être actif pour faire cette relation, sinon par défaut les paquets auront l’état NEW.
Enfin, l’état INVALID caractérise les paquets qui devraient appartenir ou être liés à une connexion inexistante (ou oubliée).
L’intérêt des états de suivi de connexion pour le filtrage des paquets est évident : iptables gère des paquets individuels, mais ce qui nous intéresse généralement, ce sont plutôt les connexions globales. L’utilisation est simple : on crée des règles pour accepter ou bloquer les paquets NEW selon ses besoins, on accepte les paquets ESTABLISHED et RELATED (avec restrictions pour ces derniers si nécessaire) et on bloque les paquets INVALID. Un paquet ne peut être dans l’état ESTABLISHED ou RELATED si le paquet NEW (ou RELATED) correspondant n’a pas été accepté ; bloquer le paquet NEW (ou RELATED) suffit donc à bloquer toute la connexion.