Archivo de la etiqueta: portsentry

Reempaquetar el rpm de Portsentry para que loguee en su propio archivo

Desde hace mucho tiempo utilizo como media preventiva de seguridad el paquete Portsentry en los servidores para detectar potenciales accesos maliciosos y bloquearlos directamente en el firewall. El problema es que por defecto Portsentry deja sus logs en el archivo principal del sistema, /var/log/messages, lo que genera tal cantidad de ruido que es imposible encontrar algo útil en el log. El archivo donde loguea Portsentry no es configurable sino que viene predefinido en tiempo de compilación, con lo que deberemos recompilarlo si queremos que sea otro. Podríamos compilar e instalar el fuente directamente, pero no quiero perder las ventajas que ofrece rpm, veamos como hacerlo para Centos5.5 (o RHEL5.5).

Lo primero que debemos hacer es descargar e instalar el rpm con los fuentes desde aquí.

#rpm -ivh portsentry-1.2-1.te.src.rpm

Ahora debemos modificar el archivo donde se configura dónde logueará:

#cd /usr/src/redhat/SOURCES
#tar xvfz portsentry-1.2.tar.gz
#cd portsentry_beta

Editamos el archivo portsentry_config.h cambiando la línea 32 para que quede así:

#define SYSLOG_FACILITY LOG_LOCAL6

Con esto simplemente le decimos que loguee al “facility” local6 en vez de al “daemon” por defecto.

Se guarda el archivo y se empaqueta de nuevo:

#tar cvfz portsentry-1.2.tar.gz portsentry_beta

Ya podemos reconstruir el rpm:

#cd /usr/src/redhat/SPECS
#rpmbuild -ba portsentry.spec

Si todo va bien tendremos el paquete generado:

#cd /usr/src/redhat/RPMS/x86_64

Y ahí estará nuestro portsentry-1.2-1.te.x86_64.rpm preparado para loguear donde queremos que lo haga. Sólo queda instalarlo. Si tu arquitectura es de 32bits lo encontrarás en /usr/src/redhat/RPMS/i386.

Nos queda un detalle, configurar syslog para que guarde donde nos interesa la facility local6. Para eso editamos /etc/syslog.conf. Añadimos al final de todo la línea:

local6.*   /var/log/portsentry.log

y al principio de todo veremos algo parecido a:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

La cambiaremos por:

*.info;mail.none;authpriv.none;cron.none;local6.none    /var/log/messages

Es decir, le decimos que de local6 no loguee nada en /var/log/messages. Solo nos queda reiniciar los demonios:

#/sbin/service syslog restart
#/sbin/service portsentry start

A partir de ahora tendremos nuestro log general bien limpio y la información de se seguridad separada.