Запись логов 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 # -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 • Файервол