dmesg inundado com logs de firewall

8

Nas minhas iptables, tenho uma regra que registra pacotes descartados:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7
-A INPUT -i eth0       -j   DROP

E /etc/rsyslog.conf, em , eu tenho outra regra que envia esses logs para um arquivo dedicado /var/log/firewall.log.

:msg, contains, "FW: "                    -/var/log/firewall.log
& ~

A & ~exclui os logs imediatamente, para que eles não inundar syslogou outros arquivos de log.

Isso funciona bem, exceto pelo fato de inundar dmesgcom esses logs do firewall ( /var/log/dmesgmas não com a saída do comando dmesg).

Existe uma maneira de impedir que esses logs sejam mostrados dmesg?

Martin Vegter
fonte
Qual é o sentido de registrar tudo, afinal?
0xC0000022L
1
Realmente não é uma boa idéia registrar todos os pacotes descartados. Melhor que eliminar os sintomas seria ser mais específico com sua regra de log. Por exemplo, não é muito sensato registrar todos os pacotes que não estão relacionados a nenhuma conexão e não fazem nada »especial« (como initação de conexão). Seria muito melhor reduzir isso para coisas relevantes como »O host A queria se conectar à porta B«. Potencialmente, o número de razões pelas quais um pacote é descartado é massivamente maior que o número de razões pelas quais você o descartaria por um motivo relevante .
Andreas Wiese
1
@ Andreas Wiese - Eu simplifiquei minha regra por causa desta questão. Minhas regras são mais sofisticadas e específicas. De qualquer forma, a questão é como evitar dmesginundações, não sobre regras de firewall.
Martin Vegter
Consulte também esta resposta sobre o daemon de log do Netfilter ulogd2. Foi assim que resolvi o problema.
mivk

Respostas:

4

Você pode usar o NFLOGdestino em vez de LOG:

NFLOG
    This target provides logging of matching packets. When this  target  is  set  for  a
    rule, the Linux kernel will pass the packet to the loaded logging backend to log the
    packet. This is usually used in combination with nfnetlink_log as  logging  backend,
    which  will multicast the packet through a netlink socket to the specified multicast
    group. One or more userspace processes may subscribe to the  group  to  receive  the
    packets.  Like  LOG, this is a non-terminating target, i.e. rule traversal continues
    at the next rule.

Tudo o que você precisa é de um nfnetlink_logprograma de registro capaz. As mensagens chegavam lá e o processo de espaço do usuário decidia se registraria o pacote ou não.

Outra coisa que você poderia tentar seria limitar a LOGregra a um limite específico:

-A INPUT -i eth0 -m limit --limit 10/minutes -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP

Isso registraria, em média, 10 pacotes por minuto. Obviamente, você pode ajustar isso de acordo com suas necessidades.

Andreas Wiese
fonte
Não consegui encontrar nenhuma informação sobre como configurar rsyslogpara registrar NFLOGpacotes. Eu preciso de alguma solução que funcione rsyslog.
Martin Vegter
2
@MartinVegter - O NFLOG funcionará com o rsyslog. Para o NFLOG, você usaria o ulogd (acho que o ulogd2 é necessário) como intermediário. Ele escutará no soquete netlink para obter os logs e entregá-los (conforme configurado) ao syslog. Se ulogd2 não estiver disponível, use ulogd (1.x) e o destino ULOG.
Christopher Cashell
0

Pode estar relacionado ao nível do log que você está usando no iptables. Pelo que entendi, os níveis de log da documentação do rsyslog são: "A prioridade é uma das seguintes palavras-chave, em ordem crescente: depuração, informações, aviso, aviso, aviso, aviso (o mesmo que aviso), err, erro (o mesmo que err), crítico, alerta, emergir, pânico (o mesmo que emergir) ". Que tal tentar especificar o nível de log no iptables usando seu nome, ou seja, 'notice'. Bem, serve-me bem para postar sem verificar, pois agora acho que não é esse o problema. Eu implementei um esquema semelhante ao descrito acima e recebo o mesmo problema. Meu kernel do centos 7 é a v3.10.0 e, aparentemente, desde a v3.5, parece que o log do kernel é feito usando / dev / kmsg e presumo que o dmesg de alguma forma obtenha sua entrada a partir daí.

VaughanR
fonte
0

Quando você tiver definido o nível de log como 7 com o comando:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7

Em seguida, você pode simplesmente filtrar essas mensagens, passando o limite de nível para o dmesg:

dmesg --level=err,warn
pico
fonte
-7

Por quê você se importa? dmesgé uma ferramenta de baixo nível para imprimir mensagens recentes do kernel, e você solicitou que o kernel registrasse pacotes descartados.

Configure o sistema syslog do sistema para registrar mensagens do iptables em um arquivo de log separado de outras mensagens do kernel e use os arquivos de log que ele grava em vez de dmesg.

Colin Phipps
fonte