Запись логов iptables в отдельный файл

15.03.2020

Теги: LinuxUbuntuКонфигурацияНастройкаОтладкаТаблица

Во время настройки правил iptables очень часто возникает необходимость посмотреть, какие из пакетов прошли, а какие были отброшены. Для этого надо добавить правила с действием LOG и настроить rsyslog, чтобы записывать пакеты в отдельный лог-файл для дальнейшего анализа.

Рассмотрим все подробно на примере маршрутизатора, который обеспечивает выход в интернет для компьютеров двух подсетей. О настройке маршрутизатора можно прочитать здесь. Сначала создаем файл /etc/rsyslog.d/10-iptables.conf:

$ sudo nano /etc/rsyslog.d/10-iptables.conf
:msg,contains,"iptables-filter-forward" /var/log/iptables-filter-forward.log
:msg,contains,"from-enp0s9-to-enp0s3" /var/log/from-enp0s9-to-enp0s3.log
:msg,contains,"from-enp0s9-to-enp0s8" /var/log/from-enp0s9-to-enp0s8.log

Первая строка говорит rsyslog, что нужно искать сообщения, содержащие «iptables-filter-forward» и записывать такие сообщения в файл iptables-filter-forward.log. Чтобы изменения вступили в силу — перезагружаем службу rsyslog:

$ sudo systemctl restart rsyslog.service

Добавлять правила с действием LOG с помощью утилиты iptables долго и хлопотно. Поэтому упростим себе жизнь — скопируем текущие правила в отдельный файл и будем редактировать его. А после редактирования — загружать исправленные правила утилитой iptables-restore.

$ sudo cp /etc/iptables/rules.v4 /etc/iptables.rules
$ sudo nano /etc/iptables.rules
# ************************************
# ********** Таблица filter **********
# ************************************
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
#
# записываем все пакеты таблицы filter цепочки FORWARD в лог-файл /var/log/iptables-filter-forward.log
#
-A FORWARD -j LOG --log-prefix "iptables-filter-forward " --log-level 6
#
# Связь между внешней сетью 192.168.110.0/24 и внутренними (192.168.176.0/24 и 192.168.30.0/24)
#
# записываем в отдельный лог все пакеты таблицы filter, которые идут с интерфейса enp0s9 на интерфейс enp0s3
-A FORWARD -s 192.168.176.0/24 -i enp0s9 -o enp0s3 -j LOG --log-prefix "from-enp0s9-to-enp0s3 " --log-level 6
# разрешаем пакеты из сети 192.168.176.0/24 в сеть 192.168.110.0/24 (с интерфейса enp0s9 на интерфейс enp0s3)
-A FORWARD -s 192.168.176.0/24 -i enp0s9 -o enp0s3 -j ACCEPT
# разрешаем пакеты из сети 192.168.110.0/24 в сеть 192.168.176.0/24 (с интерфейса enp0s3 на интерфейс enp0s9)
-A FORWARD -d 192.168.176.0/24 -i enp0s3 -o enp0s9 -j ACCEPT
# разрешаем пакеты из сети 192.168.30.0/24 в сеть 192.168.110.0/24 (с интерфейса enp0s8 на интерфейс enp0s3)
-A FORWARD -s 192.168.30.0/24 -i enp0s8 -o enp0s3 -j ACCEPT
# разрешаем пакеты из сети 192.168.110.0/24 в сеть 192.168.30.0/24 (с интерфейса enp0s3 на интерфейс enp0s8)
-A FORWARD -d 192.168.30.0/24 -i enp0s3 -o enp0s8 -j ACCEPT
#
# Связь между двумя внутренними сетями 192.168.176.0/24 и 192.168.30.0/24
#
# записываем в отдельный лог все пакеты таблицы filter, которые идут с интерфейса enp0s9 на интерфейс enp0s8
-A FORWARD -s 192.168.176.0/24 -d 192.168.30.0/24 -i enp0s9 -o enp0s8 -j LOG --log-prefix "from-enp0s9-to-enp0s8 " --log-level 6
# разрешаем пакеты из сети 192.168.176.0/24 в сеть 192.168.30.0/24 (с интерфейса unp0s9 на интерфейс enp0s8)
-A FORWARD -s 192.168.176.0/24 -d 192.168.30.0/24 -i enp0s9 -o enp0s8 -j ACCEPT
# разрешаем пакеты из сети 192.168.30.0/24 в сеть 192.168.176.0/24 (с интерфейса unp0s8 на интерфейс enp0s9)
-A FORWARD -s 192.168.30.0/24 -d 192.168.176.0/24 -i enp0s8 -o enp0s9 -j ACCEPT
COMMIT
# *********************************
# ********** Таблица nat **********
# *********************************
таблица nat пропущена, чтобы не загромождать листинг

