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

Как перейти с 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, введя:

sudo iptables -S | tee ~/firewalld_iptables_rules

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

sudo ip6tables -S | tee ~/firewalld_ip6tables_rules

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

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

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

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

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

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

Скачать и установить службу Iptables

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

Скачайте и установите служебные файлы, введя:

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, чтобы увидеть, рекомендуется ли там избегать ручного редактирования или нет:

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, чтобы добавить ваши правила:

sudo nano /etc/sysconfig/iptables

sudo nano /etc/sysconfig/ip6tables

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

sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'

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 установлен и используется для управления этим файлом. Любые ручные изменения будут перезаписаны этим инструментом. Если вы видите это, вам следует вносить изменения в ваш брандмауэр, используя один из связанных инструментов. Для текстового интерфейса введите:

sudo system-config-firewall-tui

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

sudo system-config-firewall

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

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

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

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

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

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

sudo firewall-cmd --state

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

sudo iptables -S

sudo ip6tables -S

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

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

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

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

sudo systemctl disable firewalld

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

sudo systemctl mask firewalld

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

sudo systemctl enable iptables

sudo systemctl enable ip6tables

Это должно завершить переход вашего файрвола.

Заключение

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