Помощь в настройке настраиваемого файла журнала для iptables

Я пытаюсь зарегистрировать упавшие пакеты в пользовательский файл вместо /var/log/messages .

Чтобы достичь этого, я добавил эти две строки в конце моего файла конфигурации:

  -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 

Это работает, потому что я настроил цепочки INPUT и OUTPUT как DROP по умолчанию, поэтому, если пакет не соответствует предыдущему правилу, он будет зарегистрирован и удален.

Однако я не могу зарегистрировать их в пользовательском файле. Они успешно записываются в /var/log/messages , но я хочу, чтобы они вошли в /var/log/iptables.log . Я создал файл /etc/rsyslog.d/iptables.conf со следующим содержимым:

  :msg, contains, "IPTables-INPUT-Dropped: " - /var/log/iptables.log & ~ 

то я перезапустил rsyslog, /etc/init.d/rsyslog restart и отправил некоторые пакеты, которые, как я знал, будут удалены. Однако они не вошли в iptables.log, они все еще записываются в /var/log/messages .

Какая конфигурация отсутствует?

SOLVED Проблема заключается в том, что между и /

Проблема в том, что между – и /

Это альтернативный подход с использованием ulogd . Я бы предложил этот механизм, поскольку он останавливает механизм каротажа ядра -m LOG использует -m LOG (который имеет тяжелый побочный эффект заполнения вашего dmesg журнала).

Сначала вам понадобится ulogd, который вы можете получить с помощью apt-get install ulogd . Измените свой /etc/ulogd.conf , включите этот модуль (удалив # в начале строки):

 plugin="/usr/lib/ulogd/ulogd_LOGEMU.so" 

и измените / добавьте раздел [LOGEMU] :

 [LOGEMU] file="/var/log/iptables.log" sync=1 

Затем перезагрузите ваш ulogd /etc/init.d/ulogd restart . Затем вместо -j LOG используйте -j ULOG для правил iptables. Модуль ULOG не имеет понятия уровня --log-level поэтому вы можете удалить эти параметры. Он также использует --ulog-prefix вместо --log-prefix .

Это можно сделать, используя:

Чтобы отключить журналы iptables в syslog, выполните модификацию, как /etc/rsyslog.d/50-default.conf ниже в /etc/rsyslog.d/50-default.conf :

 *.*;auth,authpriv.none;kern.*=!kern.warning -/var/log/syslog 

Для входа в отдельный файл; добавить:

 kern.=warning -/var/log/iptables.log 

затем перезапустите syslog или rsyslog и rsyslog журналы

 /etc/init.d/rsyslog restart 

Он работает в syslog и rsyslog также

FYI:

& ~ устарел в новом rsyslog, вместо этого вы должны использовать 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 } 

Примечание. Я устанавливаю префикс в 10-, чтобы поймать его, прежде чем он достигнет правил по умолчанию (50-умолчанию).