IPTABLES est lent après avoir ajouté '-A INPUT -j DROP' à la list des règles

Je commence juste avec iptables et suis tombé sur quelque chose que je ne comprends pas vraiment.

Pour votre information, j'ai suivi les instructions de IptablesHowTo du wiki d'Ubuntu .

Les tables nat et mangle sont vides, je ne travaille qu'avec la table de filter.

Le problème

Si j'ajoute les règles iptables suivantes:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -j DROP 

… alors j'ai toujours access à ma machine via ssh, mais toutes les commands iptables prennent environ une minute ou deux pour être exécutées. Ce n'est pas un problème de DNS, -n ne le change pas.

La solution

Si je chasse la table et ajoute ces trois règles, tout fonctionne bien:

 sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -j DROP 

Quelqu'un peut-il m'expliquer pourquoi la première règle a un tel impact sur iptables? Je comprends qu'il permet aux sessions établies de recevoir du trafic, mais pourquoi en ai-je besoin si ssh est ouvert?

Il effectue une search DNS et comme la réponse est bloquée, il faut du time pour expirer.

Essayez de faire iptables -n … pour empêcher la search DNS.

Le conntrack permet de recevoir des connections sur le port éphémère créé pour les réponses aux requêtes lancées par votre machine (dans ce cas, la requête DNS). Sans autoriser les connections ÉTABLIES ou CONNEXES, même les réponses à vos requests sont bloquées.

EG: Si vous tentez d'accéder à un site Web, même si vous pouviez envoyer la request pour le site Web, la réponse du site Web serait bloquée.

Avec

 iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -j DROP 

votre machine supprimera chaque package entrant à less qu'il ne provienne du port SSH. C'est une bonne idée si vous voulez que cette machine communique uniquement via SSH. Sinon, vous devez append

 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

cela vous assurera que vous allez vous connecter à un server Web plutôt que de vous connecter à quelqu'un.