Inicio arrow Artículos arrow Linux arrow Instalación de un servidor NTP
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Instalación de un servidor NTP Imprimir E-Mail
miércoles, 27 de septiembre de 2006

Cuando las redes comienzan a crecer considerablemente, se empieza a hacer necesaria la disponibilidad de un servidor que sincroniza los relojes de todos los ordenadores de la red. Tareas como la ejecución programada de ciertas aplicaciones o la simple acción de mandar un correo se pueden convertir en un auténtico caos si los relojes no están correctamente sincronizados o si alguno de esos relojes no funciona de forma adecuada. La solución a estos problemas viene de la mano del protocolo NTP, que se encargará de atender cuantas peticiones de hora le sean requeridas.


Antecedentes

NTP (Network Time Protocol) es un protocolo de internet que tiene como finalidad la sincronización de los relojes de los sistemas informáticos a través de la red. El protocolo utiliza como capa de transporte el puerto 123 bajo el protocolo UDP y soporta perfectamente las redes con latencia variable. La versión 3 de este protocolo utiliza el algoritmo de Marzullo (a partir de una selección de diversas fuentes, se estima el tiempo preciso) con la escala de tiempo UTC y soporta características como segundos intercalares. La versión 4 del protocolo, todavía en desarrollo en el momento de la escritura de este artículo, pretende soportar sincronizaciones con una variación de diez milisegundos a través de Internet y hasta doscientos microsegundos en redes locales.

El protocolo NTP lleva en funcionamiento desde el año 1985, momento en el que fue diseñado por Dave Mills, de la Universidad de Delaware. A día de hoy, es él mismo, junto a un grupo de voluntarios, quien sigue soportando el desarrollo de protocolo.

La jerarquía de sincronización de un servidor NTP es bastante simple:

NTP Stratum

Uno o varios servidores primarios (Stratum 1) se conectan directamente a un reloj de alta precisión (Stratum 0) que puede ser un receptor GPS, un reloj atómico, un receptor de radio, etc. Los equipos conectados a los relojes se conocen como Stratum -1 y no forman parte de la red NTP. Los servidores primarios tienen instalado el software necesario para el manejo adecuado del protocolo NTP y son conocidos como Servidores de tiempo. En la capa Stratum 2 se encuentran otros servidores, también equipados con software para manejar el protocolo, que se conectan de forma automática con los servidores primarios para sincronizar sus relojes internos y que manejan ciertos algoritmos capaces de detectar la mejor sincronización y cualquier tipo de fallo en los servidores primarios. Los ordenadores de esta capa pueden a su vez sincronizar a otros servidores de la siguiente capa. En la capa más externa (Stratum 3) se encuentran ordenadores que actúan de la misma forma que la capa superior. La repetición de capas se puede duplicar hasta completar un total de dieciséis niveles.


Instalación del software

El software necesario para montar de forma adecuada un servidor NTP viene de serie con la mayoría de distribuciones Linux. Si queremos echar un vistazo a las últimas versiones del software o a la documentación en línea, tendremos que visitar la página oficial http://www.ntp.org. En principio y si no está ya instalado dicho software, procederemos a instalarlo haciendo uso de herramientas de paquetería automáticas como yum o apt-get o bien instalaremos la última versión del paquete mediante la orden correspondiente. Por ejemplo, en un sistema con Fedora Core, la instalación del paquete se efectuaría como sigue:

[root@server ~]# yum install ntp
Running Transaction
  Installing: ntp  ################# [1/1]

Installed: ntp-4.2.0.a.20050816-11.FC5
Complete!


Configuración del servidor

El archivo de configuración de ntp se encuentra en la ruta /etc/ntp.conf y por defecto puede parecerse bastante a lo siguiente:

#ntp server config file
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys

  • Servidores

