Pourquoi le trafic de bouclage doit-il être autorisé à l'aide d'iptables pour get un access Web?

Je pensais que ce qui suit était nécessaire pour le HTTP sortant sur un bureau (non-server):

iptables -A INPUT -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT 

Mais, il s'avère que j'ai besoin de ces deux pour le faire fonctionner. Je ne sais pas pourquoi:

 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT 

Je sais que la dernière règle autorise UDP à l'interface lo .

Mais, je pensais que tout ce dont j'avais besoin était outgoing TCP for NEW/ESTABLISHED connections + incoming TCP for ESTABLISHED connections . Cela me semblait contre-intuitif (parce que j'apprends toujours).

Vous n'avez évidemment pas besoin d'un access Internet. Mais peut-être que vous avez un server DNS local (redirecteur) en cours d'exécution. DNS utilise UDP, et l'access web nécessite DNS en plus de HTTP.

Vos règles n'autorisent pas les réponses ICMP (liées) BTW. Cela entraînera probablement des problèmes (sauf si vous utilisez des valeurs abaissées pour MSS / MTU). Mais vous n'autorisez même pas l'ICMP sortant pour que la découverte du path MTU ne fonctionne même pas.

Je ne peux que formuler des hypothèses, car vous n'avez pas répertorié vos stratégies par défaut. Trouvé en haut de la sortie d' iptables -S . Je suppose que vous êtes ressortingctif et vous avez quelque chose comme ça.

 -P INPUT DROP -P FORWARD DROP -P OUTPUT DROP 

Génial! Votre machine est maintenant complètement invisible, les yeux bandés, liée et bâillonnée par rapport aux packages IP. C'est aussi bon que de le détwigr de votre réseau Ethernet.

Donc, si vous voulez avoir de l'espoir dans ce monde cruel et sombre, vous devrez mettre en place des règles pour accepter certains packages, peut-être rencontrer quelqu'un avec un couteau pour couper vos cordes, mais quels packages sont les bons?

Une règle de sortie est nécessaire pour permettre aux packages d'atteindre les ports utilisés par les servers pour le trafic http / https

 -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT 

Une règle INPUT est nécessaire pour autoriser les packages dans votre browser à partir des ports utilisés pour le trafic http / https.

 -A INPUT -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT 

Vous pouvez maintenant ÉTABLIR de NOUVELLES connections http / https à partir de votre browser Web et recevoir des informations qui reviennent par ces connections ÉTABLIES.

Quel est le problème alors? Il n'y a aucun moyen d'get des informations DNS, vous devriez être en mesure d'entrer l'adresse IP des sites Web que vous souhaitez visiter dans votre browser Web, mais ce n'est pas exactement ce que nous voulons. Le trafic DNS est géré sur le port 53 avec le protocole UDP.

 -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT 

Et pour recevoir ces réponses pratiques, nous aurons besoin de couper quelques trous dans ce bandeau.

 -A INPUT -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT 

Maintenant il y a de la lumière, vous pouvez l'entendre, dire si vous faites une requête DNS à l'un des servers de Google

 dig @8.8.8.8 slashdot.org 

Une telle réponse! Mais peut-être que votre browser ne peut toujours pas comprendre où slashdot est vraiment dans le monde. Au less une dissortingbution (Ubuntu) est configurée pour utiliser un proxy DNS interne, vous devrez donc pouvoir vous parler (le rest du monde est ennuyeux quand même) en configurant des règles pour vous permettre de communiquer en tant que server port 53

 -A OUTPUT -o lo -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT -A INPUT -i lo -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT 

Notez la différence subtile entre ces règles, "Je suis mon propre server" et la précédente, "Je veux juste voir les règles du monde". Aussi -o lo et -i lo indiquent que ce server ne servira que cette machine, une bonne mesure pour éviter d'être aspiré dans une attaque de type rebond DNS compliquée.

Vous devriez maintenant voir que votre browser fonctionne à nouveau.

Cela dépendra du fait que les strings INPUT et / ou OUTPUT sont configurées pour ACCEPT packages non appariés. S'ils le sont, vous n'avez pas besoin de règles du tout. Si vous ne l'avez pas changé c'est probablement la valeur par défaut.

Ces 2 dernières règles autorisent tout trafic depuis ou vers l'interface lo (ie 127.0.0.1 / :: 1), pas seulement UDP. À less que vous ne vous connectiez à un server Web sur le bureau local, ils n'ont aucune pertinence pour HTTP.