Lösung 1:
Also erinnert sich iptables grundsätzlich an die Portnummer, die für das ausgehende Paket verwendet wurde (was könnte es sich sonst noch für ein UDP-Paket merken?),
Ich bin mir ziemlich sicher, dass für UDP die Quell- und Zielports und -adressen gespeichert sind.
Wenn Sie die Zustandstabellen einsehen möchten, installieren Sie conntrack und/oder netstat-nat.
(Was würde passieren, wenn ich versehentlich versuchen würde, einen Dienst auf diesem Port innerhalb des Zeitrahmens zu starten - würde dieser Versuch abgelehnt/blockiert werden?)
Da Sie OUTPUT und INPUT verwenden, sprechen Sie von lokalen Diensten. Der Port wird bereits verwendet. Ich glaube nicht, dass Ihr System Ihnen erlaubt, einen anderen Dienst zu starten, da bereits etwas auf diesem Port lauscht. Ich denke, Sie könnten den ersten Dienst stoppen und einen anderen starten, wenn Sie es wirklich wollten, in diesem Fall würde die Antwort wahrscheinlich zu Ihrem Dienst gelangen. Was der Dienst mit dem Paket macht, hängt davon ab, was der Inhalt des Pakets ist und um welchen Dienst es sich handelt.
Lösung 2:
NB:Diese Antwort wurde bearbeitet.
Ungeachtet dessen, was die Handbuchseiten sagen, ESTABLISHED
scheint "stateful" zu bedeuten. Für UDP bedeutet das einfach (wie Sie vorschlagen), sich jedes ausgehende UDP-Paket (das Tupel "src ip, src port dst ip, dst port") für eine Weile zu merken und seine Antworten zu erkennen.
FWIW, meine normalen Regeln für den DNS-Verkehr würden ungefähr so aussehen:
# 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
d.h. den Verkehr auf der OUTPUT
steuern Kette, und lassen Sie dann die iptables
Zustandsmodule erledigen alles andere auf INPUT
Kette.
Siehe auch diese verwandte Frage.