Как перейти с 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 Essentials: общие правила и команды брандмауэра
- Как реализовать базовый шаблон брандмауэра с 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
— отличное решение для брандмауэра, иногда наиболее целесообразно использовать наиболее знакомый инструмент или одни и те же системы в более разнообразной инфраструктуре.