Como posso configurar o arquivo syslog.conf, para registrar mensagens do iptables em um arquivo separado?

10

Como posso configurar o arquivo /etc/syslog.conf para salvar informações de log sobre iptables em um arquivo específico.

Eu quero salvar essas informações separadamente, para que eu possa extrair o que eu quero com facilidade e rapidez.

    
por Abid 17.10.2013 / 16:15

2 respostas

12

syslog

Dê uma olhada na página man de iptables . Ele mostra um alvo chamado LOG , que pode fazer o que você quiser.

Exemplo

  1. Defina o nível de registro para LOG para 4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Configure syslog.conf para gravar essas mensagens em um arquivo separado.

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

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

NOTA: Este método de registro é chamado de prioridades fixas. Eles são números ou nomes (1,2,3,4, ..) ou (DEBUG, WARN, INFO, etc.).

rsyslog

Se por acaso você estiver usando rsyslog , você pode criar um filtro baseado em propriedade da seguinte forma:

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

Em seguida, adicione o thils à sua lista de regras do iptables que você deseja registrar:

–log-prefix NETFILTER

Como alternativa, você também pode registrar as mensagens usando esse tipo de filtro de propriedade:

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

OBSERVAÇÃO: Este segundo método não exige alterações em iptables .

Referências

por 17.10.2013 / 17:07
6

Isso pressupõe que seu firewall já faça logs, como qualquer firewall sano deveria fazer. Para alguns exemplos, é necessária uma mensagem identificável, como "NETFILTER" no exemplo de slm.

crie um arquivo no rsyslog.d

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

Isso funciona no CentOS 7. Não sei como verificar se 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 também verifica o conteúdo da mensagem (substitua "Shorewall" pelo que 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 fazer isso. Nenhuma pesquisa por strings 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 padrão do openSUSE tem (o que eu acho que toda distro deveria ter e está faltando) (a diferença parece ser apenas "parar" ao invés de "& ~"; nem todos os sistemas suportam ambas as sintaxes): / p>

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

E para todos os itens acima, não se esqueça do arquivo logrotate.d também:

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
}
    
por 09.01.2015 / 15:51