Запись логов iptables в отдельный файл
Во время настройки правил 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 # [red]-A FORWARD -j LOG --log-prefix "iptables-filter-forward " --log-level 6[/red] # # Связь между внешней сетью 192.168.110.0/24 и внутренними (192.168.176.0/24 и 192.168.30.0/24) # # записываем в отдельный лог все пакеты таблицы filter, которые идут с интерфейса enp0s9 на интерфейс enp0s3 [red]-A FORWARD -s 192.168.176.0/24 -i enp0s9 -o enp0s3 -j LOG --log-prefix "from-enp0s9-to-enp0s3 " --log-level 6[/red] # разрешаем пакеты из сети 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 [red]-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[/red] # разрешаем пакеты из сети 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 ********** # ********************************* [grn]таблица nat пропущена, чтобы не загромождать листинг[/grn]
Красным веделены правила, которые записывают в лог-файлы пакеты:
- таблица
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 • Файервол
