Поиск по сайту:

Как перейти с FirewallD на Iptables в CentOS 7


Введение

Как и большинство других дистрибутивов Linux, CentOS 7 использует структуру netfilter внутри ядра Linux для доступа к пакетам, проходящим через сетевой стек. Это обеспечивает необходимый интерфейс для проверки и управления пакетами для реализации системы брандмауэра.

В большинстве дистрибутивов используется брандмауэр iptables, который использует ловушки netfilter для обеспечения соблюдения правил брандмауэра. CentOS 7 поставляется с альтернативной службой под названием firewalld, которая выполняет ту же цель.

Несмотря на то, что firewalld — это очень мощное решение брандмауэра с отличными функциями, некоторым пользователям может быть проще придерживаться iptables, если им нравится его синтаксис и его поведение и производительность. iptables команда фактически используется самим firewalld, но iptables сервис не установлен в CentOS 7 по умолчанию. В этом руководстве мы покажем, как установить службу iptables в CentOS 7 и перенести брандмауэр с firewalld на iptables (ознакомьтесь с этим руководство, если вы хотите узнать, как использовать FirewallD).

Сохраните текущие правила брандмауэра (необязательно)

Перед переключением на iptables в качестве брандмауэра вашего сервера рекомендуется сохранить текущие правила, которые применяет firewalld. Выше мы упоминали, что демон firewalld на самом деле использует команду iptables для обращения к перехватчикам ядра netfilter. Из-за этого мы можем вывести текущие правила с помощью команды iptables.

Скопируйте текущий набор правил в стандартный вывод и в файл в вашем домашнем каталоге с именем firewalld_iptables_rules, набрав:

  1. sudo iptables -S | tee ~/firewalld_iptables_rules

Сделайте то же самое с ip6tables:

  1. sudo ip6tables -S | tee ~/firewalld_ip6tables_rules

В зависимости от активных зон firewalld, включенных служб и правил, которые были переданы из firewall-cmd непосредственно в iptables, сброшенный набор правил может быть довольно обширным.

Служба firewalld реализует свои политики брандмауэра, используя обычные правила iptables. Это достигается путем создания структуры управления с использованием цепочек iptables. Большинство правил, которые вы, вероятно, увидите, будут использоваться для создания этих цепочек управления и направления потока трафика в эти структуры и из них.

Правилам брандмауэра, которые вы в конечном итоге переместите в свою службу iptables, не нужно будет заново создавать структуру управления, на которую опирается firewalld. Из-за этого набор правил, который вы в конечном итоге реализуете, будет намного проще. Мы сохраняем весь набор здесь, чтобы сохранить как можно больше необработанных данных.

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

  1. grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules

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

Загрузите и установите службу Iptables

Чтобы начать переход вашего сервера, вам необходимо загрузить и установить пакет iptables-service из репозиториев CentOS.

Загрузите и установите служебные файлы, набрав:

  1. sudo yum install iptables-services

Это загрузит и установит сценарии systemd, используемые для управления службой iptables. Он также запишет некоторые файлы конфигурации iptables и ip6tables по умолчанию в каталог /etc/sysconfig.

Создайте свои правила брандмауэра Iptables

Затем вам нужно создать правила брандмауэра iptables, изменив файлы /etc/sysconfig/iptables и /etc/sysconfig/ip6tables. Эти файлы содержат правила, которые будут прочитаны и применены при запуске службы iptables.

То, как вы создаете правила брандмауэра, зависит от того, установлен ли процесс system-config-firewall и используется ли он для управления этими файлами. Проверьте верхнюю часть файла /etc/sysconfig/iptables, чтобы узнать, рекомендуется ли в нем ручное редактирование или нет:

  1. sudo head -2 /etc/sysconfig/iptables

Если вывод выглядит так, не стесняйтесь вручную редактировать файлы /etc/sysconfig/iptables и /etc/sysconfig/ip6tables, чтобы реализовать политики для вашего iptables брандмауэр:

output
# sample configuration for iptables service # you can edit this manually or use system-config-firewall

Откройте и отредактируйте файлы с правами sudo, чтобы добавить свои правила:

  1. sudo nano /etc/sysconfig/iptables
  2. sudo nano /etc/sysconfig/ip6tables

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

  1. sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'
  2. sudo sh -c 'ip6tables-restore -t < /etc/sysconfig/ip6tables'

Если, с другой стороны, результаты проверки файла /etc/sysconfig/iptables выглядят следующим образом, вам не следует редактировать файл вручную:

output
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended.

Это означает, что инструмент управления system-config-firewall установлен и используется для управления этим файлом. Любые ручные изменения будут перезаписаны инструментом. Если вы видите это, вам следует внести изменения в свой брандмауэр с помощью одного из связанных инструментов. Для текстового пользовательского интерфейса введите:

  1. sudo system-config-firewall-tui

Если у вас установлен графический интерфейс, вы можете запустить его, набрав:

  1. sudo system-config-firewall

Если вам нужна помощь в изучении правил и синтаксиса iptables, могут оказаться полезными следующие руководства, хотя они в основном ориентированы на системы Ubuntu:

  • Как настроить брандмауэр с помощью Iptables в Ubuntu 14.04
  • Iptables Essentials: общие правила и команды брандмауэра
  • Как реализовать базовый шаблон брандмауэра с Iptables в Ubuntu 14.04

Остановите службу FirewallD и запустите службу Iptables.

Затем нам нужно остановить текущий брандмауэр firewalld и запустить наши службы iptables. Мы будем использовать конструкцию && для запуска новых служб брандмауэра, как только служба firewalld успешно завершит работу:

  1. sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables

Вы можете убедиться, что firewalld не запущен, набрав:

  1. sudo firewall-cmd --state

Вы также можете увидеть, что правила, которые вы установили в каталоге /etc/sysconfig, были загружены и применены, набрав:

  1. sudo iptables -S
  2. sudo ip6tables -S

В этот момент службы iptables и ip6tables активны для текущего сеанса. Однако в настоящее время служба firewalld по-прежнему запускается автоматически при перезагрузке сервера.

Это лучшее время для проверки политик брандмауэра, чтобы убедиться, что у вас есть необходимый уровень доступа, потому что вы можете перезапустить сервер, чтобы вернуться к старому брандмауэру, если возникнут какие-либо проблемы.

Отключите службу FirewallD и включите службы Iptables.

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

  1. sudo systemctl disable firewalld

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

  1. sudo systemctl mask firewalld

Теперь вы можете включить службы iptables и ip6tables, чтобы они запускались автоматически при загрузке:

  1. sudo systemctl enable iptables
  2. sudo systemctl enable ip6tables

На этом переход к брандмауэру должен быть завершен.

Заключение

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