Решил добить проблему спама iptables’ом отброшенными пакетами системных логов. Логи сами по себе полезны (правда, стоит провести реорганизацию), но разрастаются до совсем уж неприличных размеров.
Собственно, разрастание я давно решил через rsyslog.conf следующими параметрами:
:msg, contains, "ED IN=" -/var/log/iptables.log
# stop processing the messages
& ~
Т.е., отлавливаем все сообщения с нужной строкой (а под нее попадают всякие там “DROPPED IN=eth0”, “ABORTED IN=br0” и так далее – добавить сразу метку к сообщениям я не догадался, а потом так и повелось), пишем в нужный файл и дальше эти сообщения уже нигде не фигурируют (то самое & ~). Плюс стоит в /etc/logrotate.d/rsyslog добавить путь к /var/log/iptables.log, чтобы происходила ротация по мере роста лога.
Все бы хорошо, но вывод dmesg все равно забит и через несколько минут работы системы глянуть сообщения ядра с начала загрузки уже нельзя.
Причина, в общем-то, логична – iptables часть ядра и данные сообщения тоже идут от ядра. Никакая регулировка уровня, на котором эти сообщения будут отображаться, не поможет – буфер-то уже ими забит.
Решение – переход на NFLOG, что оказалось весьма просто. Ставим ulogd2 – это процесс, который висит в юзерспейсе и работает с логами; плюс меняем правила таким образом:
"${ipt}" -A logdrop2 -j NFLOG --nflog-prefix "IPTABLES:DROPPED"
#"${ipt}" -A logdrop2 -j LOG --log-prefix "IPTABLES:DROPPED " --log-level debug --log-ip-options --log-tcp-options --log-tcp-sequence
Т.е., у нас больше нет log level’а; плюс не нужно писать опции для пакетов (оно и так их пишет), а опция префикса чуть поменялась. В остальном – все осталось так же, только логи iptables’а теперь в /var/log/ulog/syslogemu.log – не забываем проверить logrotate.