¿Cómo puedo configurar el archivo syslog.conf para registrar mensajes de iptables en un archivo separado?

¿Cómo puedo configurar el archivo syslog.conf para registrar mensajes de iptables en un archivo separado?

¿Cómo puedo configurar /etc/syslog.confel archivo para guardar la información de registro iptablesen un archivo específico?

Quiero guardar esta información por separado, para poder extraer lo que quiero fácil y rápidamente.

Respuesta1

registro del sistema

Eche un vistazo a la página de manual para iptables. Muestra un objetivo llamado LOGque puede hacer lo que quieras.

Ejemplo

  1. Establezca el nivel de registro en LOG4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Configure syslog.confpara escribir estos mensajes en un archivo separado.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. Reinicie syslogd.

    Debian/Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora/CentOS/RHEL

    $ sudo /etc/init.d/syslog restart
    

NOTA:Este método de registro se denomina prioridades fijas. Son números o nombres (1,2,3,4,...) o (DEBUG, WARN, INFO, etc.).

rsyslog

Si por casualidad estás usando rsyslog, puedes crear un filtro basado en propiedades como este:

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

Luego agregue este cambio a las reglas de iptables que desea registrar:

–log-prefix NETFILTER

Como alternativa, también puedes registrar los mensajes usando este tipo de filtro de propiedad:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

NOTA:Este segundo método no requiere ningún cambio en iptables.

Referencias

Respuesta2

Esto supone que su firewall ya genera registros, como debería hacerlo cualquier firewall en su sano juicio. Para algunos ejemplos, requiere un mensaje identificable, como "NETFILTER" en el ejemplo de slm.

crear un archivo en rsyslog.d

vim /etc/rsyslog.d/10-firewall.conf

Esto funciona en CentOS 7. No sé cómo verificar que proviene del firewall además de buscar ENTRADA y SALIDA... CentOS es raro. No use esto a menos que la próxima versión no funcione.

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Esto funciona en CentOS 7 y también verifica el contenido del mensaje (reemplace "Shorewall" con lo que tenga en el mensaje de su regla -j LOG):

# into separate file and stop their further processing
if  ($msg contains 'Shorewall') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Esto funciona en otros (Ubuntu, Debian, openSUSE). Y esta es la mejor manera de hacerlo. No buscar cadenas en el mensaje:

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

Y esto es lo que tiene una máquina openSUSE predeterminada (que creo que todas las distribuciones deberían tener y falta) (la diferencia parece ser solo "detener" en lugar de "& ~"; no todos los sistemas admiten ambas sintaxis):

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

Y por todo lo anterior, no olvides también el archivo logrotate.d:

vim /etc/logrotate.d/firewall

que contiene:

/var/log/firewall {
    rotate 7
    size 500k
    postrotate
        # before using this, run the command yourself to make sure 
        # it is right... the daemon name may vary
        /usr/bin/killall -HUP rsyslogd
    endscript
}

información relacionada