domingo, 2 de agosto de 2015

Montar un Servidor syslog en Linux con rsyslog y LogAnalyzer

Buenas, hoy hablaremos de los conceptos básicos acerca de que es un servidor Syslog, su utilidad, y la forma de instalarlo. En este caso hablaremos de la forma de instalarlo en una instalación debian 7, aunque es perfectamente aplicable a debian 8 y cualquier otra base Debian.



Concepto de Syslog y su utilidad


Syslog es un estándar desarrollado para el envío de mensajes de registro a una IP en una red LAN. Syslog hace referencia tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro.


Los equipos y servicios con soporte para envío de log a este sistema pueden enviar cualquier tipo de mensaje, normalmente suelen enviar información sobre la seguridad del sistema, errores, avisos, etc. aunque pueden contener cualquier información. Junto con cada mensaje se incluye la fecha y hora del envío, el equipo que envía, la prioridad y otros datos adicionales.


El protocolo syslog consiste en un equipo servidor ejecutando el servidor de syslog, conocido como syslogd (demonio de syslog) y clientes que envían un pequeño mensaje de texto (de menos de 1024 bytes) a este servidor.


Los mensajes de syslog se suelen enviar vía UDP, por el puerto 514, en formato de texto plano. Algunas implementaciones del servidor, como syslog-ng, permiten usar TCP en vez de UDP, y también ofrecen Stunnel para que los datos viajen cifrados mediante SSL/TLS.


Aunque syslog tiene algunos problemas de seguridad, su sencillez ha hecho que muchos dispositivos lo implementen, tanto para enviar como para recibir. Eso hace posible integrar mensajes de varios tipos de sistemas en un solo repositorio central.


El mensaje enviado se compone de tres campos, entre todos no han de sumar más de 1024 bytes, pero no hay longitud mínima:


Prioridad: número de 8 bits que indica tanto el recurso (tipo de aparato que ha generado el mensaje) como la severidad (importancia del mensaje).


Cabecera: indica tanto el tiempo como el nombre del ordenador que emite el mensaje. Esto se escribe en codificación ASCII (7 bits), por tanto es texto legible. El primer campo, tiempo, se escribe en formato Mmm dd hh:mm:ss, donde Mmm son las iniciales del nombre del mes en inglés, dd, es el día del mes, y el resto es la hora. No se indica el año. Justo después viene el nombre de ordenador (hostname), o la dirección IP si no se conoce el nombre. No puede contener espacios, ya que este campo acaba cuando se encuentra el siguiente espacio.

Texto: lo que queda de paquete syslog al llenar la prioridad y la cabecera es el propio texto del mensaje. Éste incluirá información sobre el proceso que ha generado el aviso, normalmente al principio (en los primeros 32 caracteres) y acabado por un carácter no alfanumérico (como un espacio, ":" o "["). Después, viene el contenido real del mensaje, sin ningún carácter especial para



Requisitos para montar servidor de log gratuito con Rsyslog


Para montar un servidor de log con el estándar syslog usando el software Rsyslog necesitaremos un equipo (físico o virtual) con el sistema operativo GNU Linux. en nuestro caso como ya dijimos utilizaremos la distribución GNU Linux DEBIAN 7. Además, necesitaremos un servidor web y una base de datos, pues se explicará cómo guardar los log de Rsyslog en el motor de base de datos MySQL Server y cómo consultarlos mediante LogAnalyzer vía web por lo que necesitaremos un servidor web con Apache y PHP.


En este sentido, los requisitos mínimos son un equipo con un núcleo, de preferencia 2 y mínimo 512mb, ampliables debido a que si se aumenta el volumen de datos la memoria se puede quedar corta. Por ello hay que tener la salvedad de proveer un entorno en donde se pueda crecer de ser requerido.

Instalar Rsyslog en DEBIAN GNU Linux



A continuación vamos a explicar cómo instalar el servidor de log syslog gratuito Rsyslog en un equipo Debian. Para ello editaremos el fichero sources.list y añadiremos una línea nueva, para ello ejecutaremos los comando linux:


apt-get install gpm ssh vi­m ntpdate tcpdump iptraf

Tras concluir la actualización instalaremos Rsyslog con el comando linux: No solicitará confirmación para instalar, pulsaremos la tecla "s" e INTRO:


INSTALACIÓN Y CONFIGURACIÓN DE APACHE Y MYSQL:

Para instalar Mysql, Apache 2,  PHP5 y algunas librerías necesarias ejecutaremos el siguiente comando:

apt-get install mysql-server apache2 php5 php5-mysql php5-gd

La instalación nos preguntará por los password del root de MySQL, los pondremos y memorizaremos ya que los necesitaremos en la instalación de rsyslog-mysql (descrito mas adelante)
Una vez instalado todo reiniciaremos el servicio Apache2 para que coja la librería gd, que nos creará las imágenes de gráficos estadísticos en LogAnalizer:
sudo /etc/init.d/apache2 restart
Restarting web server: apache2 … waiting .

INSTALACIÓN Y CONFIGURACIÓN DE RSYSLOG:



