Je commence juste avec iptables et suis tombé sur quelque chose que je ne comprends pas vraiment.
Pour info, j'ai suivi les instructions de IptablesHowTo du wiki d'Ubuntu .
Les tables nat et mangle sont vides, je travaille uniquement avec la table de filtre pour le moment.
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 accès à ma machine via ssh, cependant toutes les commandes iptables prennent environ une minute ou deux pour s'exécuter. Ce n'est pas un problème DNS, -n
ne le change pas.
La solution
Si je vide la table et ajoute ces trois règles à la place, 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 si grand 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?
sudo
recherches DNS sont-elles effectuées et si celles-ci sont bloquées, la commande sera lente. Toutes vos autresiptables
commandes sont-elles préfixéessudo
?sudo strace …
(à partir d'un shell racine) pour voir sur quoi il bloque.Réponses:
Il effectue une recherche DNS et comme la réponse est bloquée, il faut un certain temps pour expirer.
Essayez de faire iptables -n ... pour empêcher la recherche DNS.
Le conntrack permet de recevoir des connexions sur le port éphémère qui a été créé pour les réponses aux requêtes lancées par votre machine (dans ce cas la requête DNS). Sans autoriser les connexions ESTABLISHED ou RELATED, même les réponses à vos demandes sont bloquées.
EG: Si vous tentez d'accéder à un site Web, même si vous pouviez envoyer la demande pour le site Web, la réponse du site Web serait bloquée.
la source
Avec
votre machine supprimera chaque paquet entrant, sauf s'il provient du port SSH. C'est une bonne idée si vous souhaitez que cette machine communique uniquement via SSH. Sinon, vous devez ajouter
cela vous assurera que vous allez vous connecter à un serveur Web plutôt que de vous connecter à quelqu'un.
la source
-m conntrack
vous, vous pouvez avoir une autre "chance" que les paquets soient acceptés avant qu'ils ne soient abandonnés à coup sûr. Sur la machine cliente, vous devez en avoiriptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
si vous voulez voir une réponse. Côté serveur, autorisez simplement la connexion entrante SSH et supprimez tout le reste (si le serveur agit uniquement comme SSH). J'espère que tout est clair.