Mediante la orden server [servidor] configuraremos los servidores contra los cuales queremos sincronizar el equipo. El número de servidores a incluir no tiene límite, siendo el algoritmo de NTP el que elija la mejor referencia. Si vamos a servir tiempo a una red, es altamente recomendable configurar, al menos, tres servidores horarios. Con la orden peer [servidor] indicaremos aquellos servidores con los cuales queremos actuar como peers (una relación mediante protocolo por la cual se establecen vínculos a usar en caso de fallo de los servidores).

Mediante server 127.127.1.0 estableceremos que la sincronización se realice también contra el reloj interno de la máquina. Si se va a actuar como servidor horario, no es muy acertado el uso de esta orden, que establecerá siempre a nuestro servidor como Sincronizado, aunque sea contra un reloj interno, lo cual no es muy recomendable ni fiable.

Con el modificador minpoll (2^)[número] aplicado a los servidores configurados podemos establecer cada cuánto tiempo se realizan los pedidos de sincronización. El parámetro número oscila entre el valor 4 (16 segundos) y 17 (36,4 horas). Por ejemplo, para sincronizar el servidor cada dieciséis segundos utilizaremos la línea siguiente:

server 0.fedora.pool.ntp.org minpoll 4 #2^4 = 16

Con la orden fudge [servidor] stratum [número] establecemos la capa de stratum del servidor en cuestión. El valor de stratum de la sincronización con el reloj interno debería ser mayor que el valor de cualquier otro servidor, al ser éste reloj algo impreciso e incontrolable. Un valor de 10 quedaría casi siempre por encima de cualquier otro servidor.

La orden driftfile [archivo] establece el archivo donde se guardará el factor de corrección que mantendrá el reloj sincronizado. La orden keys [archivo] establece el archivo donde se almacenarán las claves para autenticar conexiones (lo veremos más adelante en este manual).

  • Restricciones

Es necesaria la configuración de restricciones de acceso al servidor NTP que impida su sincronización con relojes indeseados o evite su ejecución desde fuentes inadecuadas. Una buena forma de empezar es evitar todo por defecto e ir añadiendo sólo lo necesario en líneas posteriores del fichero de configuración. Añadiremos por tanto la línea siguiente al comienzo de nuestro fichero:

restrict default kod nomodify notrap nopeer noquery

O podemos prohibir absolutamente todo mediante el uso del modificador ignore:

restrict default ignore

Mediante el uso del primer ejemplo, se permitirá la sincronización con nuestra fuente pero no se permitirá a la fuente sincronizarse o modificar el servicio de nuestro sistema. A continuación han de definirse de forma explícita las restricciones particulares mediante la orden restrict [IP] [máscara] [modificador/es ...], siempre que hayamos configurado el modificador ignore en la línea anterior (segundo ejemplo). Por ejemplo, para poder sincronizar con un servidor de forma adecuada pero que éste no pueda realizar conexiones administrativas (noquery) ni pedidos de sincronización (noserve), utilizaremos la orden restrict de la forma siguiente:

restrict  84.32.201.7 mask 255.255.255.255 noquery noserve

Para evitar que desde la red 192.168.0.0/24 se realicen conexiones administrativas y que nuestro servidor no se sincronice con otro dentro de su misma red (nopeer), utilizaremos la línea siguiente (nótese la eliminación del modificador noserve para permitir las peticiones de sincronización desde la red local):

restrict 192.168.0.0 mask 255.255.255.0 noquery nopeer

Para terminar, deberemos permitir la administración desde la máquina en la que reside el servidor y debemos permitir, si así lo hemos configurado, la sincronización con el reloj interno:

restrict 127.127.1.1 mask 255.255.255.255 noquery  #reloj interno
restrict 127.0.0.1 mask 255.255.255.255 noserve nomodify  #host propietario


Seguridad

  • Claves

Las opciones de seguridad en una conexión con un servidor NTP se centran, sobre todo, en los diferentes métodos de autenticación disponibles a la hora de realizar dicha conexión. Dichas opciones son la utilización de claves simétricas en la versión 3 del protocolo y el añadido de claves públicas con soporte SSL en la versión 4 sin perder la compatibilidad con las claves anteriores. La autenticación mediante claves públicas excede el ámbito de este manual y el método de las claves simétricas se antoja más que suficiente para un servidor NTP que sólo va a dar servicio a una red local, así que nos centraremos en la configuración de éstas últimas.

