No meu 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
tenho outra regra que envia esses logs para um arquivo dedicado /var/log/firewall.log
.
:msg, contains, "FW: " -/var/log/firewall.log
& ~
Exclui & ~
os logs imediatamente, para que eles não inundem syslog
outros arquivos de log.
Isso funciona bem, exceto que inunda dmesg
os logs do firewall (não /var/log/dmesg
mas a saída de command dmesg
).
Existe uma maneira de evitar que esses logs sejam mostrados dmesg
?
Responder1
Você poderia usar o NFLOG
alvo 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 que você precisa é de um nfnetlink_log
programa de registro capaz. As mensagens iriam para lá e o processo do espaço do usuário decidiria se registraria o pacote ou não.
Outra coisa que você poderia tentar seria limitar a LOG
regra 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. É claro que você pode ajustar isso de acordo com suas necessidades.
Responder2
Depois de definir o nível de log como 7 com o comando:
-A INPUT -i eth0 -j LOG --log-prefix "FW: " --log-level 7
Então você pode simplesmente filtrar essas mensagens passando o limite de nível para o dmesg:
dmesg --level=err,warn
Responder3
Pode estar relacionado ao nível de log que você está usando no iptables. Pelo que entendi nos níveis de log da documentação do rsyslog são: "A prioridade é uma das seguintes palavras-chave, em ordem crescente: debug, info, warning, warning, warning (o mesmo que warning), err, error (o mesmo que err), crítico, alerta, emerg, pânico (o mesmo que emerg)." Que tal tentar especificar o nível de log no iptables usando seu nome, ou seja, 'aviso'. Bem, é justo postar sem verificar, pois agora acho que esse não é o problema. Implementei um esquema semelhante ao descrito acima e recebo o mesmo problema. Meu kernel do centos 7 é 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 obtém sua entrada a partir daí.
Responder4
Por quê você se importa? dmesg
é uma ferramenta de baixo nível para imprimir mensagens recentes do kernel, e você pediu ao kernel para registrar pacotes descartados.
Configure o sistema syslog do seu sistema para registrar mensagens 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
.