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

10

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.

Uma aposta
fonte
Você está usando syslog.conf ou rsyslog.conf?
slm

Respostas:

13

syslog

Dê uma olhada na página de manual para iptables. Ele mostra um destino chamado LOGque pode fazer o que você deseja.

Exemplo

  1. 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
    
  2. Configure syslog.confpara 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: 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.).

rsyslog

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.

Referências

slm
fonte
Nesse caso, as informações serão salvas em /var/log/iptablese também em /var/log/messages. Eu quero apenas uma cópia desses dados emiptables.log
Abid
1
Eu adicionei minha própria resposta para cobrir também a pergunta de Abid, além da configuração de logrotate ausente. o "stop" ou "& ~" impede que as mensagens continuem nas regras do rsyslog para acessar também / var / log / messages.
Peter
6

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
}
Peter
fonte