Solución 1:
Entonces, iptables básicamente recuerda el número de puerto que se usó para el paquete saliente (¿qué más podría recordar para un paquete UDP?),
Estoy bastante seguro de que para UDP se almacenan los puertos y direcciones de origen y destino.
Si desea inspeccionar las tablas de estado, instale conntrack y/o netstat-nat.
(¿Qué sucedería si accidentalmente intentara iniciar un servicio en ese puerto dentro del período de tiempo? ¿Se denegaría/bloquearía ese intento?)
Dado que está utilizando OUTPUT y INPUT, está hablando de servicios locales. El puerto ya está en uso. No creo que su sistema le permita iniciar otro servicio ya que algo ya está escuchando en ese puerto. Sin embargo, supongo que podría detener el primer servicio y comenzar otro si realmente quisiera; en ese caso, la respuesta probablemente llegaría a su servicio. Lo que hace el servicio con el paquete depende del contenido del paquete y de qué servicio es.
Solución 2:
NB:esta respuesta ha sido editada.
A pesar de lo que dicen las páginas man, ESTABLISHED
parece significar "con estado". Para UDP, eso simplemente significa (como usted sugiere) recordar cada paquete UDP saliente (la tupla "src ip, src port dst ip, dst port") durante un tiempo y reconocer sus respuestas.
FWIW, mis reglas normales para el tráfico de DNS serían algo como esto:
# 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
es decir, controlar el tráfico en el OUTPUT
cadena, y luego deja que el iptables
los módulos de estado manejan todo lo demás en el INPUT
cadena.
Consulte también esta pregunta relacionada.