Недавно мы начали экспериментировать с IPv6, и одна из первых проблем, с которыми нам приходится бороться, - это иметь дело с совершенно отдельным набором правил брандмауэра (Linux iptables / ip6ables) для двух стеков протоколов. Логика нашего брандмауэра в основном основана на ряде специализированных сетей (например, 10.0.0.0/24 - это сеть рабочих станций персонала, 10.1.0.0/24 - это сеть баз данных, 10.2.0.0/24 - это сеть веб-серверов и т. Д. ), и логика как для IPv6, так и для IPv4 будет в значительной степени одинаковой, по модулю разных сетевых префиксов.
Что люди делают в таких ситуациях? В идеале я хотел бы иметь возможность генерировать наборы правил iptables и ip6table из одного и того же исходного файла (ов). Я уже собрал кое-что с помощью bash, но это не обязательно красиво, и я подозреваю, что где-то там должно быть лучшее решение.
Я был бы особенно заинтересован в решении на основе Puppet, которое эффективно использует собственные механизмы зависимости Puppet для реализации относительного упорядочения правил (или групп правил).
В Firewall Builder есть именно то, что вам нужно. Вы можете создать один набор правил, пометить его как «комбинированный ipv4 + ipv6» и разместить свои сети ipv4 и ipv6, назначенные одному и тому же сегменту (например, «сеть баз данных» etC) в одном правиле. Затем программа генерирует две отдельные конфигурации iptables: одну для ipv4, а другую - для ipv6. Эта глава Руководства пользователя иллюстрирует это, хотя в качестве примера используются списки доступа маршрутизаторов Cisco. Точно так же работает iptables.
http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html
Я также недавно столкнулся с созданием правил iptables для IPv4 и IPv6. После некоторых поисков я закончил использовать Филиал IPv6 FireHOL, Фил Уинрей.
FireHOL - это генератор брандмауэра iptables, создающий брандмауэры с фильтрацией пакетов iptables с отслеживанием состояния на хостах и маршрутизаторах Linux с любым количеством сетевых интерфейсов, любым количеством маршрутов, любым количеством обслуживаемых сервисов, любым уровнем сложности между вариантами сервисов (включая положительные и отрицательные выражения). (Источник: сайт FireHOL)
К сожалению, в официальной версии отсутствует поддержка IPv6. Но Фил Уинрей добавил поддержку в неофициальной ветке.
Несколько примеров того, как выглядит конфигурация:
# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept
# allow incoming ssh only on ipv4
ipv4 server ssh accept
# allow incoming IMAP requests only for ipv6
ipv6 server imap accept
Вы можете проверить эту ветку firehol по адресу:
git clone git://repo.or.cz/fireholvi.git
Дополнительную документацию можно найти в официальной документации FireHOL или на дополнительных Ознакомительные сведения об IPv6.
Лично я, вероятно, был бы осторожен при использовании его на производственной машине, где важен 100% надежный брандмауэр. Но все же посмотреть стоит.
В интересах продолжения евангелизации дела, я предлагаю использовать Puppet для вашей работы. В настоящее время нет хорошего сценария для обработки правил iptables 4 и 6, но написать его после адаптации к языку не составит особого труда.
Mediawiki's публичный репозиторий git это фантастический кладезь шаблонов конфигурации и включает iptables класс это обеспечит хорошую основу для начала. Вы можете отредактировать его, чтобы по умолчанию применять правила к обоим стекам одновременно и иметь флаги для разных правил, когда вы основываете что-то на правилах IPv4 или IPv6.
Конечным бонусом в конце этого является то, что правила брандмауэра для службы могут быть записаны в определение службы и автоматически развернуты и удалены при развертывании или удалении службы.
Отвечая на свой вопрос здесь, но я подумал, что эта информация может представлять общий интерес:
Изучая этот вопрос, я наткнулся на ufw (Несложный FireWall) от разработчиков Ubuntu. Если IPV6 включен в конфигурации ufw, ufw будет управлять правилами iptables и ip6tables параллельно. Это означает, что вы можете сделать что-то вроде этого:
# ufw allow ssh/tcp
И в итоге получаем:
# ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere (v6)
В результате правила iptables / ip6tables выглядят следующим образом:
# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT
Ufw также поддерживает профили приложений, которые позволяют создавать именованные группы портов. Ты можешь сделать это:
# ufw allow 'WWW Full'
И в конечном итоге открываем оба порта 80 и 443 (как для IPv4, так и для IPv6).
Я только начал смотреть на него, но, похоже, он довольно хорошо собран.
Поскольку он все еще отсутствует в списке: Shorewall - это широко распространенный и регулярно обновляемый многофункциональный инструмент настройки фильтра пакетов. Это было Поддержка IPv6 на какое-то время.