Перейти к содержанию

Firewall для IKEv2, ESP-in-UDP и защищённого трафика

1. Что нужно разрешить

Для текущего ГОСТ-профиля требуется UDP 500 и UDP 4500 между реальными VPN-узлами. Расшифрованный трафик проходит через ipsec0. При kernel-libipsec.raw_esp = no и encap = yes проверенный путь — ESP-in-UDP; открывать протокол 50 только ради этого профиля не требуется. Для иных реализаций IPsec набор правил может отличаться.

Перед изменением firewall

Делайте это из консоли либо с запасным SSH-доступом. Не выполняйте iptables -F, не меняйте базовые политики и не удаляйте правила облачного провайдера. Используйте существующий штатный механизм сохранения правил НАЙС.ОС.

2. Тестовые правила — узел А

iptables -C INPUT -s 192.168.10.26 -p udp -m multiport --dports 500,4500 -j ACCEPT 2>/dev/null || \
  iptables -I INPUT 1 -s 192.168.10.26 -p udp -m multiport --dports 500,4500 -j ACCEPT
iptables -C OUTPUT -d 192.168.10.26 -p udp -m multiport --dports 500,4500 -j ACCEPT 2>/dev/null || \
  iptables -I OUTPUT 1 -d 192.168.10.26 -p udp -m multiport --dports 500,4500 -j ACCEPT
iptables -C INPUT -i ipsec0 -s 10.200.2.1/32 -d 10.200.1.1/32 -j ACCEPT 2>/dev/null || \
  iptables -I INPUT 1 -i ipsec0 -s 10.200.2.1/32 -d 10.200.1.1/32 -j ACCEPT
iptables -C OUTPUT -o ipsec0 -s 10.200.1.1/32 -d 10.200.2.1/32 -j ACCEPT 2>/dev/null || \
  iptables -I OUTPUT 1 -o ipsec0 -s 10.200.1.1/32 -d 10.200.2.1/32 -j ACCEPT

3. Тестовые правила — узел Б

iptables -C INPUT -s 192.168.10.15 -p udp -m multiport --dports 500,4500 -j ACCEPT 2>/dev/null || \
  iptables -I INPUT 1 -s 192.168.10.15 -p udp -m multiport --dports 500,4500 -j ACCEPT
iptables -C OUTPUT -d 192.168.10.15 -p udp -m multiport --dports 500,4500 -j ACCEPT 2>/dev/null || \
  iptables -I OUTPUT 1 -d 192.168.10.15 -p udp -m multiport --dports 500,4500 -j ACCEPT
iptables -C INPUT -i ipsec0 -s 10.200.1.1/32 -d 10.200.2.1/32 -j ACCEPT 2>/dev/null || \
  iptables -I INPUT 1 -i ipsec0 -s 10.200.1.1/32 -d 10.200.2.1/32 -j ACCEPT
iptables -C OUTPUT -o ipsec0 -s 10.200.2.1/32 -d 10.200.1.1/32 -j ACCEPT 2>/dev/null || \
  iptables -I OUTPUT 1 -o ipsec0 -s 10.200.2.1/32 -d 10.200.1.1/32 -j ACCEPT

4. Обязательный запрет обхода VPN

Узел А:

iptables -C OUTPUT -d 10.200.2.1/32 ! -o ipsec0 -j REJECT 2>/dev/null || \
  iptables -I OUTPUT 1 -d 10.200.2.1/32 ! -o ipsec0 -j REJECT

Узел Б:

iptables -C OUTPUT -d 10.200.1.1/32 ! -o ipsec0 -j REJECT 2>/dev/null || \
  iptables -I OUTPUT 1 -d 10.200.1.1/32 ! -o ipsec0 -j REJECT

Эти адресные запреты относятся только к указанным /32. Для транзитного трафика через FORWARD, IPv6 и нескольких интерфейсов нужно составить отдельную матрицу правил. Порядок правил важен: правило разрешения для -o ipsec0 не должно перекрываться ранее стоящим DROP.

5. Проверка после изменения

iptables -S INPUT
iptables -S OUTPUT
iptables -L INPUT -n -v --line-numbers
iptables -L OUTPUT -n -v --line-numbers

Проверка запрета при выключенной SA в fail-closed. Сохранение переживающих перезагрузку правил описано в разделе iptables.