Para instalar Rsyslog y el módulo para escribir en mysql:


apt-get install rsyslog rsyslog-mysql


Esto instala el soporte de Rsyslog junto al soporte para bases de datos MySQL.
El asistente para instalar el paquete nos preguntará si queremos configurar la base de datos para rsyslog-mysql con dbconfig-common, seleccionaremos "Sí" y pulsaremos INTRO:


Image


Con el texto: Es necesario tener una base de datos instalada y configurada para rsyslog-mysql antes de poder utilizarlo. Puede gestionar esto opcionalmente a través de "dbconfig-common". Si ud. es un administrador de bases de datos avanzado o si la base de datos ya está instalada y configurada quizás quiera realizar esta configuración manualmente, y debería rechazar esta opción. Probablemente podrá encontrar los detalles de las operaciones que debe realizar en "/usr/share/doc/rsyslog-mysql".


Introduciremos la contraseña del superusuario root de MySQL Server, el paquete rsyslog-mysql deberá acceder a MySQL y crear un usuario, un catálogo y las tablas correspondientes:


Introduciremos ahora la contraseña para que rsyslog-mysql acceda al servidor de MySQL:


Image


Image


El asistente creará los ficheros de configuración necesarios, el usuario, catálogo y tablas en MySQL:
Accediendo con MySQL Administrator, MySQL MySQL Workbench o cualquier software para acceder a MySQL como AjpdSoft Administración Bases de Datos podremos consultar el esquema creado por rsyslog-mysql "Syslog", las tablas "SystemEvents" y "SystemEventsProperties":

Image
Image


El systema Rsyslog ya habrá empezado a guardar los eventos de log en MySQL, podremos consultarlos con MySQL Administrator pulsando sobre la tabla "SystemEvents" con el botón derecho del ratón y seleccionando "Edit Table Data":

Image
Image


Las consultas SQL de creación de las dos tablas del catálogo Syslog de MySQL:

