главная - Статьи - Linux, FreeBSD
Лог iptables в отдельный файл в CentOS 7
В CentOS и других современных Linux по-умолчанию логи iptables пишутся в /var/log/messages. Это не всегда удобно. Если логирование включено на постоянной основе, то лог iptables способен за минуты полностью задавить все остальные сведения. В такой ситуации может быть необходимым вынести лог iptables в отдельный файл, например, /var/log/iptables.log.
Лог-файл IPTABLES
В CentOS 7 логи управляются с помощью rsyslog (конфиги /etc/rsyslog.conf, /etc/rsyslog.d/*.conf).
Предположим, мы хотим логировать в файл /var/log/iptables.log попытки соединения с портом 1234/tcp и 53/udp.
Для этого среди прочих наших правил iptables должны быть правила с действием LOG, например, такие:
--A INPUT -i eth0 -p tcp -m tcp --dport 1234 -j LOG --log-prefix --1234--LOG--
--A INPUT -i eth0 -p udp -m udp --dport 53 -j LOG --log-prefix --UDP--LOG--
Правила LOG должны быть ДО принятия решения (ACCEPT, DROP, REJECT, FORWARD). Иначе нужный нам пакет просто не дойдет до правила с LOG.
В директории /etc/rsyslog.d/ создадим отдельный файл конфига с фильтрами, которые будут понимать, какие именно пакеты от ядра надо сохранить в лог-файл iptables.log:
# touch /etc/rsyslog.d/iptables.conf # nano /etc/rsyslog.d/iptables.conf :msg, contains, "--1234--LOG--" -/var/log/iptables.log & stop :msg, contains, "--UDP--LOG--" -/var/log/iptables.log & stop # systemctl restart rsyslog.service
Проверяем, должно работать.
Logrotate
Чтобы лог-файл /var/log/iptables.log не рос бесконечно в размере, необходимо настроить его ротацию, по аналогии с другими лог-файлами.
Logrotate выполняется ежедневно по расписанию cron (/etc/cron.daily/logrotate) используя конфиг /etc/logrotate.conf и конфиги из директории /etc/logrotate.d, если они есть.
Создадим файл /etc/logrotate.d/iptables:
/var/log/iptables.log { missingok notifempty rotate 5 size 300k create 0600 root root postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
Проверить работу можно принудительно, не дожидаясь увеличения размера лога:
# logrotate -v /etc/logrotate.d/iptables reading config file /etc/logrotate.d/iptables Allocating hash table for state file, size 15360 B Handling 1 logs rotating pattern: /var/log/iptables.log 307200 bytes (5 rotations) empty log files are not rotated, old logs are removed considering log /var/log/iptables.log log does not need rotating (log size is below the 'size' threshold)
Если перевести, то "судя по настройкам из /etc/logrotate.d/iptables, ротацию надо делать логу /var/log/iptables.log при достижении размера 307200 байт, держать 5 ротаций лога, пустой файл не ротировать, а старые удалять. Конкретно сейчас лог /var/log/iptables.log не нуждается в ротации, поскольку его размер меньше порога size".
В man logrotate предлагается пример:
/var/log/messages { rotate 5 weekly postrotate /usr/bin/killall -HUP syslogd endscript }
Выбирайте на здоровье! Все.
Авторизуйтесь для добавления комментариев!