Como posso configurar o /etc/syslog.confarquivo para salvar informações de log iptablesem um arquivo específico.
Quero salvar essas informações separadamente, para poder extrair o que quero com facilidade e rapidez.
Como posso configurar o /etc/syslog.confarquivo para salvar informações de log iptablesem um arquivo específico.
Quero salvar essas informações separadamente, para poder extrair o que quero com facilidade e rapidez.
Respostas:
Dê uma olhada na página de manual para iptables. Ele mostra um destino chamado LOGque pode fazer o que você deseja.
Defina o nível de log para LOG4.
# DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP
Configure syslog.confpara gravar essas mensagens em um arquivo separado.
# /etc/syslog.conf
kern.warning /var/log/iptables.log
Reinicie o syslogd.
Debian / Ubuntu
$ sudo /etc/init.d/sysklogd restart
Fedora / CentOS / RHEL
$ sudo /etc/init.d/syslog restart
NOTA: Esse método de registro é chamado de prioridades fixas. Eles são números ou nomes (1,2,3,4, ..) ou (DEBUG, WARN, INFO etc.).
Se por acaso você estiver usando rsyslog, poderá criar um filtro com base em propriedades da seguinte forma:
# /etc/rsyslog.conf
:msg, contains, "NETFILTER" /var/log/iptables.log
:msg, contains, "NETFILTER" ~
Em seguida, adicione o switch thils às regras do iptables que você deseja registrar:
–log-prefix NETFILTER
Como alternativa, você também pode registrar as mensagens usando este tipo de filtro de propriedade:
:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~
NOTA: Este segundo método não requer nenhuma alteração iptables.
/var/log/iptablese também em /var/log/messages. Eu quero apenas uma cópia desses dados emiptables.log
Isso pressupõe que o seu firewall já cria logs, como qualquer firewall sensato. Para alguns exemplos, ele requer uma mensagem identificável, como "NETFILTER" no exemplo de slm.
crie um arquivo em rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Isso funciona no CentOS 7. Não sei como verificar se ele veio do firewall, além de procurar IN e OUT ... O CentOS é estranho. Não use isso, a menos que a próxima versão não funcione.
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Isso funciona no CentOS 7 e verifica também o conteúdo da mensagem (substitua "Shorewall" pelo que você tiver na mensagem da regra -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
& ~
}
Isso funciona em outros (Ubuntu, Debian, openSUSE). E esta é a melhor maneira de fazê-lo. Nenhuma pesquisa por seqüências de caracteres na mensagem:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
E aqui está o que uma máquina openSUSE padrão possui (que eu acho que toda distribuição deve ter e está faltando) (a diferença parece ser apenas "parar" em vez de "& ~"; nem todos os sistemas suportam as duas sintaxes):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
E para todas as opções acima, não esqueça também o arquivo logrotate.d:
vim /etc/logrotate.d/firewall
contendo:
/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
}