¿Por qué NTP requiere acceso de firewall bidireccional al puerto UDP 123?

17

¿ De cuáles son las reglas de iptables para permitir ntp? :

iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p udp --sport 123 -j ACCEPT

Además, desde el sitio web de NTP :

... ntpd requiere acceso bidireccional completo al puerto UDP privilegiado 123. ...

Mi pregunta es, ¿por qué? Para alguien que no está familiarizado con NTP, esto parece un posible agujero de seguridad, especialmente cuando le pido a un cliente mío que abra ese puerto en su firewall para que mis servidores puedan mantener su hora sincronizada. ¿Alguien tiene una justificación decente que pueda darle a mi cliente para convencerlo de que necesito este acceso en el firewall? La ayuda es apreciada! :)

DuffJ
fuente
2
¿Has leído la parte sobre "permitir relacionados / establecidos"? Si esta regla está presente, no hay necesidad de una regla de entrada general para el puerto UDP 123.
VMai
1
¿Es realmente un posible agujero de seguridad? Esta es una frase repetida a menudo que creo que no tiene sentido. Es 2014, es hora de no imponer puertos menores de 1024 con propiedades especiales y bloquear todo el tráfico que no se requiere explícitamente. Está abriendo un puerto a una máquina desde ciertos hosts en Internet.
dfc
Estoy de acuerdo, no es realmente un agujero de seguridad potencial, pero trabajo en la industria financiera y la gente siempre está nerviosa por abrir firewalls en caso de que "algo pase". Siempre vale la pena tener una buena justificación a mano, además tengo curiosidad por la respuesta: ¿ntpd en un servidor de tiempo realmente realiza conexiones salientes a sus clientes para enviar actualizaciones de tiempo? Eso suena extraño y no particularmente escalable.
DuffJ
Busqué en Google este hace unos días, se puede administrar sin una conexión entrante.
barlop
@VMai, la persona que dijo eso en superuser.com/questions/141772/… no dio ningún ejemplo, pero creo que tenía la intención de habilitar las conexiones salientes, los paquetes que entran dentro de ellas. Eso es diferente al concepto de que "ntpd requiere acceso bidireccional completo al puerto UDP privilegiado 123. ..." que suena como una conexión entrante. Si quisiera permitir la entrada y la salida usando relacionadas / establecidas, necesitaría 4 reglas. 2 para conexiones entrantes, 2 para conexiones salientes.
barlop

Respuestas:

10

Solo necesita permitir los puertos NTP de tráfico entrante si está actuando como un servidor, permitiendo que los clientes se sincronicen con usted.

De lo contrario, la existencia de un estado NTP determinará automáticamente si el paquete NTP entrante está bloqueado o permitido por un estado de firewall existente que iniciamos.

iptables -A OUTPUT -p udp --sport 123 --dport 123 -j ACCEPT

iptables -A ENTRADA -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR

Avíseme si las reglas de iptables son adecuadas. No tengo experiencia con iptables. Mi cliente NTP permanece sincronizado en mi enrutador pfSense con solo una regla de salida saliente porque pfSense es un firewall con estado.

Ben Cook
fuente
1
¡Esto parece sensato! Lamentablemente, ya no estoy en condiciones de confirmar la exactitud de su respuesta; sin embargo, lo aceptaré porque parece lógico. ¡Muchas gracias!
DuffJ
1

NTP requiere acceso bidireccional en el puerto 123 porque el RFC de NTP especifica lo siguiente con respecto al puerto de origen del cliente:

Cuando se opera en modos simétricos (1 y 2), este campo debe contener el número de puerto NTP PORT (123) asignado por la IANA.

Dado que el puerto de origen del cliente es 123, cuando el servidor devuelve la respuesta, la enviará al puerto 123. Naturalmente, para poder recibir esa respuesta, el cliente debe permitir las respuestas entrantes en el puerto 123. Normalmente, las respuestas volverían en algún rango de puerto efímero .

Como Ben Cook mencionó anteriormente, esto solo se requiere cuando se trata de un firewall sin estado ya que un firewall con estado permitiría que la respuesta regrese sin una regla explícita.

Gurpreet Atwal
fuente
0

Creo que la mejor solución es habilitar el puerto 123 para la entrada, solo para las direcciones IP que se espera que le den a su servidor la señal ntp.
Dentro del archivo de configuración ntp, /etc/ntp.conf, están las direcciones de varios servidores ntp a los que debe apuntar su servidor. Puede usar el comando de búsqueda para encontrar la IP correspondiente para cada dirección.

host -t a 0.debian.pool.ntp.org

Luego puede agregar la regla al firewall del servidor:

iptables -I INPUT -p udp -s 94.177.187.22 -j ACCEPT

... y así sucesivamente.
Esto puede evitar que cualquier persona malintencionada dañe su servidor.
Creo que no sirve de nada restringir la salida.

Leonardo Gugliotti
fuente
-1

La comunicación de servidor a servidor ntp es el puerto de origen y destino 123. Es más conveniente permitirlo explícitamente al menos a los hosts en los que está ejecutando un servicio ntp.

Puede considerar exponer un host externo a Internet para obtener tiempo de fuentes externas. Un servicio interno ntp que se sincronice con esto puede ser la fuente de todos los dispositivos. Si estos hosts están dedicados al propósito, la posible exposición es limitada: solo aceptan tráfico ntp y no almacenan otros datos.

Alternativamente, no use una red IP externa en absoluto. Use una fuente de radio como GPS por tiempo, por ejemplo.

http://www.diablotin.com/librairie/networking/firewall/ch08_13.htm http://support.ntp.org/bin/view/Support/TroubleshootingNTP

John Mahowald
fuente
1
Gracias por esta respuesta, pero no responde la pregunta. ¿Qué sucede si soy el administrador del sistema y deseo abrir mi firewall para poder configurar el servicio NTP interno? Nadie parece tener idea de por qué se requiere el acceso bidireccional (que es mucho más peligroso que el acceso unidireccional) para NTP.
DuffJ