Як я можу налаштувати файл syslog.conf, щоб реєструвати iptables повідомлення в окремий файл?


10

Як я можу налаштувати /etc/syslog.confфайл, щоб зберегти інформацію про журнал iptablesу певному файлі.

Я хочу зберегти цю інформацію окремо, щоб я міг легко і швидко витягувати те, що хочу.


Використовуєте syslog.conf або rsyslog.conf?
slm

Відповіді:


13

syslog

Погляньте на сторінку man для iptables. Він показує ціль, яку називають, LOGяка може робити те, що ви хочете.

Приклад

  1. Встановіть рівень журналу LOGна 4.

    # 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 до правил iptables, які ви бажаєте увійти:

–log-prefix NETFILTER

Як альтернативу, ви також можете записати повідомлення за допомогою цього типу фільтра властивостей:

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

ПРИМІТКА. Цей 2-й метод не потребує змін iptables.

Список літератури


У цьому випадку інфорамкація буде збережена в, /var/log/iptablesа також в /var/log/messages. Я хочу лише одну копію цих даних уiptables.log
Абід

1
Я додав власну відповідь, щоб також висвітлити питання Абіда, а також пропущений конфігурат logrotate. "стоп" або "& ~" заважає повідомленням продовжувати правила rsyslog також потрапляти до / var / log / повідомлень.
Петро

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
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.