====== OpenNtpd en FreeBSD-12.1 ====== {{ :informatica:freebsd:logo-reverse.png?380 | FreeBSD }} **NTP**, el Protocolo de *tiempo (fecha y hora)* de la red, es un protocolo estandarizado que proporciona formas de sincronizar el tiempo en varios sistemas operativos. **OpenNTPd** es una implementación gratuita y fácil de usar del Protocolo de tiempo de red (NTP), desarrollado originalmente como parte del proyecto *OpenBSD*. Proporciona la capacidad de sincronizar el reloj local desde servidores NTP remotos y también puede actuar como servidor en sí. Este tutorial le mostrará cómo instalar OpenNTPd en FreeBSD. ===== Prerrequisitos ===== Para seguir este tutorial, debe tener: Un FreeBSD 10.2 con una cuenta de usuario **root**; un usuario normal de freebsd está bien. Esta cuenta de FreeBSD requiere una clave SSH para acceso remoto. Para obtener ayuda sobre cómo configurar una clave SSH, lea [[https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-freebsd-server|Como Configurarla autenticacion basada en claves SSH]] en un servidor FreeBSD. Para obtener más información sobre cómo iniciar sesión en su FreeBSD y la administración básica, consulte la serie de tutoriales de Introducción a FreeBSD. ==== Paso-1: Instalando OpenNTPd en FreeBSD ==== Antes de instalar OpenNTPd, actualice la información del repositorio utilizada por pkg: # pkg update # pkg upgrade Una vez actualizados los paquetes, realice la instalación: # pkg install openntpd La configuración predeterminada de **OpenNTPd** usa *pool.ntp.org* como sus servidores horarios predeterminados y está configurada para funcionar solo como una máquina cliente. El resto de este tutorial mostrará cómo cambiar el servidor horario utilizado y cómo configurar **OpenNTPd** como servidor horario. ==== Paso-2: Cambio del servidor horario (opcional) ==== Los siguientes pasos editarán el archivo de configuración predeterminado `/usr/local/etc/ntpd.conf`. Use ee, vi o su editor de texto favorito para editar el archivo de configuración. # vim /usr/local/etc/ntpd.conf Desarrollado por el *GeoDNS* de Ask Bjørn Hansen, *pool.ntp.org* generalmente devolverá direcciones IP para servidores en o cerca de su país. Para la mayoría de los usuarios, esto dará los mejores resultados. Alternativamente, también puede usar una zona de país como ''br.pool.ntp.org'', ''de.pool.ntp.org'' o ''ru.pool.ntp.org'' para forzar/limitar los resultados a sus necesidades personales. Para leer más sobre el Proyecto NTP Pool, visite ''pool.ntp.org''. Para el ejemplo en este tutorial, usaremos ''NTP.br'', un proyecto en Brasil que preserva y distribuye el tiempo legal en territorio brasileño. Si no está en Brasil, use un proyecto similar en su país o región. Defina su servidor de hora deseado de esta manera, sustituyendo ''pool.ntp.br'' con su servidor de hora elegido. # Archivo: /usr/local/etc/ntpd.conf # $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $ # sample ntpd configuration file, see ntpd.conf(5) # Addresses to listen on (ntpd does not listen by default) #listen on * # sync to a single server #server ntp.example.org # use a random selection of NTP Pool Time Servers # see http://support.ntp.org/bin/view/Servers/NTPPoolServers servers pool.ntp.br # use a specific local timedelta sensor (radio clock, etc) #sensor nmea0 # use all detected timedelta sensors #sensor * # get the time constraint from a well-known HTTPS site #constraints from "https://www.google.com/search?q=openntpd" ==== Paso-3: Cambiar las restricciones ==== Una configuración de cliente personalizada también puede agregar soporte a restricciones para que **ntpd** pueda consultar la fecha: encabezados de servidores HTTPS confiables a través de TLS. La página de manual de ntpd.conf(5) dice: >Los paquetes NTP recibidos con información de tiempo fuera de un rango cercano a la restricción se descartarán y dichos servidores NTP se marcarán como no válidos. Esto previene contra algunos ataques MITM mientras preserva la precisión del reloj. Agregue las restricciones a ''/usr/local/etc/ntpd.conf''. Asegúrese de utilizar uno o más sitios HTTPS conocidos y confiables. Puede descomentar la línea de ejemplo proporcionada en el archivo eliminando el primer ''#'' carácter resaltado a continuación: # Archivo: /usr/local/etc/ntpd.conf # $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $ # sample ntpd configuration file, see ntpd.conf(5) # Addresses to listen on (ntpd does not listen by default) #listen on * # sync to a single server #server ntp.example.org # use a random selection of NTP Pool Time Servers # see http://support.ntp.org/bin/view/Servers/NTPPoolServers servers pool.ntp.br # use a specific local timedelta sensor (radio clock, etc) #sensor nmea0 # use all detected timedelta sensors #sensor * # get the time constraint from a well-known HTTPS site # constraints from "https://www.google.com/search?q=openntpd" ==== Paso-4: configuración de OpenNTPd como servidor de tiempo ==== Esta sección le muestra cómo cambiar el comportamiento predeterminado de OpenNTPd y convertir FreeBSD en un servidor NTP capaz de servir tiempo sobre IPv4 e IPv6. Los resultados finales para la configuración de un servidor deberían tener este aspecto, con ''your_server_ip'' reemplazado por la dirección IPv4 o IPv6 de su servidor. /usr/local/etc/ntpd.conf # $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $ # sample ntpd configuration file, see ntpd.conf(5) # Addresses to listen on (ntpd does not listen by default) listen on your_server_ip # sync to a single server #server ntp.example.org # use a random selection of NTP Pool Time Servers # see http://support.ntp.org/bin/view/Servers/NTPPoolServers servers pool.ntp.br # use a specific local timedelta sensor (radio clock, etc) #sensor nmea0 # use all detected timedelta sensors #sensor * # get the time constraint from a well-known HTTPS site #constraints from "https://www.google.com/search?q=openntpd" ==== Paso-5: Inicio de OpenNTPd en el arranque ==== La configuración de servicio predeterminada para OpenNTPd no iniciará el demonio durante el proceso de arranque de FreeBSD. Para agregar el servicio NTP provisto por ntpd en FreeBSD, ejecute lo siguiente: # sysrc openntpd_enable="YES" # sysrc openntpd_flags="-s -v" Si desea establecer la hora inmediatamente al inicio, agregue **-s** a ''openntpd_flags''. **-v** también se puede usar para que se registren todas las llamadas a adjtime. Pasar **-s** a ntpd hará que el demonio permanezca en primer plano por hasta 15 segundos esperando que responda uno de los servidores NTP configurados. Este no es lo predeterminado, y una configuración personalizada como esta debería configurarse como se encuentra en las líneas anteriores. ==== Paso 6 - Administrar el servicio OpenNTPd ==== Ahora que tiene el archivo de configuración editado y personalizado para satisfacer todas sus necesidades, puede iniciar el servicio proporcionado por OpenNTPd. Para iniciar el servicio: # service openntpd start Si los indicadores del demonio OpenNTPd están configurados para registrar información de depuración, el inicio de la salida debería tener este aspecto: Starting openntpd. constraint certificate verification turned off ntp_adjtime returns frequency of 8.643158ppm Puede administrar el servicio OpenNTPd con los comandos habituales: *status*, *restart*, *start*, *stop*. ==== Paso-7: Solución de problemas (opcional) ==== **OpenNTPd** usa dos binarios: ''ntpd'' y ''ntpctl''. El primero es el demonio mismo y es responsable del servicio NTP proporcionado al cliente o máquina del servidor. El segundo se usa para mostrar información sobre el demonio en ejecución. Esta sección le mostrará cómo usar ''ntpctl'', ''nc'' y ''sockstat'' para solucionar problemas del servicio NTP provisto por ''OpenNTPd'' y su demonio. Si tiene un servicio en ejecución, o simplemente desea una forma diferente de verificar si su servicio se está ejecutando, use esta sección. === Obtener Status y Peer === El ''ntpctl'' de **OpenNTPd** usa un socket local para comunicarse con el demonio **OpenNTPd**. El valor predeterminado es ''/var/run/ntpd.sock''. Este tutorial cubrirá dos tipos de consultas que puede ejecutar con ntpctl: ''Status'' y ''Peer''. El Status muestra el estado de los pares y sensores, así como si el reloj del sistema está sincronizado. Cuando se sincroniza el reloj del sistema, se muestra el estrato. Cuando el reloj del sistema no está sincronizado, se muestra el desplazamiento del reloj del sistema, según lo informado por la llamada al sistema ''adjtime''. Cuando se establece la restricción mediana, se muestra el desplazamiento a la hora local. Para mostrar el estado usando ''ntpctl'': # ntpctl -s status 4/4 peers valid, constraint offset -1s, clock synced, stratum 2 ''Peers'' muestra la siguiente información sobre cada par: peso (peso), nivel de confianza (tl), estrato (st) y la cantidad de segundos hasta la próxima actualización del par (próxima encuesta). Los valores de desplazamiento, retardo de red y fluctuación de fase de red están en milisegundos. Cuando el reloj del sistema se sincroniza con un par, se muestra un asterisco (*) a la izquierda de la columna de peso para ese par. Para mostrar información de pares usando ''ntpctl'': # ntpctl -s peers peer wt tl st next poll offset delay jitter 200.54.149.24 from pool ntp.shoa.cl * 1 10 1 25s 30s 4.416ms 8.264ms 1.670ms 200.27.106.115 from pool ntp.shoa.cl 1 10 1 2s 30s 3.350ms 8.367ms 2.066ms 200.54.149.19 from pool ntp.shoa.cl 1 10 1 20s 32s 4.559ms 8.906ms 1.112ms 200.27.106.116 from pool ntp.shoa.cl 1 10 1 1s 30s 3.290ms 8.091ms 2.105ms === Escuchando los sockets === Puede usar sockstat para enumerar los sockets abiertos de dominio IPv4, IPv6 y UNIX. Para enumerar los zócalos de escucha relacionados con NTP sobre IPv4 e IPv6: # sockstat -4 -p 123 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS _ntp ntpd 97057 7 udp4 192.168.1.100:64847 200.54.149.24:123 _ntp ntpd 97057 8 udp4 192.168.1.100:24060 200.27.106.115:123 _ntp ntpd 97057 9 udp4 192.168.1.100:60892 200.54.149.19:123 _ntp ntpd 97057 10 udp4 192.168.1.100:38472 200.27.106.116:123 Si está ejecutando OpenNTPd como servidor de tiempo en la red, la columna DIRECCIÓN LOCAL le mostrará una línea con sus direcciones IP; ''your_ipv4_address:123'', que representa el socket IPv4, y ''your_ipv6_address:123'', que muestra un socket IPv6 de escucha. === Conexión a internet === Utilice *nc* para solucionar problemas no solo de NTP sino de muchos demonios de red y sus sockets (UNIX, TCP o UDP). La página de manual dice: >A diferencia de telnet, los scripts de netcat funcionan bien y separan los mensajes de error en errores estándar en lugar de enviarlos a la salida estándar como lo hace telnet con algunos. Para verificar si puede llegar a un servidor NTP o a los ''pool'' host, a través de IPv4: # nc ntp.shoa.cl 123 -z -4 -u -v Connection to ntp.shoa.cl 123 port [udp/ntp] succeeded! Para verificar si puede llegar a un servidor NTP o a los ''pool'' host, a través de IPv6: # nc ntp.shoa.cl 123 -z -6 -u -v Connection to ntp.shoa.cl 123 port [udp/ntp] succeeded! === Usando ntpdate === Use ntpdate para solucionar algunos de los servidores que quiera usar. Puede obtener información sobre la máquina que ejecuta el servicio NTP: estrato, compensación y retraso. # ntpdate -q -4 ntp.shoa.cl server 200.27.106.115, stratum 1, offset +0.002610, delay 0.03706 server 200.54.149.19, stratum 1, offset +0.002535, delay 0.02927 server 200.54.149.24, stratum 1, offset +0.000481, delay 0.03264 server 200.27.106.116, stratum 1, offset +0.001068, delay 0.03369 12 May 18:11:58 ntpdate[15141]: adjust time server 200.54.149.19 offset +0.002535 sec Tenga en cuenta que la funcionalidad de ''ntpdate'' ahora está disponible en el programa ''ntpd'' de FreeBSD. Vea la opción de línea de comando **-q** en la página de manual ''ntpd'' de FreeBSD, o use ''ntpq''. **Advertencia**: la utilidad _ntpdate_ se retirará pronto. === Lectura de páginas del manual === Los ''ntpd'', ''ntpd.conf'' y ''ntpctl'' de **OpenNTPd** no forman parte del sistema base de FreeBSD, por lo que sus páginas de manual tampoco forman parte del MANPATH predeterminado del sistema operativo. Para estar seguro de que leerá las páginas del manual de **OpenNTPd**, debe ejecutar ''man'' con '''man -M /usr/local/man'''. No se confunda con la página de manual ''ntpd(8)'' predeterminada de FreeBSD. $ man -M /usr/local/man ntpd Repita el mismo procedimiento para leer la página de manual ntpctl(8) o ntpd.conf(5) de OpenNTPd. $ man -M /usr/local/man ntpctl $ man -M /usr/local/man ntpd.conf ==== Conclusión ==== El tiempo es inherentemente importante para la función de estaciones de trabajo, servidores, enrutadores y redes. Sin tiempo sincronizado, la correlación precisa de información entre dispositivos se vuelve difícil, si no imposible. Cuando se trata de seguridad, si no puede comparar con éxito los registros entre cada uno de sus enrutadores y todos sus servidores de red, le resultará muy difícil desarrollar una imagen confiable de un incidente.