Enviar los registros (logs) a un servidor remoto
Problema:
- 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.
- 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).
- 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