| Formulario de acceso |
|---|
| Anuncios |
|---|
|
|
| Instalación de un servidor NTP |
|
|
| 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:
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 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
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).
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 Seguridad
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 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 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
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 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 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 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 Referencias http://www.ntp.org - Página oficial del protocolo NTP.
Sólo los usuarios registrados pueden escribir comentarios. Powered by AkoComment 2.0! |
||
| < Anterior | Siguiente > |
|---|








