Solution 1 :
Ainsi, iptables se souvient essentiellement du numéro de port qui a été utilisé pour le paquet sortant (de quoi d'autre pourrait-il se souvenir pour un paquet UDP ?),
Je suis à peu près sûr que pour UDP, les ports et adresses 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 imparti - cette tentative serait-elle refusée/bloquée ?)
Puisque vous utilisez OUTPUT et INPUT, vous parlez de services locaux. Le port est déjà utilisé Je ne pense pas que votre système vous permettra de démarrer un autre service puisque quelque chose écoute déjà sur ce port. Je suppose que vous pourriez arrêter le premier service et en démarrer un autre si vous le vouliez vraiment, dans ce cas, la réponse arriverait probablement à votre service. Ce que le service fait avec le paquet dépend de son contenu et de quel service il s'agit.
Solution 2 :
NB :Cette réponse a été modifiée.
Malgré ce que disent les pages de manuel, ESTABLISHED
semble signifier "avec état". Pour UDP, cela signifie simplement (comme vous le suggérez) se souvenir de chaque paquet UDP sortant (le tuple "src ip, src port dst ip, dst port") pendant un certain temps et reconnaître ses réponses.
FWIW, mes règles normales pour le trafic DNS ressembleraient à 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 contrôler le trafic sur le OUTPUT
chaîne, puis laissez le iptables
les modules d'état gèrent tout le reste sur le INPUT
chaîne.
Voir aussi cette question connexe.