Veamos estas dos reglas de iptables que a menudo se utilizan para permitir DNS saliente:
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT
Mi pregunta es: ¿cómo debo entender exactamente el estado ESTABLECIDO en UDP? UDP no tiene estado.
Aquí está mi intuición: me gustaría saber si esto es incorrecto o no:
La página del manual me dice esto:
estado
Este módulo, cuando se combina con el seguimiento de conexión, permite el acceso a estado de seguimiento de conexión para este paquete. --estado ...
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?) , Y luego permite que el primer paquete entrante se envíe en un corto período de tiempo. Un atacante tendría que adivinar el número de puerto (¿sería realmente demasiado difícil?)
Sobre evitar conflictos:
El kernel realiza un seguimiento de qué puertos están bloqueados (ya sea por otros servicios o por paquetes UDP salientes anteriores), de modo que estos puertos no se utilizarán para nuevos paquetes DNS salientes dentro del marco de tiempo. (¿Qué sucedería si accidentalmente intentara iniciar un servicio en ese puerto dentro del plazo? ¿Sería denegado / bloqueado ese intento?)
Encuentre todos los errores en el texto anterior :-) Gracias,
Chris
fuente
echo "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
NB: esta respuesta ha sido editada.
A pesar de lo que dicen las páginas del manual,
ESTABLISHED
parece significar "con estado". Para UDP, eso simplemente significa (como sugiere) recordar cada paquete UDP saliente (la "tupla src ip, src port dst ip, dst port") por un tiempo y reconocer sus respuestas.FWIW, mis reglas normales para el tráfico DNS serían algo como esto:
es decir, controlar el tráfico en la
OUTPUT
cadena y luego dejar que losiptables
módulos de estado manejen todo lo demás en laINPUT
cadena.Ver también esta pregunta relacionada .
fuente
RELATED
paquetes UDP para RTP.Los desarrolladores de iptables han considerado que un estado "ESTABLECIDO" era la situación en la que los paquetes se veían en ambas direcciones, independientemente del protocolo entre dos clientes.
La extensión de estado es parte de Conntrack. El núcleo comprende el estado de la tabla
Ejemplo de estados iptable para UDP en la tabla nf_conntrack desde el punto de vista del remitente. Imaginemos que envía una consulta DNS en UDP
Se ha enviado un paquete. No respondió y, oh, la tabla tiene los datos de lo que se espera a cambio (el paquete para la respuesta DNS).
La respuesta ha llegado, el indicador no respondido se ha ido, significa que esta conexión UDP está en estado ESTABLECIDO durante un pequeño período de tiempo definido en su sistema.
fuente