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