Назад | Перейти на главную страницу

Каков канонический способ хранения правил iptables

iptables, стандартный брандмауэр Linux, не сохраняет правила между перезагрузками. Вы должны сами позаботиться об этом. Есть много способов сделать это. Как это сделать канонически? Каковы лучшие практики?

Я отвечу своим собственным решением, но меня интересуют другие / лучшие решения.

Вот несколько примеров правил. Сохраните их в /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

добавьте эту строку в конец / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules

Мы используем много правила iptables, поэтому, чтобы упростить администрирование, мы делаем следующее:

  • Все правила вызываются из сценариев - сценарии вызываются из /etc/init.d/firewall (настраиваемый сценарий)
  • Файл имен серверов / сетевых имен (переменные IP-адреса) сохраняется и включается в каждый сценарий iptables для согласованности.
  • для каждой подсети хранятся отдельные сценарии (например, частная / DMZ / VPN и т. д.), чтобы упростить поиск. Правила, которые входят в 2 сценария (например, те, которые ограничивают частную передачу данных и DMZ) помещаются в сценарий более "безопасной" сети.
  • везде, где это возможно, используются циклы и вложенные циклы, чтобы сценарии были как можно короче.
  • каждое новое правило или изменение документируется с комментариями, предшествующими соответствующему разделу сценария.

Я не знаю, это ли Лучший способ сделать это, но он сработал для нас.

Хотя это правда, что это зависит от среды и платформы, я видел два хороших подхода в зависимости от платформы:

  • RHEL / CentOS: храните все правила в одном файле / etc / sysconfig / iptables, который считывается сценарием запуска iptables.

  • Debian / Ubuntu: храните все правила в отдельных файлах для конкретных служб в каталоге /etc/iptables.d/. Например, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, где port_service соответствует имени службы в / etc / services.

В любом случае файл или файлы управляются инструментом конфигурации, таким как Chef или Puppet, и считываются «главным» сценарием запуска для iptables, который запускается во время загрузки.

В дополнении к iptables-saveiptables-restore), сложные схемы брандмауэра лучше обрабатывать с помощью специальных программ. Например, мы использовали shorewall ("iptables made easy") для настройки iptables.

Также доступны более простые инструменты, например Поджигатель и kmyfirewall.

Это зависит от используемого вами дистрибутива. Некоторые дистрибутивы, особенно те, которые основаны на дистрибутиве Red Hat, сохраняют правила iptables автоматически, но в своем собственном специальном каталоге. Я больше всего знаком с RHEL, и правила iptables можно найти в / etc / sysconfig / iptables. Ознакомиться с синтаксисом правил iptables может быть непросто поначалу, но довольно легко, если вы освоите его.

На веб-сайте netfilter есть много документации по iptables, включая некоторые введения. Если вы хотите немного почитать, вы можете найти здесь много полезной информации: http://www.netfilter.org/documentation/

Этот вопрос очень близок к тому, чтобы быть обманом 4934 и это связано с 397.

я использую Firehol в сочетании с веб-интерфейсом, который я разработал для управления файлом конфигурации.

Мне очень нравится firehol, он обеспечивает более простой синтаксис, чем непосредственное использование iptables.

  • Вы можете использовать команду отладки firehol, чтобы точно определить, какие команды iptables генерируются
  • Если у вас есть ошибка в вашей конфигурации и вы запускаете брандмауэр, firehol обнаруживает ошибку и возвращается в предыдущее состояние.
  • В Firehol есть команда «попробовать», которую вы можете использовать для удаленного запуска брандмауэра, если ваши изменения прервут ваше соединение, firehol вернется в предыдущее состояние, если вы не уничтожили свое соединение, он попросит вас подтвердить изменение.
  • Firehol имеет большой набор предопределенных служб, поэтому вам не нужно точно помнить, какие порты у вас должны быть, какие порты открывать для какого-то малоизвестного протокола.

Конечно, мы используем собственный скрипт инициализации. Я могу использовать циклы for для перебора списка портов, анализа других файлов конфигурации, таких как пользователи vpn и т. Д. Отлично!

И iptables-restore, безусловно, самый «канонический» способ его сохранить.

Что хочу добавить:

Обратите внимание, что текущая версия iptables при каждом вызове будет запрашивать у ядра полный список цепочек. Затем он внесет одно изменение, о котором вы его просите. Затем он снова загрузит список.

Это медленно (O (n ^ 2)), для нас требуется 5 секунд, что слишком долго ;-)

Если вы используете iptables-restore, все это выполняется за одну быструю операцию.