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

Защита IPv6 через ip6tables

IPv4 и IPv6 имеют разные таблицы правил. В НАЙС.ОС CLOUD администрирование IPv4 проводится через iptables, а IPv6 — через ip6tables. Открытый через IPv6 сервис останется доступен, даже если администратор закрыл его IPv4-правилом. В базовом профиле безопасности декларируется DROP на вход, пересылку и выход; реальную политику конкретного хоста всегда нужно проверять.

Не блокируйте ICMPv6 целиком

ICMPv6 используется не только для ping: сообщения Neighbor Discovery, Router Advertisement и Packet Too Big являются частью функционирования IPv6. Глухой запрет может привести к исчезновению сети, проблемам с MTU и нестабильным подключениям.

Проверка текущего состояния

ip -6 address
ip -6 route
ip6tables -S
ip6tables -L -n -v --line-numbers
ip6tables -t nat -S
ss -lntup

Не предполагается, что в каждом образе включён IPv6/NAT IPv6. Если ip6tables отсутствует — сначала уточните установленные пакеты и версии.

Что такое ICMPv6 и почему он важен

Тип сообщения Назначение
Neighbor Solicitation/Advertisement Определение соседей в локальном сегменте
Router Solicitation/Advertisement Информация о маршрутизаторах и адресации
Packet Too Big Path MTU Discovery, корректный размер пакета
Destination Unreachable Информация о недоступном узле/сети
Time Exceeded Диагностика маршрутов и TTL/hop limit

Решение о разрешении конкретных типов зависит от того, выполняет ли узел роль сервера или маршрутизатора. Для первого развёртывания значительно безопаснее сохранить существующий набор правил, чем заменить его одной командой ip6tables -P INPUT DROP.

Пример проверки IPv6-доступа к сервису

  1. Узнайте, где слушает приложение: ss -lntup. Адрес :: означает слушание на всех IPv6-интерфейсах с учётом настроек сокета.
  2. Посмотрите порядок правил: ip6tables -L INPUT -n -v --line-numbers.
  3. С внешнего доверенного IPv6-клиента проверьте TCP-соединение, убедившись, что тест разрешён политикой безопасности.
  4. Сравните рост счётчика конкретного правила с событием подключения.
  5. Отдельно посмотрите OUTPUT: при DROP исходящий SYN-ACK или DNS-запрос может быть заблокирован.

Пример добавления только одного разрешающего правила, при условии что политики и место вставки уже изучены:

# ИЛЛЮСТРАЦИЯ: допустить новое SSH-соединение от конкретного IPv6-адреса
# Замените 2001:db8::100 реальным адресом администратора.
ip6tables -I INPUT 1 -s 2001:db8::100/128 \
  -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

ip6tables -L INPUT -n -v --line-numbers

Не выполнять без подготовки

Позиция 1 выбрана для иллюстрации и может нарушить принятую политику, если раньше есть специальные ограничения. Перед вставкой оцените полный порядок цепочки и откат. В IPv6 также обычно требуется правило для ESTABLISHED,RELATED и необходимые ICMPv6 — их нельзя восстанавливать по одному фрагменту из этой страницы.

Сохранение и откат

umask 077
ip6tables-save > /root/ip6tables-before-change.rules

Дальнейший способ постоянного сохранения в НАЙС.ОС зависит от iptables.service и установленных вспомогательных скриптов. В SPEC они предусмотрены, но исходные ip6save и unit отсутствуют в предоставленном архиве. Не объявляйте произвольный путь постоянного сохранения эталонным до проверки systemctl cat iptables и установленного /etc/systemd/scripts/ip6save.

Для отката используйте заранее проверенный способ доступа к консоли и подготовленную копию. ip6tables-restore < /root/ip6tables-before-change.rules может разорвать удалённое соединение; выполняйте в безопасном окне обслуживания.

Типовые ошибки

  • Фильтруют только IPv4, забывая доступность по IPv6.
  • Считают ping-тест эквивалентным проверке TCP.
  • Блокируют Neighbor Discovery, после чего перестаёт работать ближайший маршрутизатор.
  • Настраивают статический IPv6 и не дают шлюз/RA.
  • Сохраняют не тот backend или вручную переписывают файлы, контролируемые системным сервисом.

Источники: Core/iptables/SPECS/iptables.spec; IPv6 и RFC 4890.