Para autenticar una asociación entre máquinas, la especificación RFC 1305 permite un identificador con un valor entre 1 y 65535, seguida de una clave de seguridad de 32 bits. Para generar el archivo de claves con cadenas alfanuméricas del tipo MD5, teclearemos el siguiente comando en la consola:

[root@server ~]# ntp-keygen -M
Using OpenSSL version 90801f
Random seed file /root/.rnd 1024 bytes
Generating MD5 keys...
Generating new MD5 file and link

Si tenemos OpenSSL instalado se generarán certificados adicionales y los enlaces simbólicos correspondientes (para la carga correcta de los archivos desde el demonio ntpd) en el directorio especificado con la orden keys en el archivo de configuración. Un posible fichero de claves puede ser el siguiente:

 1 MD5  IG?"kWXh3fJyl5j
 2 MD5  Gst]ULb!"kCbq>*
 3 MD5  0tze+qKv{R4}XTQ
 4 MD5  NaZ%n,U$`VBg,%,
 5 MD5  w[:1e.Xr(8h)u=E
 6 MD5  s><$c[E3'VodY!a
 7 MD5  er(w$j@"%_~lK%S
 8 MD5  mx?a7khArUW6F;<
 9 MD5  6/S%i@F$e~z=7NZ
10 MD5  l{MYrzw4-Qe&BOD
11 MD5  ^[eE+}}y;,(0O7|
12 MD5  b09,]!+2[K@0FB1
13 MD5  !bQ||;Kf2$zfc~<
14 MD5  J@h0c$T(lfs3oj'
15 MD5  gO%I~EZT_Fk&l@D
16 MD5  AfO;_[<Kj;0iUfl

Seguidamente se ha de especificar en el archivo de configuración cuáles de las claves serán usadas en el proceso de autentificación. Lo haremos mediante el uso de la orden trustedkey [keys]:

trustedkey 2 11 12

El cliente que requiera el uso de claves para la sincronización con nuestro servidor ha de incluir en el archivo de definiciones de claves alguna de las definidas y usadas. Por ejemplo:

12 MD5  b09,]!+2[K@0FB1

La configuración del cliente debería incluir lo siguiente en su archivo de configuración (el servidor NTP tiene asignada la IP 192.168.0.200):

server 192.168.0.200 key 12
restrict 192.168.0.200 notrust
trustedkey 12

  • Cortafuegos

Si nuestro servidor está detrás de un cortafuegos, debemos tener en cuenta que el protocolo NTP utiliza para su comunicación el puerto UDP 123, así que debemos abrir dicho puerto tanto en la salida como en la entrada de los paquetes en nuestro cortafuegos. Si el servidor va a permitir conexiones desde máquinas que no sean *nix, deberemos permitir la entrada adicional de paquetes que estén por encima del puerto 1024 y cuya entrada sea el puerto UDP 123. Esto es necesario para servir la sincronización a máquinas con sistemas Windows. En principio, debería bastar una regla de este tipo en iptables, si es que ese es nuestro cortafuegos:

-A INPUT -p udp --sport 123        --dport 123 -j ACCEPT
-A INPUT -p udp --sport 1023:65535 --dport 123 -j ACCEPT
-A OUTPUT -p udp --sport 123 -j ACCEPT


Administración de NTP con ntpdc

ntpdc es la consola de administración del servidor NTP. Es muy recomendable leer el manual del programa (man ntpdc) con detenimiento, pues son muchas las operaciones que podemos realizar con él y que escapan al objetivo de esta guía. Es importante igualmente que la máquina que ejecute la consola tenga permitida la consulta contra el servidor NTP en el archivo de configuración (por ejemplo, la orden restrict 127.0.0.1 mask 255.255.255.255 noserve nomodify, permitirá la consulta del estado a la máquina local, pero no así la modificación del mismo).

Por poner un ejemplo, vamos a listar el estado de las conexiones del servidor con los peers configurados:

[root@server ntp]# ntpdc -n
ntpdc> dmp
     remote        local   st poll reach delay  offset  disp
==============================================================
 127.127.1.0     127.0.0.1   10 64  1 0.00000 0.000000 2.81735
 195.234.188.26  192.168.0.7  2 64  1 0.12843 0.016986 2.81735
 193.127.101.30  192.168.0.7  2 64  1 0.05020 0.048726 2.81735
 193.120.10.3    192.168.0.7  1 64  1 0.09929 0.055063 2.81735

El listado nos ofrece una vista de todos los peers configurados y su estado de sincronización. Por columnas y de izquierda a derecha, la información presentada es la siguiente: Servidor, Dirección local, Stratum, Tiempo entre consultas, Respuestas del servidor, Retardo y Offset y Dispersión del peer (algoritmos del protocolo). A la izquierda de la dirección IP remota aparecerá un asterisco (*) en el momento de la sincronización.

Veamos otro ejemplo de monitoreo. Esta vez listaremos las conexiones recibidas por el servidor en los últimos diez minutos:

[root@server ntp]# ntpdc -n -c monlist pool.ntp.org
remote address  port local address count m ver drop last first
==============================================================
217.127.32.90    34932 64.113.215.94      1 7 2  0   0       0
68.55.19.124       123 64.113.215.94     14 3 4  0   2     839
217.122.224.114    123 64.113.215.94  87143 3 1  0   3 3897979
82.193.95.68       123 64.113.215.94    142 3 4  0  13  128422
62.245.108.107     123 64.113.215.94  23276 3 4  0  14 1905206
203.217.30.153     123 64.113.215.94  91359 3 4  0  18 5855033
217.162.232.173    123 64.113.215.94  16053 3 2  0  20 9059586
213.92.129.193   62326 64.113.215.94    125 3 4  0  23    9710
63.211.151.94      123 64.113.215.94   6561 3 4  0  28 3533201
198.17.18.245      123 64.113.215.94     46 3 4  0  29    3380
63.211.151.82      123 64.113.215.94   8938 3 4  0  36 3533208
194.67.224.150     123 64.113.215.94   4722 3 4  0  48 3220156


Consideraciones del cliente

En sistemas Unix y GNU/Linux el programa que actuará como cliente será, en la mayoría de los casos, el mismo que actúa como servidor. Por lo tanto, los pasos a seguir para la instalación del software serán los mismos que para la instalación del servidor. El archivo de configuración se encuentra en la misma ruta y sus órdenes son las mismas, teniendo en cuenta la inclusión de las claves y restricciones necesarias para que el servidor configurado permita una conexión adecuada.

Como herramienta adicional en este tipo de sistemas operativos, podemos hacer uso del comando ntpdate para sincronizar contra un servidor horario. Dicho comando permite la sincronización del reloj interno de una máquina contra un servidor horario, ajustanto el tiempo en un momento dado. Es práctica frecuente y aceptable establecer una repetición del programa ntpdate cada cierto tiempo a través del cron del sistema, lo que evita tener que configurar un cliente ntpd. Podemos incluir esta línea en el crontab para hacer que ntpdate se ejecute cada hora:

01 * * * * root /usr/sbin/ntpdate -u swisstime.ethz.ch

En sistemas con Windows, la sincronización con un servidor horario ha de hacerse mediante el uso de la siguiente sentencia:

> net time /setsntp:swisstime.ethz.ch,0x1

Adicionalmente en Windows XP, se permite la configuración gráfica del cliente a través de una opción del cuadro de configuración de Fecha y hora, siempre y cuando tengamos privilegios administrativos. En cualquier caso, podemos acceder al estado del cliente mediante el siguiente comando:

> net time /querysntp
El valor SNTP actual es: swisstime.ethz.ch,0x1


Referencias

http://www.ntp.org - Página oficial del protocolo NTP.
http://ntp.isc.org - NTP Public Services Project.

 

Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >