Поднимал site-to-site IPsec и некоторое время не мог понять, как настроить фаирвол. Нагуглить как-то сходу ничего не удалось, а заставить IPsec было надо и я решил выяснить какой конкретно трафик ходит и что необходимо разрешить.
Для этого я добавил в фаирвол ряд правил, которые логировали проходящие пакеты, затем, насобирав, достаточно трафика стал добавлять правила в фаирвол и так добился устойчивой работы IPsec.
Вот так выглядят правила для iptables:
# Зачищаем все таблицы
iptables -X
iptables -F
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Разрешаем прохождение всего трафика
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Правила необходимые для отладки. Что бы не загромождать лог лишними пакетами логировать будем только тот трафик что относиться к IPsec туннелю, для этого четко пропишем, что нас интересует только трафик с IP 213.130.224.146 который является сервером
iptables -A INPUT -s 213.130.224.146 -j LOG --log-level 7 --log-prefix "Firewall: INPUT "
iptables -A INPUT -d 213.130.224.146 -j LOG --log-level 7 --log-prefix "Firewall: INPUT "
# Тоже самое для цепочки OUTPUT
iptables -A OUTPUT -d 213.130.224.146 -j LOG --log-level 7 --log-prefix "Firewall: OUTPUT "
iptables -A OUTPUT -s 213.130.224.146 -j LOG --log-level 7 --log-prefix "Firewall: OUTPUT "
# В цепочку FORWARD добавим правила логирующие трафик проходящий между объединёнными сетями
# С одной стороны
iptables -A FORWARD -s 192.168.88.0/24 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -d 192.168.88.0/24 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
# И с другой стороны
iptables -A FORWARD -s 192.168.20.0/22 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -d 192.168.20.0/22 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -s 10.0.0.0/8 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -d 10.0.0.0/8 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -s 172.22.0.0/16 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
iptables -A FORWARD -d 172.22.0.0/16 -j LOG --log-level 7 --log-prefix "Firewall: FORWARD "
Ок. Теперь в /var/log/syslog будут добавляться записи каждый раз, когда, так или иначе относящийся к IPsec туннелю будет проходить через роутер. Но хотелось бы избавиться от прочих записей, которые тоже добавляются в /var/log/syslog, для этого создадим файл /etc/rsyslog.d/iptables.conf (я использую rsyslog) и наполнить его следующим содержимым:
:msg, contains, "Firewall: " /var/log/iptables.log
& ~
Создадим собственно лог sudo touch /var/log/iptaes.log
Сделаем владельцем этого файла пользователя syslog sudo chown syslog:adm /var/log/iptaes.log
Перезапустим демона sudo service rsyslog stop && sudo service rsyslog start
В общем всё. Теперь если rsyslog увидит, запись содержащую “Firewall: ” он запишет её в отдельный файл.
Теперь открываем ещё одно окно терминала, вводим tail -F /var/log/iptables.log и наблюдаем, какие пакеты и на какие порты приходят, затем делаем выводы и пишем правила.
Лог выглядит как-то так:
Sep 2 10:05:06 work kernel: [ 4789.908355] Firewall: OUTPUT IN= OUT=eth0 SRC=213.130.254.2 DST=213.130.224.146 LEN=120 TOS=0x00 PREC=0x00 TTL=64 ID=59889 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:05:06 work kernel: [ 4789.910497] Firewall: INPUT IN=vlan4063 OUT= MAC=00:80:48:7e:5b:7f:00:1f:9c:bb:a8:1a:08:00 SRC=213.130.224.146 DST=213.130.254.2 LEN=120 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:05:36 work kernel: [ 4819.916553] Firewall: OUTPUT IN= OUT=eth0 SRC=213.130.254.2 DST=213.130.224.146 LEN=120 TOS=0x00 PREC=0x00 TTL=64 ID=65197 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:05:36 work kernel: [ 4819.918697] Firewall: INPUT IN=vlan4063 OUT= MAC=00:80:48:7e:5b:7f:00:1f:9c:bb:a8:1a:08:00 SRC=213.130.224.146 DST=213.130.254.2 LEN=120 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:05:36 work kernel: [ 4819.929805] Firewall: INPUT IN=vlan4063 OUT= MAC=00:80:48:7e:5b:7f:00:1f:9c:bb:a8:1a:08:00 SRC=213.130.224.146 DST=213.130.254.2 LEN=120 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:05:36 work kernel: [ 4819.930248] Firewall: OUTPUT IN= OUT=eth0 SRC=213.130.254.2 DST=213.130.224.146 LEN=120 TOS=0x00 PREC=0x00 TTL=64 ID=65199 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:06:06 work kernel: [ 4849.924752] Firewall: OUTPUT IN= OUT=eth0 SRC=213.130.254.2 DST=213.130.224.146 LEN=120 TOS=0x00 PREC=0x00 TTL=64 ID=4475 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:06:06 work kernel: [ 4849.926901] Firewall: INPUT IN=vlan4063 OUT= MAC=00:80:48:7e:5b:7f:00:1f:9c:bb:a8:1a:08:00 SRC=213.130.224.146 DST=213.130.254.2 LEN=120 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:06:36 work kernel: [ 4879.932970] Firewall: OUTPUT IN= OUT=eth0 SRC=213.130.254.2 DST=213.130.224.146 LEN=120 TOS=0x00 PREC=0x00 TTL=64 ID=4491 DF PROTO=UDP SPT=500 DPT=500 LEN=100
Sep 2 10:06:36 work kernel: [ 4879.935070] Firewall: INPUT IN=vlan4063 OUT= MAC=00:80:48:7e:5b:7f:00:1f:9c:bb:a8:1a:08:00 SRC=213.130.224.146 DST=213.130.254.2 LEN=120 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=500 DPT=500 LEN=100