Řešení 1:
Takže iptables si v podstatě pamatuje číslo portu, které bylo použito pro odchozí paket (co jiného si může pamatovat pro UDP paket?),
Jsem si docela jistý, že pro UDP jsou zdrojové a cílové porty a adresy uloženy.
Pokud chcete zkontrolovat stavové tabulky, nainstalujte conntrack a/nebo netstat-nat.
(Co by se stalo, kdybych se omylem pokusil spustit službu na tomto portu v daném časovém rámci – byl by tento pokus zamítnut/zablokován?)
Protože používáte OUTPUT a INPUT, mluvíte o místních službách. Port je již použit Nevěřím, že váš systém vám umožní spustit další službu, protože na tomto portu již něco naslouchá. Myslím, že byste mohli zastavit první službu a spustit další, pokud byste to opravdu chtěli, v takovém případě by odpověď pravděpodobně dostala vaši službu. Co služba s paketem dělá, závisí na tom, jaký je obsah paketu a o jakou službu se jedná.
Řešení 2:
Poznámka:Tato odpověď byla upravena.
Navzdory tomu, co říkají manuálové stránky, ESTABLISHED
Zdá se, že znamená „stavový“. Pro UDP to jednoduše znamená (jak navrhujete) zapamatovat si každý odchozí paket UDP (n-tice "src ip, src port dst ip, dst port") a rozpoznat jeho odpovědi.
FWIW, moje normální pravidla pro provoz DNS by byla asi tato:
# 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
tj. řídit provoz na OUTPUT
řetěz a pak nechte iptables
stavové moduly zvládnou vše ostatní na INPUT
řetěz.
Viz také tato související otázka.