Управление параллельными правилами для ipv4 и ipv6 iptables?

10

Недавно мы начали экспериментировать с 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 для реализации относительного упорядочения правил (или групп правил).

larsks
источник

Ответы:

5

Firewall Builder имеет именно то, что вам нужно. Вы можете создать один набор правил, пометить его как «объединенный ipv4 + ipv6» и поместить сети ipv4 и ipv6, назначенные в один и тот же сегмент (например, «сеть базы данных» и т. Д.), В одно и то же правило. Затем программа генерирует две отдельные конфигурации iptables, одну для ipv4, а другую для ipv6. Эта глава Руководства пользователя иллюстрирует это, хотя оно использует списки доступа маршрутизаторов Cisco в качестве примера. Это работает точно так же для iptables.

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html

vadimk
источник
4

Я также недавно столкнулся с созданием iptables-правил для IPv4 и IPv6. После некоторых поисков я использовал филиал IPv6 FireHOL от Phil Whineray .

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 или в дополнительном файле Readme о IPv6 .

Лично я, вероятно, был бы осторожен при использовании его на рабочей машине, где важно иметь 100% надежный межсетевой экран. Но все же стоит посмотреть.

бб поколения
источник
3

В интересах продолжения евангелизации причины я предлагаю использовать Puppet, чтобы сделать вашу работу. В настоящее время не существует хорошего сценария для обработки правил iptables 4 и 6, но написать его не составит труда, если вы адаптируетесь к языку.

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

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

Джефф Ферланд
источник
Я взгляну. Пока что меня не впечатлили типичные решения Puppet для управления iptables. В частности, кажется, что все они реализуют порядок явно, либо через имена файлов фрагментов, либо через явные индексы, представленные в правилах Puppet, вместо того, чтобы использовать механизмы разрешения зависимостей Puppet, чего я действительно хочу. Если решение, связанное здесь, избежит этих проблем, я все для этого.
Жаворонки
@larsks Я согласен и также разочарован тем, что хорошее общее решение не было выпущено ... но, возможно, пришло время сделать это самому. Puppet позволит использовать before => Resource['declared_name']любое определение, поэтому вы можете заказать их, используя реализацию, которая не пытается упорядочить вещи с фрагментами. Хорошее использование Augueas для структуры также предотвратит эту проблему - оставьте ваши комментарии в верхнем дереве и порядок ниже, как вам хочется.
Джефф Ферланд
Мои собственные попытки решить эту проблему не зашли слишком далеко. На данный момент я (а) установил фрагменты в подкаталог, а затем (б) использовал rcorder, чтобы расположить их в порядке зависимости. Он работает, но поскольку он основан исключительно на управлении фрагментными файлами, он не поддается смешанной среде ipv4 / ipv6. Я не особо внимательно изучал использование Augeas для решения проблемы. Мне было бы любопытно, если бы у вас был какой-нибудь прототип кода.
Жаворонки
2

Отвечая на мой вопрос здесь, но я подумал, что эта информация может представлять общий интерес:

Размышляя над этим вопросом, я наткнулся на UFW ( Uncomplicated FireWall) от ребят из Ubuntu. Если в конфигурации ufw включен IPV6, 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).

Я только начал смотреть на это, но это, кажется, довольно хорошо собрано.

larsks
источник
0

Поскольку он по-прежнему отсутствует в списке: Shorewall - это широко распространенный и регулярно обновляемый инструмент настройки фильтра пакетов с широкими возможностями. Он имел поддержку IPv6 в настоящее время на некоторое время.

заместитель Wabbit
источник
1
Насколько я понимаю, «shorewall» - это только ipv4, а «shorewall6» - только ipv6, для того чтобы охватить оба протокола, нужно использовать оба. Могут ли они иметь общую конфигурацию?
Жаворонки