Configuración Automática de la Sincronización Horaria en Sistemas RedHat/CentOS usando Ansible

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

La sincronización horaria precisa en sistemas Linux es fundamental para el correcto funcionamiento de servicios distribuidos, autenticación, registros de logs y más. En entornos empresariales, especialmente donde múltiples servidores interactúan entre sí, una desviación mínima en el tiempo puede provocar errores de seguridad, inconsistencias en los datos o fallos en la ejecución de tareas programadas.

Este artículo presenta un playbook de Ansible que automatiza la configuración de la sincronización horaria en sistemas RedHat y CentOS, priorizando el uso de Chrony, el cliente NTP moderno recomendado por Red Hat, pero manteniendo compatibilidad con el cliente NTP clásico si Chrony no está disponible.

Objetivos del Playbook

  • Detectar automáticamente si está instalado Chrony o NTP.
  • Instalar Chrony si no hay ningún cliente NTP disponible.
  • Configurar el servidor NTP interno de la organización.
  • Garantizar que el servicio de sincronización esté activo y habilitado.
  • Mostrar información del estado horario y las fuentes de sincronización.

Detalles Técnicos

Variables

  • target_hosts: Define el grupo de hosts objetivo sobre los que se aplicará la configuración.
  • ntp_server: Dirección del servidor NTP corporativo, en este caso 0.pool.ntp.org.

Lógica del Playbook

  1. Detección de clientes NTP: Se ejecutan comandos rpm -q para comprobar si Chrony o NTP están instalados.
  2. Instalación Condicional: Si no hay ninguno de los dos, se instala Chrony mediante yum.
  3. Configuración de Chrony:
    • Se comentan todas las líneas pool o server existentes en /etc/chrony.conf.
    • Se añade la línea server <ntp_server> iburst al final del archivo.
    • Se asegura que el servicio chronyd esté habilitado y reiniciado.
  4. Configuración alternativa con NTP:
    • Solo si Chrony no está disponible pero NTP sí.
    • Se modifican las líneas del archivo /etc/ntp.conf.
    • Se introducen restricciones básicas para mejorar la seguridad.
    • Se habilita y reinicia el servicio ntpd.
  5. Verificaciones finales:
    • Se obtiene el estado horario mediante timedatectl.
    • Se muestran las fuentes de sincronización actuales, utilizando chronyc tracking o ntpq -p, según corresponda.
    • Se imprimen los resultados con debug.

Ventajas del Enfoque

  • Adaptabilidad: Compatible con sistemas que tengan Chrony o NTP.
  • Seguridad: Incluye configuraciones de restricción para proteger el servicio NTP.
  • Automatización Completa: No requiere intervención manual.
  • Auditoría Transparente: Muestra el estado final de la sincronización.

Código del Playbook

A continuación, se presenta el contenido completo del playbook Ansible:

---
- name: Configurar sincronización horaria en RedHat/CentOS (prioriza Chrony)
hosts: "{{ target_hosts }}"
become: true
vars:
ntp_server: "
0.pool.ntp.org"

tasks:
- name: Verificar si Chrony está instalado
ansible.builtin.shell: rpm -q chrony
register: chrony_installed
ignore_errors: true

- name: Verificar si NTP está instalado
ansible.builtin.shell: rpm -q ntp
register: ntp_installed
ignore_errors: true

- name: Instalar Chrony si no hay ningún cliente NTP
ansible.builtin.yum:
name: chrony
state: present
when: chrony_installed.rc != 0 and ntp_installed.rc != 0

- name: Configurar Chrony si está presente o se ha instalado
when: chrony_installed.rc == 0 or (chrony_installed.rc != 0 and ntp_installed.rc != 0)
block:
- name: Comentar servidores pool y server en chrony.conf
ansible.builtin.replace:
path: /etc/chrony.conf
regexp: '^(pool|server)'
replace: '#\1'
ignore_errors: true

- name: Añadir nuevo servidor Chrony
ansible.builtin.lineinfile:
path: /etc/chrony.conf
line: "server {{ ntp_server }} iburst"
insertafter: EOF

- name: Habilitar y reiniciar servicio Chrony
ansible.builtin.service:
name: chronyd
state: restarted
enabled: yes

- name: Configurar NTP si está presente pero no Chrony
when: chrony_installed.rc != 0 and ntp_installed.rc == 0
block:
- name: Comentar servidores existentes en ntp.conf
ansible.builtin.replace:
path: /etc/ntp.conf
regexp: '^server'
replace: '#server'
ignore_errors: true

- name: Añadir nuevo servidor NTP
ansible.builtin.lineinfile:
path: /etc/ntp.conf
line: "server {{ ntp_server }} iburst"
insertafter: EOF

- name: Añadir restricciones a ntp.conf
ansible.builtin.blockinfile:
path: /etc/ntp.conf
block: |
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1

- name: Habilitar y reiniciar servicio NTP
ansible.builtin.service:
name: ntpd
state: restarted
enabled: yes

- name: Verificar estado del sistema
ansible.builtin.shell: timedatectl status
register: time_status
changed_when: false

- name: Verificar fuentes de sincronización
ansible.builtin.shell: |
chronyc tracking 2>/dev/null || ntpq -p
register: ntp_sources
changed_when: false

- name: Mostrar resultados de sincronización
ansible.builtin.debug:
msg: |
{{ time_status.stdout }}
{{ ntp_sources.stdout }}

Conclusión

Este playbook es una solución eficaz y flexible para asegurar una sincronización horaria coherente en entornos RedHat/CentOS. Gracias a su lógica condicional, adapta su comportamiento según el cliente NTP disponible, lo que lo convierte en una herramienta ideal para infraestructuras heterogéneas.

Binario 0
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.