Solusi 1:
Jadi, iptables pada dasarnya mengingat nomor port yang digunakan untuk paket keluar (apa lagi yang bisa diingatnya untuk paket UDP?),
Saya cukup yakin untuk UDP port dan alamat sumber dan tujuan disimpan.
Jika Anda ingin memeriksa tabel status, instal conntrack dan/atau netstat-nat.
(Apa yang akan terjadi, jika saya secara tidak sengaja mencoba memulai layanan pada port tersebut dalam jangka waktu tersebut - apakah upaya tersebut akan ditolak/diblokir?)
Karena Anda menggunakan OUTPUT dan INPUT, Anda berbicara tentang layanan lokal. Port sudah digunakan Saya tidak percaya sistem Anda akan memungkinkan Anda untuk memulai layanan lain karena ada sesuatu yang sedang didengarkan di port itu. Saya kira Anda dapat menghentikan layanan pertama dan memulai yang lain jika Anda benar-benar menginginkannya, dalam hal ini responsnya mungkin akan sampai ke layanan Anda. Apa yang dilakukan layanan dengan paket tergantung pada apa isi paket itu, dan layanan apa itu.
Solusi 2:
NB:Jawaban ini telah diedit.
Terlepas dari apa yang dikatakan halaman manual, ESTABLISHED
tampaknya berarti "negara". Untuk UDP itu berarti (seperti yang Anda sarankan) mengingat setiap paket UDP keluar (tuple "src ip, src port dst ip, dst port") untuk sementara dan mengenali responsnya.
FWIW, aturan normal saya untuk lalu lintas DNS akan menjadi seperti ini:
# 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
yaitu mengontrol lalu lintas pada OUTPUT
rantai, lalu biarkan iptables
modul negara menangani semua yang lain di INPUT
rantai.
Lihat juga pertanyaan terkait ini.