¿Cómo puedo configurar el /etc/syslog.conf
archivo para guardar la información de registro iptables
en un archivo específico?
Quiero guardar esta información por separado, para poder extraer lo que quiero fácil y rápidamente.
¿Cómo puedo configurar el /etc/syslog.conf
archivo para guardar la información de registro iptables
en un archivo específico?
Quiero guardar esta información por separado, para poder extraer lo que quiero fácil y rápidamente.
Respuestas:
Echa un vistazo en la página del manual para iptables
. Muestra un objetivo llamado LOG
que puede hacer lo que quieras.
Establezca el nivel de registro para LOG
4.
# DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP
Configure syslog.conf
para escribir estos mensajes en un archivo separado.
# /etc/syslog.conf
kern.warning /var/log/iptables.log
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 (DEPURACIÓN, ADVERTENCIA, INFORMACIÓN, etc.).
Si por casualidad lo está utilizando rsyslog
, puede crear un filtro basado en propiedades de esta manera:
# /etc/rsyslog.conf
:msg, contains, "NETFILTER" /var/log/iptables.log
:msg, contains, "NETFILTER" ~
A continuación, agregue el interruptor a sus reglas de iptables que desea registrar:
–log-prefix NETFILTER
Como alternativa, también puede registrar los mensajes utilizando este tipo de filtro de propiedades:
: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
.
/var/log/iptables
y también en /var/log/messages
. Solo quiero una copia de estos datos eniptables.log
Esto supone que su cortafuegos ya crea registros, como debería hacerlo cualquier cortafuego sano. Para algunos ejemplos, requiere un mensaje identificable, como "NETFILTER" en el ejemplo de slm.
hacer 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, aparte de buscar IN y OUT ... CentOS es extraño. 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 para todo lo anterior, no olvide un archivo logrotate.d también:
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
}