Вступление
Как и большинство других дистрибутивов Linux, CentOS 7 использует инфраструктуру + netfilter +
внутри ядра Linux для доступа к пакетам, которые проходят через сетевой стек. Это обеспечивает необходимый интерфейс для проверки пакетов и управления ими для реализации системы брандмауэра.
В большинстве дистрибутивов используется брандмауэр + iptables +
, который использует хуки + netfilter +
для обеспечения соблюдения правил брандмауэра. CentOS 7 поставляется с альтернативной службой под названием + firewalld +
, которая выполняет ту же самую задачу.
Хотя + firewalld +
- это очень мощное решение брандмауэра с великолепными функциями, для некоторых пользователей может быть проще придерживаться + iptables +
, если они довольны его синтаксисом и довольны его поведением и производительностью. + Iptables +
command фактически используется самим + firewalld +
, но + iptables +
service не устанавливается в CentOS 7 по умолчанию. В этом руководстве мы покажем, как установить службу + iptables +
в CentOS 7 и перенести брандмауэр из + firewalld +
в + iptables +
(см. Https://www.digitalocean.com/community/tutorials / how-to-set-up-a-firewall-using-firewalld-on-centos-7 [это руководство], если вы хотите узнать, как использовать 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:
Остановите службу 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 +
является отличным решением брандмауэра, иногда наиболее целесообразно использовать наиболее знакомый инструмент или использовать одни и те же системы в более разнообразной инфраструктуре.