O problema é que não deve haver um espaço entre - e /
Estou tentando registrar pacotes perdidos em um arquivo personalizado em vez de /var/log/messages
.
Para conseguir isso, adicionei essas duas linhas no final do meu arquivo de configuração:
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4
-A OUTPUT -m limit --limit 5/min -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
Isso funciona porque eu configurei as cadeias INPUT e OUTPUT como DROP por padrão, portanto, se o pacote não atender a nenhuma regra anterior, ele será registrado e descartado.
No entanto, não consigo registrá-los em um arquivo personalizado. Eles logam com sucesso em /var/log/messages
, mas eu quero que eles estejam logados em /var/log/iptables.log
. Eu criei o arquivo /etc/rsyslog.d/iptables.conf
com o seguinte conteúdo:
:msg, contains, "IPTables-INPUT-Dropped: " - /var/log/iptables.log
& ~
então reiniciei o rsyslog, /etc/init.d/rsyslog restart
e enviei alguns pacotes que eu sabia que iam ser descartados. No entanto, eles não estão logados no iptables.log, eles ainda estão sendo registrados em /var/log/messages
.
Qual configuração está faltando?
RESOLVIDO O problema é que não deve haver um espaço entre - e /
Esta é uma abordagem alternativa usando ulogd
. Eu sugeriria esse mecanismo, pois ele para o mecanismo de registro do kernel -m LOG
uses (que tem o efeito colateral de preencher seu log dmesg
).
Primeiro, você precisará do ulogd, que pode ser obtido com um apt-get install ulogd
. Edite seu /etc/ulogd.conf
, ative este módulo (removendo #
no início da linha):
plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
e altere / adicione a seção [LOGEMU]
:
[LOGEMU]
file="/var/log/iptables.log"
sync=1
E, em seguida, reinicie seu ulogd com /etc/init.d/ulogd restart
. Então, em vez de -j LOG
use -j ULOG
em suas regras do iptables. O módulo ULOG não tem nenhum conceito de --log-level
, portanto você pode remover essas opções. Ele também usa --ulog-prefix
em vez de --log-prefix
.
Isso pode ser possível usando:
Para desabilitar os logs do iptables no syslog, faça as modificações abaixo em /etc/rsyslog.d/50-default.conf
:
*.*;auth,authpriv.none;kern.*=!kern.warning -/var/log/syslog
Para efetuar login no arquivo separado; acrescentar:
kern.=warning -/var/log/iptables.log
depois, reinicie syslog
ou rsyslog
e tail
os registros
/etc/init.d/rsyslog restart
Funciona em syslog
e rsyslog
também
FYI:
& ~
está obsoleto no novo rsyslog, você deve usar stop
.
/etc/rsyslog.d/10-iptables
if ( $msg contains 'IN=' and $msg contains 'OUT=' )
then {
/var/log/10-iptables.log
stop
}
/etc/logrotate.d/iptables
/var/log/iptables.log
{
rotate 30
daily
missingok
notifempty
delaycompress
postrotate
service rsyslog rotate > /dev/null
endscript
}
Note que eu defino o prefixo para 10- para pegá-lo antes que ele atinja as regras padrão (padrões de 50).