examinons ces deux règles IPTABLES qui sont souvent utilisées pour permettre à DNS sortant:
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT
Ma question est la suivante: comment devrais-je comprendre exactement l'état établi dans UDP? UDP est apatride.
Voici mon intuition - j'aimerais savoir si ou où cela est incorrect :
La page de l'homme me dit ceci:
état
[.____] Ce module, lorsqu'il est combiné avec le suivi de la connexion, permet d'accéder à l'état de suivi Pour ce paquet. [.____]
Ainsi, IPTABLES se souvient essentiellement du numéro de port utilisé pour le paquet sortant (quoi d'autre pourrait-il rappeler pour un paquet UDP?) , puis permet la Premier paquet entrant renvoyé dans un court délai? Un attaquant devrait deviner le numéro de port (serait-ce vraiment trop difficile?)
À propos d'éviter les conflits:
Le noyau conserve une trace de laquelle les ports sont bloqués (soit par d'autres services, soit par des paquets UDP sortants précédents), de sorte que ces ports ne soient pas utilisés pour de nouveaux paquets DNS sortants dans le délai? (Que se passerait-il, si j'essayais accidentellement de démarrer un service sur ce port dans le délai - cette tentative serait refusée/bloquée?)
Veuillez trouver toutes les erreurs dans le texte ci-dessus :-) Merci,
Chris
Ainsi, les IPTABLES se souvient essentiellement du numéro de port utilisé pour le paquet sortant (quoi d'autre pourrait-il rappeler pour un paquet UDP?),
Je suis à peu près sûr que UDP Les ports et adresses de source et de destination sont stockés.
Si vous souhaitez inspecter les tables d'état, installez Conntrack et/ou NetStat-NAT.
(Que se passerait-il, si j'essayais accidentellement de démarrer un service sur ce port dans le délai - cette tentative serait-elle refusée/bloquée?)
Depuis que vous utilisez la sortie et l'entrée, vous parlez de services locaux. Le port est déjà utilisé, je ne crois pas que votre système vous permettra de démarrer un autre service depuis que quelque chose n'écoute déjà sur ce port. Je suppose que vous pouvez arrêter le premier service et commencer un autre si vous le souhaitez vraiment, dans ce cas, la réponse sera probablement à votre service. Ce que le service fait avec le paquet dépend de ce que le contenu du paquet est et quel service il s'agit.
NB: Cette réponse a été modifiée.
Malgré ce que disent les pages de l'homme, ESTABLISHED
semble signifier "sotculeuse". Pour UDP, cela signifie simplement (comme vous le suggérez) en vous souvenant de chaque paquet UDP sortant (la "IP SRC, IP de Port SRC, Port DST" TUPLE) pendant un moment et reconnaissant ses réponses.
FWIW, mes règles normales pour le trafic DNS seraient quelque chose comme ceci:
# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT
# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
c'est-à-dire le trafic de contrôle sur la chaîne OUTPUT
, puis laissez les modules d'état iptables
gérer tout le reste de la chaîne INPUT
.
Voir aussi cette question connexe .
Les développeurs d'IPTABLES ont estimé qu'un État "établi" était la situation lorsque des paquets ont été observés dans les deux sens quel que soit le protocole entre deux clients.
l'extension d'état fait partie de Conntrack. Le noyau comprend l'état de la table
/proc/net/nf_conntrack
Exemple d'états iptables pour UDP dans le tableau NF_Conntrack du point de vue de l'expéditeur. Imaginons que vous envoyez une requête DNS sur UDP
udp 17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
[UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
dport=35237 use=1
Un paquet a été envoyé. Il est réfléchi et oh, la table a les données pour ce qui est attendu en retour (le paquet de la réponse DNS).
udp 17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
src=192.168.1.10 dst=192.168.1.2 sport=53 \
dport=35237 use=1
La réponse est arrivée, le drapeau non rempli est parti, cela signifie que cette connexion UDP est en état d'établissement pour une petite quantité de temps définie dans votre système.