J'ai souvent vu la règle -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
appliquée. Bien que je ne sois pas un expert, cette ligne particulière me concerne. Il est assez évident que la règle autorise tout le trafic à la seule exception que la connexion doit avoir été établie ou liée à une connexion établie.
Scénario
- Je vais autoriser les connexions au port SSH par défaut à
22
partir du LAN des serveurs dans le sous-réseau192.168.0.0/16
ou autre. SuperInsecureApp®
expose quelque chose sur le port1337
, que j'ajoute à maINPUT
chaîne.- J'ai ajouté la
conntrack
règle d'accepterESTABLISHED
etRELATED
de toutes les sources - La politique de la chaîne est
DROP
Donc, fondamentalement, cette configuration devrait autoriser les connexions SSH à partir du LAN uniquement, tout en autorisant le trafic entrant sur le port 1337 en provenance du monde.
C'est là que ma confusion fleurit. Est-ce que conntrack
cela exposerait d'une manière ou d'une autre une faille de sécurité qui permettrait d'obtenir une connexion établie sur 1337 (car il est ouvert au monde), puis d'utiliser cette connexion pour accéder au port SSH (ou à tout autre port d'ailleurs)?
conntrack
règle se trouve au début ou à la fin de la chaîne? D'après ce que je comprendsiptables
, il devrait traiter toutes les règles sur les connexions établies si c'était à la fin, et seulement cette règle unique si elle était placée au début?ESTABLISHED et RELATED sont des caractéristiques du filtrage de paquets "avec état", où le filtrage ne dépend pas seulement d'un ensemble de règles statiques mais aussi du contexte, dans lequel les paquets sont considérés. Vous avez besoin d'ETABLISHED pour permettre aux connexions de fonctionner et vous avez besoin de RELATED pour les messages ICMP pertinents. Le filtrage avec état permet de filtrer plus précisément par rapport aux règles statiques "sans état".
Regardons d'abord ETABLISHED. Par exemple, considérez TCP sur le port 22. L'initiateur (client) envoie un
SYN
àserverIPaddr:22
. Le serveur revientSYN+ACK
au client. C'est maintenant au tour du client d'envoyer unACK
. A quoi devrait ressembler la règle de filtrage sur le serveur, de sorte que seule la "correspondance"ACK
soit acceptée? Une règle générale apatride ressemblerait àce qui est plus libéral que la règle de l’état qui l’accorde La règle sans état autorise des segments TCP arbitraires, par exemple
ACK
ouFIN
sans avoir préalablement établi une connexion. Les scanners de ports peuvent exploiter ce type de comportement pour les empreintes digitales du système d'exploitation.Voyons maintenant RELATED. Ceci est utilisé pour les messages ICMP, principalement les messages d'erreur. Par exemple, si un paquet du serveur vers le client est abandonné, un message d'erreur est envoyé au serveur. Ce message d'erreur est "lié" à la connexion précédemment établie. Sans la règle RELATED, il faudrait soit autoriser les messages d'erreur entrants en général (sans contexte), soit, comme c'est la coutume pour de nombreux sites, supprimer complètement ICMP et attendre les délais d'attente sur la couche de transport. (Notez que c'est une mauvaise idée pour IPv6; ICMPv6 joue un rôle plus important pour IPv6 que ICMP pour l'héritage IP.)
la source