Двойной стек Wireguard и iptables

Вопрос или проблема

Я настроил двухстековый ip4 и ipv6 с NAT WireGuard на Ubuntu 22. Подключаюсь к VPN через ipv4 endpoint. Все работает хорошо — 2 адреса функционируют одновременно. Однако, когда я решил закрыть лишние порты в ip6tables с помощью правила ip6tables -P INPUT DROP (для безопасности), адрес ipv6 перестал выдаваться.
Я не понимаю, какие правила используются для двухстековой конфигурации. Но я не хочу открывать цепочку INPUT для этого.
Пожалуйста, посоветуйте.

sysctl.conf:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding = 1

iptables:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
    
-A INPUT -p udp -m udp --dport 23261 -m comment --comment "«WireGuard»" -j ACCEPT
-A INPUT -i lo -m comment --comment localhost -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

ip6tables:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

-A INPUT -p udp -m udp --dport 23261 -m comment --comment "«WireGuard»" -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m comment --comment localhost -j ACCEPT
-A INPUT -i wg0 -m comment --comment WG -j ACCEPT
-A FORWARD -i wg0 -o eth0 -j ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

обновлено. Решил проблему добавлением правила icmp

Итоговые ip6tables:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

-A INPUT -p ipv6-icmp -m limit --limit 15/sec -j ACCEPT
-A FORWARD -i wg0 -o eth0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

Решил проблему добавлением правила icmp

Ответ или решение

Вопрос, связанный с настройкой WireGuard в среде с двойной стековой архитектурой (IPv4 и IPv6), вызывает особый интерес, учитывая необходимость балансировки между безопасностью и функциональностью. Вы выразили обеспокоенность тем, что добавление правила DROP в цепочку INPUT для ip6tables приводит к прекращению работы вашего IPv6-адреса. Это распространенная проблема, но, к счастью, она имеет конкретное решение, что стало очевидно после добавления правила для обработки ICMP пакетов.

Теория

Настройка брандмауэра с использованием iptables и ip6tables требует тщательного планирования, чтобы обеспечить как безопасность, так и непрерывный доступ к необходимой функциональности. В сетевых протоколах, особенно в IPv6, ICMP играет критическую роль. Главной особенностью ICMP для IPv6 является его обязательность. Он используется не только для диагностики, как у IPv4, но и для таких важных функций, как автоматическое обнаружение соседей, автонастраивание IPv6-адресов и маршрутизация.

Когда вы решили закрыть все порты в цепочке INPUT через "ip6tables -P INPUT DROP", вы выключили любую возможность прохождения пакетов ICMP. Таким образом, любые операции, требующие ICMP, такие как автонастройка адресов и диагностика сети, прекращают свою работу, что и объясняет, почему ваш IPv6-адрес перестал выдаваться.

Пример

Рассмотрим текущее состояние конфигурации ip6tables, до того как вы внесли изменения:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

-A INPUT -p udp -m udp --dport 23261 -m comment --comment "«WireGuard»" -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m comment --comment localhost -j ACCEPT
-A INPUT -i wg0 -m comment --comment WG -j ACCEPT
-A FORWARD -i wg0 -o eth0 -j ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

Как видите, в этой конфигурации отсутствуют правила, позволяющие прохождение ICMP-пакетов, которые необходимы для правильной работы IPv6.

После решения проблемы, вы добавили следующее правило:

-A INPUT -p ipv6-icmp -m limit --limit 15/sec -j ACCEPT

Это правило позволяет ICMP пакеты, ограничивая их частоту для предотвращения возможных атак, таких как ICMP flood.

Применение

Для любого, кто сталкивается с подобными проблемами при настройке двойной стековой архитектуры с WireGuard, важно не забывать о роли ICMP в сетевых коммуникациях IPv6. В стандартной практике, рекомендуется делать следующее:

  1. Анализировать требования: Убедитесь, что понимаете, какие коммуникации необходимы для вашего применения. Это поможет избежать ненужных блокировок.

  2. Прописывать необходимые исключения: Убедитесь, что в ваших таблицах брандмауэра есть исключения для критически важных сервисов и протоколов, таких как ICMP в IPv6.

  3. Ограничивайте правила: Используйте ограничения скорости для пакетов, где это возможно, чтобы минимизировать риск противоправного использования.

  4. Тестирование: После внесения изменений проведите тщательное тестирование всех сценариев использования.

Следуя этим шагам в практике, вы сможете обеспечить надежную и безопасную работу вашего WireGuard VPN в средах с двойной стековой архитектурой. Сочетание знаний о сетевых протоколах и правильное применение брандмауэра создают эффективную защиту и стабильную работу вашей сети.

Оцените материал
Добавить комментарий

Капча загружается...