Icono del sitio Binario 0

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

Detalles Técnicos

Variables

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

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.

Salir de la versión móvil