CREATE TABLE `SystemEvents` (


`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,


`CustomerID` bigint(20) DEFAULT NULL,


`DeviceReportedTime` datetime DEFAULT NULL,


`ReceivedAt` datetime DEFAULT NULL,


`Facility` smallint(6) DEFAULT NULL,


`Message` text,


`Priority` smallint(6) DEFAULT NULL,

`FromHost` varchar(60) DEFAULT NULL,

`EventUser` varchar(60) DEFAULT NULL,

`NTSeverity` int(11) DEFAULT NULL,
`Importance` int(11) DEFAULT NULL,

`EventSource` varchar(60) DEFAULT NULL,

`EventCategory` int(11) DEFAULT NULL,

`MinUsage` int(11) DEFAULT NULL,

`EventID` int(11) DEFAULT NULL,
`EventBinaryData` text,
`MaxAvailable` int(11) DEFAULT NULL,
`CurrUsage` int(11) DEFAULT NULL,

`EventLogType` varchar(60) DEFAULT NULL,

`MaxUsage` int(11) DEFAULT NULL,
`InfoUnitID` int(11) DEFAULT NULL,
`SysLogTag` varchar(60) DEFAULT NULL,
`GenericFileName` varchar(60) DEFAULT NULL,

`SystemEventID` int(11) DEFAULT NULL,

`SystemID` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`) );
CREATE TABLE `SystemEventsProperties` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ParamName` varchar(255) DEFAULT NULL,

PRIMARY KEY (`ID`) );

`ParamValue` text,

De esta sencilla forma ya tendremos montado un servidor de syslog con Rsyslog sobre Linux de forma gratuita y guardando los log en MySQL, por lo tanto podremos consultarlos desde cualquier aplicación que permita acceso a MySQL o bien usar algún software gratuito como LogAnalyzer.

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog



Explicaremos ahora cómo instalar el sistema LogAnalyzer en nuestro servidor de log syslog que nos permitirá consultar vía web con un entorno amigable los eventos que Rsyslog registre en MySQL. Para ello en primer lugar crearemos una carpeta para la descarga temporal del paquete comprimido con:


sudo mkdir /tmp/loganalyzer
Buscaremos en la web oficial de LogAnalyzer la última versión y anotaremos la URL de la descarga, para descargar el fichero comprimido desde la consola de Linux Ubuntu Server accederemos a la carpeta creada para la descarga con:
cd /tmp/loganalyzer
Y descargaremos el fichero con:
( cambiando la URL por la que corresponda a la versión actual)
Image


Descomprimiremos el fichero descargado con el comando linux:
tar -xvf loganalyzer-3.6.3.tar.gz
Image


Accederemos a la carpeta que se habrá creado al descomprimir con:
cd /tmp/loganalyzer/loganalyzer-3.6.3
Crearemos una subcarpeta dentro de la carpeta www de Apache de nuestro servidor web con:
sudo mkdir /var/www/loganalyzer
Ahora copiaremos el contenido de la carpeta "src" a la carpeta creada con:
sudo cp -R /tmp/loganalyzer/loganalyzer-3.6.3/src/* /var/www/loganalyzer
Image


Repetiremos la operación para la carpeta "contrib":
sudo cp -R /tmp/loganalyzer/loganalyzer-3.6.3/contrib/* /var/www/loganalyzer
Image


stableceremos permisos de escritura para los ficheros configure.sh y secure.sh:

cd /var/www/loganalyzer
sudo chmod +x configure.sh secure.sh

Iniciaremos LogAnalyzer vía web desde cualquier PC de la red abriendo un navegador e introduciendo la URL:


(cambiaremos "192.168.31.156 por la IP de nuestro servidor syslog)

Se iniciará LogAnalyzer, en el primer inicio dará un error al detectar que aún no ha sido configurado, pulsaremos en "here" para instalar Adisco LogAnalyzer:

Image


Con el texto: Critical Error occured. Error, main configuration file is missing! Click here to Install Adiscon LogAnalyzer!

Se iniciará el asistente para configurar e instalar definitivamente LogAnalyzer, pulsaremos "Next":

Image


El fichero config.php debe poderse escribir, pues en el siguiente paso el asistente de instalación de LogAnalyzer lo comprobará. De no serlo deberemos debe de establecerse los permisos apropiados con el comando linux chmod:

Image


Introduciremos los datos de configuración, los importantes son:
  • Enable User database: marcaremos "Yes".
  • Database Host: IP o nombre DNS (hostname) del equipo servidor de syslog con MySQL.
  • Database Port: puerto de la base de datos MySQL, por defecto 3306.
  • Database Name: nombre del catálogo de MySQL que el asistente creará para LogAnalyzer, por ejemplo "loganalyzer".
  • Table prefix: prefijo que se añadirá al nombre de las tablas, esto es últil si queremos usar un catálogo ya existente, así separaremos por nombre las tablas de otras existentes.
  • Database User: usuario que se creará en la base de datos MySQL para uso de LogAnalyzer.
  • Database Password: contraseña para el usuario anterior.
  • Require user to be logged in: marcaremos "Yes".
  • Authentication method: seleccionaremos "Internal authentication".
El resto de parámetros son de visualización de los log, podremos modificarlos en cualquier momento:

Image


A continuación el asistente para instalar LogAnalyzer nos indicará que se van a crear las tablas en el catálogo de MySQLelegido, pulsaremos "Next":

Image


Si el proceso es correcto nos indicará las tablas creadas, pulsaremos "Next":

Image


Introduciremos ahora los datos del usuario que se creará para acceder a LogAnalyzer:

Image


Introduciremos ahora los datos de la fuente, LogAnalyzer permite analizar y consultar varios servidores de log con syslog, por lo que ahora crearemos el acceso a nuestro servidor de syslog con Rsyslog, para ello introduciremos los siguientes datos:

  • Name of the Source: nombre del origen, por ejemplo "Log AjpdSoft", este nombre se usará para diferenciar varios servidores de log con syslog.
  • Source Type: seleccionaremos "MYSQL Native".
  • Select View: seleccionaremos "Syslog Fields".
  • Table type: seleccionaremos "MonitorWare".
  • Database Host: introduciremos la IP o nombre DNS de nuestro servidor con Rsyslog y MySQL.
  • Database Name: introduciremos el nombre del catálogo que contiene las tablas de Rsyslog, por defecto "Syslog".
  • Database Tablename: nombre de la tabla con los eventos de Rsyslog en MySQL, por defecto "SystemEvents".
  • Database User: nombre de usuario de MySQL con permisos de acceso a las tablas de Rsyslog, por defecto "rsyslog".
  • Database Password: contraseña del usuario anterior.
  • Enable Row Counting: si vamos a tener un servidor de log con no demasiados eventos podremos marcar "Yes", si vamos a tener cientos de miles de eventos no es recomendable activar esta opción pues puede ralentizar el acceso.

De esta forma LogAnalyzer permite tener sus propias tablas alojadas en un servidor de MySQL diferente al de Rsyslog (o puede ser el mismo como en nuestro caso):


Image


El proceso de instalación de LogAnalyzer habrá concluido:

Image


Introduciendo la URL en un navegador:

(cambiaremos "192.168.250.156 por la IP de nuestro servidor syslog)
Nos solicitará usuario y contraseña, introducimos el elegido en el proceso de instalación y pulsamos en "Login":

Image


Y ya tendremos acceso a la consulta avanzada de los log generamos por nuestro servidor de syslog con Rsyslog desde LogAnalyzer:
Anexo
  • Si se produce el error: ERROR: At least one file or directory (or more) is not writeable, please check the file permissions (chmod 666)! al intentar instalar LogAnalyzer se deben revisar los permisos de la carpeta /var/www/loganalyzer, en concreto los de los ficheros configure.sh, secure.sh y config.php.
  • Si se produce algún error de falta de permisos para algún usuario de MySQL tal vez sea necesario asignarle permisos, una forma para hacerlo es desde la línea de comando de Linux, con los comandos:

mysql -u root -p

grant all privileges on Syslog.* to 'rsyslog'@'%' with grant option;

proximo tema... comprendiendo el archivo de configuración de rsyslog

No hay comentarios:

Publicar un comentario