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

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

Como posso configurar /etc/syslog.confo arquivo para salvar informações de log iptablesem um arquivo específico.

Quero salvar essas informações separadamente, para poder extrair o que desejo com facilidade e rapidez.

Responder1

registro de sistema

Dê uma olhada na página de manual do iptables. Mostra um alvo chamado LOGque pode fazer o que você quiser.

Exemplo

  1. Defina o nível de registro como 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
    

OBSERVAÇÃO: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, poderá criar um filtro baseado em propriedades como este:

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

Em seguida, adicione esta opção à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
& ~

OBSERVAÇÃO:Este segundo método não requer nenhuma alteração no arquivo iptables.

Referências

Responder2

Isso pressupõe que seu firewall já faça logs, como qualquer firewall sensato deveria fazer. Para alguns exemplos, é necessária uma mensagem identificável, como "NETFILTER" no exemplo do 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 veio do firewall além de procurar IN e OUT... 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 você tiver na mensagem da sua 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. Não há busca 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 openSUSE padrão tem (que eu acho que toda distribuição deveria ter e está faltando) (a diferença parece ser apenas "stop" em vez de "& ~"; nem todos os sistemas suportam ambas as sintaxes):

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 também do 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
}

informação relacionada