Enviar los registros (logs) a un servidor remoto

Problema:

  1. La inspección manual de registros (logs) toma mucho tiempo y no hay una visión en tiempo real de los eventos que se generan en los servidores.
  2. Estar conectándose a los servidores para leer y analizar los registros, hace difícil cumplir con políticas de seguridad y las regulaciones (compliance).
  3. La operación en este escenario es reactiva (actuar después de un incidente) y no proactiva (antes de que los incidentes ocurran).

Solución

Implementar un servidor de log centralizados, donde los equipos y aplicaciones clientes envíen los registros.

Beneficios:

• Tener la visibilidad de la infraestructura en un solo lugar
• Agiliza las operación
• Prevención y detección de incidentes más rápido.
• Aumenta la seguridad.
• Análisis y predicciones más rapadas.

Requisitos de red:

1. El protocolo syslog usa los puertos TCP 514 y UDP 514.
2. Los clientes son los que originan la conexión hacia el servidor syslog, por lo que se debe permitir la conexión entrante en el servidor.

Implementación de servidor systlog en CENTOS 7

1. Instalar y habiliar el servicio

yum install rsyslog
systemctl enable rsyslog.service

2. Editar el archivo /etc/rsyslog.conf, con los siguientes cambios:

a) Habilitar envió por UDP, quitando el comentario en estas líneas

$ModLoad imudp
$UDPServerRun 514

 

b) Habilitar envió por TCP, quitando el comentario en estas líneas

$ModLoad imtcp
$InputTCPServerRun 514

c)  Crear una plantilla ( template). Debe ser agregada antes de GLOBAL DIRECTIVES.

$template remote-incoming-logs,"/var/log/rsyslogserver/%FROMHOST-IP%.log"
*.* ?remote-incoming-logs
& ~

Las tres línesa significan :
a. remote-incoming-logs. Es el nombre de la plantilla, y puede tener cualquier nombre
b. /var/log/rsyslogserver Directorio donde se guardaran los registros.
c. %FROMHOST-IP%.log Nombre del archivo, y es igual a la IP del equipo que se conecta y envía logs. Se crean de manera dinámica.
d. *.* ?remote-incoming-logs , indica que todo (*.*) sea procesado con la plantilla “remote-incoming-logs”.
e. & ~ Indica al servidor syslog que después de escribir el registro en el archivo correspondiente, deje de procesar el mensaje. No lo escriba en el registro local

5. Guardar cambios en el archivo.
6. Reiniciar el servidor syslog

service rsyslog restart

7. Revisar que el servidor este escuchando en los puertos de TCP 514y UDP 514

netstat -tulpn | grep rsyslog

tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      15477/rsyslogd      
udp        0      0 0.0.0.0:514             0.0.0.0:*                           15477/rsyslogd

 

Configuración de cliente

La configuración puede ser muy granular y extensa, sin embargo en la practica es mejor enviar todo los registros al servidor syslog.

1. Editar el archivo /etc/rsyslog.conf
2. En la sección de #### RULES ####
3. Agregar la regla que indica “Enviar todo al servidor syslog” por medio de UDP.

*.* @10.254.254.15:514

Nota: para enviar los mensajes por TCP usar doble arroba @@. *.* @@10.254.254.15:514

4. Habilitar e iniciar el servicio

systemctl enable rsyslog
systemctl start rsyslog

Probar configuración

Para enviar registros desde el cleinet al servidor syslog, se puede usar los camandos logger o netcat nc.

Usando logger

a) Usar este comando para enviar un rgistro con logegr:

logger System "Prueba de envió de log usando logger"

b) Verificar en el servidor que el registro se escribió en el servidor syslog.

tail -f /var/log/rsyslogserver/10.255.4.5.log
2019-01-29T14:25:17-06:00 aurlen-aix root: System Prueba de envio de log usando logger

Usando nc

Es posible enviar un log por medio de netcat usado UDP:

echo -n "mesage" | nc -4u -w1 <IP> <PORT>

Ejemplo:

a) Desde el cliente ejecutar:

echo -n " Prueba de envió de log usando netcat " | nc -4u -w1 10.254.254.15:514

b) Verificar en el servidor que el registro se escribió en el servidor syslog

tail -f /var/log/rsyslogserver/10.255.4.5.log

2019-01-29T14:32:06.870564-06:00 aurlen-aix Prueba de envió de log usando netcat