Красным веделены правила, которые записывают в лог-файлы пакеты:

  • таблица filter, цепочка FORWARD, все пакеты, лог-файл /var/log/iptables-filter-forward.log
  • таблица filter, цепочка FORWARD, с enp0s9 на enp0s3, лог-файл /var/log/from-enp0s9-to-enp0s3.log
  • таблица filter, цепочка FORWARD, с enp0s9 на enp0s8, лог-файл /var/log/from-enp0s9-to-enp0s8.log

Новые правила добавлены, осталось их загрузить:

$ sudo iptables-restore < /etc/iptables.rules

Теперь проверим, как это работает. С виртуальной машины pc-1 выполняем команду:

$ ping -c 1 ya.ru

И смотрим файл логов /var/log/from-enp0s9-to-enp0s3.log:

$ cat /var/log/from-enp0s9-to-enp0s3.log
Mar 15 12:18:46 router kernel: [11329.516498] from-enp0s9-to-enp0s3 IN=enp0s9 OUT=enp0s3 MAC=08:00:27:df:e0:96:08:00:27:e1:23:4b:08:00 SRC=192.168.176.4 DST=8.8.8.8 LEN=62 TOS=0x00 PREC=0x00 TTL=63 ID=62689 DF PROTO=UDP SPT=44611 DPT=53 LEN=42
Mar 15 12:18:46 router kernel: [11329.516643] from-enp0s9-to-enp0s3 IN=enp0s9 OUT=enp0s3 MAC=08:00:27:df:e0:96:08:00:27:e1:23:4b:08:00 SRC=192.168.176.4 DST=8.8.8.8 LEN=62 TOS=0x00 PREC=0x00 TTL=63 ID=62690 DF PROTO=UDP SPT=47389 DPT=53 LEN=42
Mar 15 12:18:46 router kernel: [11329.536823] from-enp0s9-to-enp0s3 IN=enp0s9 OUT=enp0s3 MAC=08:00:27:df:e0:96:08:00:27:e1:23:4b:08:00 SRC=192.168.176.4 DST=87.250.250.242 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9452 DF PROTO=ICMP TYPE=8 CODE=0 ID=1516 SEQ=1

Для удобства оставим лишь часть полей:

$ awk '{print $8 " " $9 " " $11 " " $12 " " $19 " " $20 " " $21}' /var/log/from-enp0s9-to-enp0s3.log
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=8.8.8.8 PROTO=UDP SPT=44611 DPT=53
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=8.8.8.8 PROTO=UDP SPT=47389 DPT=53
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=87.250.250.242 PROTO=ICMP TYPE=8 CODE=0

Был выполнен запрос на DNS-сервер 8.8.8.8, потом отработал ping на 87.250.250.242.

Теперь посмотрим, что в файле /var/log/iptables-filter-forward.log:

$ awk '{print $8 " " $9 " " $11 " " $12 " " $19 " " $20 " " $21}' /var/log/iptables-filter-forward.log
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=8.8.8.8 PROTO=UDP SPT=44611 DPT=53
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=8.8.8.8 PROTO=UDP SPT=47389 DPT=53
IN=enp0s3 OUT=enp0s9 SRC=8.8.8.8 DST=192.168.176.4 SPT=53 DPT=47389 LEN=70
IN=enp0s3 OUT=enp0s9 SRC=8.8.8.8 DST=192.168.176.4 SPT=53 DPT=44611 LEN=58
IN=enp0s9 OUT=enp0s3 SRC=192.168.176.4 DST=87.250.250.242 PROTO=ICMP TYPE=8 CODE=0
IN=enp0s3 OUT=enp0s9 SRC=87.250.250.242 DST=192.168.176.4 TYPE=0 CODE=0 ID=1516

Был выполнен запрос на DNS-сервер 8.8.8.8, получен ответ на запрос, потом отработал ping на 87.250.250.242, получен ответ на ping.

Когда все правила работают правильно, удаляем те из них, которые отвечают за логирование. И копируем правила туда, откуда взяли их изначально:

$ sudo iptables-restore < /etc/iptables.rules
$ sudo iptables-save > /etc/iptables/rules.v4

И надо удалить файл конфигурации /etc/rsyslog.d/10-iptables.conf:

$ sudo rm /etc/rsyslog.d/10-iptables.conf
$ sudo systemctl restart rsyslog.service

Поиск: Linux • Ubuntu • Конфигурация • Настройка • Отладка • Таблица • Цепочка • Правило • iptables • Файервол

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.