Как настроить файл syslog.conf для записи сообщений iptables в отдельный файл?

10

Как я могу настроить /etc/syslog.confфайл, чтобы сохранить информацию о журнале iptablesв определенном файле.

Я хочу сохранить эту информацию отдельно, чтобы я мог легко и быстро извлечь то, что я хочу.

Ставка
источник
Вы используете syslog.conf или rsyslog.conf?
SLM

Ответы:

13

системный журнал

Загляните в справочную страницу для iptables. Он показывает цель под названием, LOGкоторая может делать то, что вы хотите.

пример

  1. Установите уровень регистрации для LOG4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Настройте syslog.confзапись этих сообщений в отдельный файл.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. Перезапустите syslogd.

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

ПРИМЕЧАНИЕ. Этот метод регистрации называется фиксированными приоритетами. Это либо числа, либо имена (1,2,3,4, ..) или (DEBUG, WARN, INFO и т. Д.).

Rsyslog

Если случайно вы используете rsyslog, вы можете создать фильтр на основе свойств следующим образом:

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

Затем добавьте thils switch в ваши правила iptables, в которые вы хотите войти:

–log-prefix NETFILTER

В качестве альтернативы вы можете также регистрировать сообщения, используя этот тип фильтра свойств:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

ПРИМЕЧАНИЕ. Этот второй метод не требует каких-либо изменений iptables.

Ссылки

SLM
источник
В этом случае информация будет сохранена в, /var/log/iptablesа также в /var/log/messages. Я хочу только одну копию этих данныхiptables.log
Абид
1
Я добавил свой собственный ответ, чтобы также охватить вопрос Абида, плюс отсутствующий конфигурационный файл logrotate. "stop" или "& ~" не позволяют сообщениям продолжать работу по правилам rsyslog, чтобы они также попадали в / var / log / messages.
Питер
6

Это предполагает, что ваш брандмауэр уже делает журналы, как и любой нормальный брандмауэр. Для некоторых примеров это требует идентифицируемого сообщения, такого как «NETFILTER» в примере slm.

сделать файл в rsyslog.d

vim /etc/rsyslog.d/10-firewall.conf

Это работает в CentOS 7. Я не знаю, как проверить, что оно пришло с брандмауэра, кроме как искать IN и OUT ... CentOS странно. Не используйте это, если следующая версия не работает.

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Это работает в CentOS 7 и также проверяет содержимое сообщения (замените «Shorewall» тем, что есть в сообщении правила -j LOG):

# into separate file and stop their further processing
if  ($msg contains 'Shorewall') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Это работает в других (Ubuntu, Debian, openSUSE). И это лучший способ сделать это. Нет поиска строк в сообщении:

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

А вот то, что есть на машине openSUSE по умолчанию (которая, я думаю, должна присутствовать в каждом дистрибутиве и отсутствует) (разница, похоже, заключается только в «остановке» вместо «& ~»; не все системы поддерживают оба синтаксиса):

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

И для всего вышеперечисленного не забудьте также файл logrotate.d:

vim /etc/logrotate.d/firewall

содержащий:

/var/log/firewall {
    rotate 7
    size 500k
    postrotate
        # before using this, run the command yourself to make sure 
        # it is right... the daemon name may vary
        /usr/bin/killall -HUP rsyslogd
    endscript
}
Питер
источник