- Настройка firewalld CentOS 7 с примерами команд
- Запуск и остановка firewalld
- Зоны firewalld
- Пример: разрешаем ssh на нестандартном порте
- Разные полезные команды:
- Маскарад (masquerade, он же nat, он же. ):
- Преимущества firewalld
- Недостатки firewalld
- Не хочу firewalld! Верните мне старый iptables!
- Как настроить брандмауэр с FirewallD на CentOS 7
- Подготовка
- Основные концепции Firewalld
- Зоны Firewalld
- Услуги межсетевого экрана
- Среда выполнения Firewalld и постоянные настройки
- Установка и включение FirewallD
- Работа с зонами Firewalld
- Изменение зоны интерфейса
- Изменение зоны по умолчанию
- Открытие порта или сервиса
- Создание новой службы FirewallD
- Порт пересылки с Firewalld
- Создание набора правил с помощью FirewallD
- Выводы
Настройка firewalld CentOS 7 с примерами команд
Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром — firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 😉 Хороший пример на эту тему — selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.
Firewalld — это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.
Запуск и остановка firewalld
Проверим, запущен ли firewalld:
# systemctl status firewalld
Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:
# firewall-cmd —state
running
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl start firewalld
# systemctl enable firewalld
Зоны firewalld
В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:
# firewall-cmd —get-zones
block dmz drop external home internal public trusted work
Назначение зон (условно, конечно):
- drop — все входящие пакеты отбрасываются (drop) без ответа. Разрешены только исходящие соединения.
- block — входящие соединения отклоняются (rejected) с ответом icmp-host-prohibited (или icmp6-adm-prohibited). Разрешены только инициированные системой соединения.
- public — зона по-умолчанию. Из названия ясно, что эта зона нацелена на работу в общественных сетях. Мы не доверяем этой сети и разрешаем только определенные входящие соединения.
- external — зона для внешнего интерфейса роутера (т.н. маскарадинг). Разрешены только определенные нами входящие соединения.
- dmz — зона DMZ, разрешены только определенные входящие соединения.
- work — зона рабочей сети. Мы все еще не доверяем никому, но уже не так сильно, как раньше 🙂 Разрешены только определенные входящие соединения.
- home — домашняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
- internal — внутренняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
- trusted — разрешено все.
Список всех активных зон:
# firewall-cmd —get-active-zones
public
interfaces: enp1s0
Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.
Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:
# firewall-cmd —get-zone-of-interface=enp1s0
public
А можно узнать, какие интерфейсы принадлежат конкретной зоне:
# firewall-cmd —zone=public —list-interfaces
enp1s0
Пример: разрешаем ssh на нестандартном порте
Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.
Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:
# firewall-cmd —permanent —list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:
# firewall-cmd —permanent —zone=public —remove-service=dhcpv6-client
Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):
# firewall-cmd —permanent —zone=public —add-port=2234/tcp
# firewall-cmd —zone=public —list-ports
2234/tcp
Ок, порт открыт. Редактируем конфиг sshd:
# nano /etc/ssh/sshd_config
.
port 2234
.
# systemctl restart sshd.service
Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd — нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:
# yum provides semanage
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 2234
Вот теперь все ок. Проверяем подключение по ssh на новом порте. Если все ок, закрываем доступ к порту 22:
# firewall-cmd —permanent —zone=public —remove-service=ssh
# firewall-cmd —reload
Смотрим, что получилось:
# firewall-cmd —list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Разные полезные команды:
Включить режим блокировки всех исходящих и входящих пакетов:
Выключить режим блокировки всех исходящих и входящих пакетов:
Узнать, включен ли режим блокировки всех исходящих и входящих пакетов:
Перезагрузить правила firewalld без потери текущих соединений:
Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):
Добавить к зоне сетевой интерфейс:
# firewall-cmd —zone=public —add-interface=em1
Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):
# firewall-cmd —zone=public —permanent —add-interface=em1
Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.
Разрешить диапазон портов:
# firewall-cmd —zone=public —add-port=5059-5061/udp
Маскарад (masquerade, он же nat, он же. ):
# firewall-cmd —zone=external —query-masquerade
# firewall-cmd —zone=external —add-masquerade
Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.
Перенаправить входящие на 22 порт на другой хост:
# firewall-cmd —zone=external —add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23
Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):
# firewall-cmd —zone=external /
—add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23
На этом закончу, т.к. примеров может быть бесконечно много. Добавлю только, что лично я не составил окончательно свое мнение по поводу нововведения firewalld, т.к. к синтаксису привыкаешь долго и если в вашем зоопарке встречаются разные OS Linux, то по первости могут быть проблемы именно с привычкой. Но освоив firewalld, вы расширите кругозор — чаще всего, это стоит затраченных усилий.
Преимущества firewalld
Основное преимущество — вы немного абстрагируетесь от цепочек iptables.Для включения перенаправления портов не придется думать про PREROUTING или POSTROUTING в дополнение к FORWARD. Вам дается «API от iptables от производителя», что-то в этом роде. Если вы включили nat, то неважно, где конкретно (под каким порядковым номером текущих правил) размещено правило. Вы просто указываете — включи nat на eth0. И без глупостей 😉 Это может быть удобно, если надо организовать web интерфейс управления брандмауэром.
Есть возможность проверить статус (например, включен nat или нет!). И также использовать это в своих скриптах, в логике вашего приложения, например. Я не знаю, как в iptables создать именно запрос статуса (вкл/выкл). Можно, конечно, что-то в роде iptables -L -t nat | grep ‘. ‘, но согласитесь, это немного не то же самое, что выполнить ‘firewall-cmd —zone=external —query-masquerade’. Есть, к примеру, сотни VM с CentOS, в которых могут немного отличаться названия wan интерфейсов или еще что-то в этом роде. А так вы имеете универсальный командлет, который даст ожидаемый результат на разных машинах.
Недостатки firewalld
Основной недостаток, на мой взгляд, это то, что при привыкании начнется отвыкание от «чистого» iptables, который и в Debian, и в Ubuntu, и в CentOS и, вообще, везде. Даже, кстати, в микротик синтаксис и цепочки похожи по типу на iptables. Это на любителя, конечно. И профессионалу все равно, с чем работать, если есть конкретные условия, он будет работать с тем, что есть. Но. я ретроград и отчаянно сопротивляюсь (при отсутсвии явных преимуществ) новинкам, которые каждый крупный игрок реализует под себя. RedHat выгодно, если все больше новых специалистов будут асами в firewalld.
И если вы перешли на firewalld, то уже чистый синтаксис iptables вам только помешает — будет каша или просто сломается работа брандмауэра, если вы начнете изменять/дополнять правила не с помощью стандартного синтаксиса firewalld.
Не хочу firewalld! Верните мне старый iptables!
Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:
Новичкам тут не место:
# systemctl disable firewalld
# systemctl stop firewalld
Ставим старый добрый iptables:
# yum install iptables-services
# systemctl start iptables
# systemctl start ip6tables
Автозапуск при включении:
# systemctl enable iptables
# systemctl enable ip6tables
Для сохранения правил iptables после перезагрузки:
# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables
# service iptables save
Текущие правила находятся в файлах:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
Перезапуск iptables (например, после совершения каких-либо изменений):
Источник
Как настроить брандмауэр с FirewallD на CentOS 7
Правильно настроенный брандмауэр — один из наиболее важных аспектов общей безопасности системы.
FirewallD — это законченное решение межсетевого экрана, которое управляет системными правилами iptables и предоставляет интерфейс D-Bus для работы с ними. Начиная с CentOS 7, FirewallD заменяет iptables в качестве инструмента управления брандмауэром по умолчанию.
В этом руководстве мы покажем вам, как настроить брандмауэр с помощью FirewallD в вашей системе CentOS 7, и объясним вам основные концепции FirewallD.
Подготовка
Прежде чем приступить к изучению этого руководства, убедитесь, что вы вошли на свой сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Лучше всего запускать административные команды от имени пользователя sudo, а не root. Если у вас нет пользователя sudo в вашей системе CentOS, вы можете создать его, следуя этим инструкциям .
Основные концепции Firewalld
FirewallD использует концепции зон и служб, а не цепочку и правила iptables. В зависимости от зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или запрещен в систему и из системы.
FirewallD можно настроить и управлять им с помощью утилиты командной строки firewall-cmd .
Зоны Firewalld
Зоны — это предопределенные наборы правил, определяющие, какой трафик должен быть разрешен в зависимости от уровня доверия в сетях, к которым подключен ваш компьютер. Вы можете назначить зоне сетевые интерфейсы и источники.
Ниже приведены зоны, предоставляемые FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежных до доверенных:
- drop : все входящие соединения отбрасываются без уведомления. Разрешены только исходящие соединения.
- block : все входящие соединения отклоняются сообщением icmp-host-prohibited icmp6-adm-prohibited для IPv4 и icmp6-adm-prohibited -hibited для IPv6n. Разрешены только исходящие соединения.
- public : для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие соединения.
- external : для использования во внешних сетях с включенной маскировкой NAT, когда ваша система действует как шлюз или маршрутизатор. Разрешены только выбранные входящие соединения.
- internal : для использования во внутренних сетях, когда ваша система действует как шлюз или маршрутизатор. Другим системам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- dmz : используется для компьютеров, расположенных в вашей демилитаризованной зоне, которые имеют ограниченный доступ к остальной части вашей сети. Разрешены только выбранные входящие соединения.
- работа : Используется для рабочих машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- home : Используется для домашних машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- доверенный : все сетевые подключения принимаются. Доверяйте всем компьютерам в сети.
Услуги межсетевого экрана
Сервисы Firewalld — это предопределенные правила, которые применяются в зоне и определяют необходимые настройки, чтобы разрешить входящий трафик для конкретной службы.
Среда выполнения Firewalld и постоянные настройки
Firewalld использует два отдельных набора конфигураций: время выполнения и постоянную конфигурацию.
Конфигурация среды выполнения — это фактическая рабочая конфигурация, которая не сохраняется при перезагрузке. Когда служба Firewalld запускается, она загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.
По умолчанию при внесении изменений в конфигурацию Firewalld с помощью утилиты firewall-cmd изменения применяются к конфигурации среды выполнения. Чтобы сделать изменения постоянными, вам нужно использовать параметр —permanent .
Установка и включение FirewallD
Firewalld по умолчанию установлен в CentOS 7, но если он не установлен в вашей системе, вы можете установить пакет, набрав:
По умолчанию служба Firewalld отключена. Вы можете проверить статус брандмауэра с помощью:
Если вы только что установили или не активирован ранее, команда печати not running . В противном случае вы увидите running .
Чтобы запустить службу FirewallD и включить ее при загрузке:
Работа с зонами Firewalld
После включения службы FirewallD в первый раз public зона устанавливается как зона по умолчанию. Вы можете просмотреть зону по умолчанию, набрав:
Чтобы получить список всех доступных зон, введите:
По умолчанию всем сетевым интерфейсам назначается зона по умолчанию. Чтобы проверить, какие зоны используются вашим сетевым интерфейсом, введите:
Приведенный выше вывод говорит нам, что оба интерфейса eth0 и eth1 назначены публичной зоне.
Вы можете распечатать настройки конфигурации зоны с помощью:
Из выходных данных выше мы видим, что публичная зона активна и установлена по умолчанию, используемая как интерфейсами eth0 и eth1 . Кроме того, разрешены соединения, относящиеся к клиенту DHCP и SSH.
Если вы хотите проверить конфигурации всех доступных типов зон:
Команда выводит на печать огромный список с настройками всех доступных зон.
Изменение зоны интерфейса
Вы можете легко изменить Зону интерфейса, используя параметр —zone в сочетании с параметром —change-interface . Следующая команда назначит интерфейс eth1 рабочей зоне:
Проверьте изменения, набрав:
Изменение зоны по умолчанию
Чтобы изменить зону по умолчанию, используйте параметр —set-default-zone за которым следует имя зоны, которую вы хотите сделать по умолчанию.
Например, чтобы изменить зону по умолчанию на домашнюю, вы должны выполнить следующую команду:
Проверьте изменения с помощью:
Открытие порта или сервиса
С помощью FirewallD вы можете разрешить трафик для определенных портов на основе предопределенных правил, называемых службами.
Чтобы получить список всех доступных по умолчанию услуг, введите:
Вы можете найти дополнительную информацию о каждой службе, открыв связанный файл .xml в каталоге /usr/lib/firewalld/services . Например, служба HTTP определяется так:
Чтобы разрешить входящий HTTP-трафик (порт 80) для интерфейсов в публичной зоне, только для текущего сеанса (конфигурация времени выполнения), введите:
Чтобы убедиться, что служба была успешно добавлена, используйте параметр —list-services :
Если вы хотите оставить порт 80 открытым после перезагрузки, вам нужно будет ввести ту же команду еще раз, но на этот раз с параметром —permanent :
Используйте —list-services вместе с параметром —permanent чтобы проверить свои изменения:
Синтаксис удаления службы такой же, как и при добавлении службы. Просто используйте —remove-service вместо параметра —add-service :
Приведенная выше команда удаляет службу http из постоянной конфигурации публичной зоны.
Что делать, если вы запускаете такое приложение, как Plex Media Server, для которого нет подходящей службы?
В подобных ситуациях у вас есть два варианта. Вы можете либо открыть соответствующие порты, либо определить новую службу FirewallD.
Например, Plex Server прослушивает порт 32400 и использует TCP, чтобы открыть порт в публичной зоне для текущего сеанса, используйте параметр —add-port= :
Чтобы убедиться, что порт был добавлен успешно, используйте параметр —list-ports :
Чтобы порт 32400 открытым после перезагрузки, добавьте правило к постоянным настройкам, выполнив ту же команду с параметром —permanent .
Синтаксис удаления порта такой же, как и при добавлении порта. Просто используйте —remove-port вместо —add-port .
Создание новой службы FirewallD
Как мы уже упоминали, службы по умолчанию хранятся в каталоге /usr/lib/firewalld/services . Самый простой способ создать новую службу — скопировать существующий файл службы в каталог /etc/firewalld/services , который является местом для созданных пользователями служб, и изменить настройки файла.
Например, чтобы создать определение службы для Plex Media Server, мы можем использовать служебный файл SSH:
Откройте только что созданный файл plexmediaserver.xml и измените краткое имя и описание службы в тегах и . Самый важный тег, который вам нужно изменить, — это тег port , который определяет номер порта и протокол, который вы хотите открыть.
В следующем примере мы открываем порты 1900 UDP и 32400 TCP.
Сохраните файл и перезагрузите сервис FirewallD:
Теперь вы можете использовать услугу plexmediaserver в своих зонах так же, как и любую другую услугу.
Порт пересылки с Firewalld
Чтобы перенаправить трафик с одного порта на другой порт или адрес, сначала включите маскировку для желаемой зоны с помощью переключателя —add-masquerade . Например, чтобы включить маскировку для типа external зоны:
- Перенаправлять трафик с одного порта на другой на одном сервере
В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на том же сервере:
- Перенаправить трафик на другой сервер
В следующем примере мы перенаправляем трафик с порта 80 на порт 80 на сервере с IP 10.10.10.2 :
- Перенаправить трафик на другой сервер через другой порт
В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на сервере с IP 10.10.10.2 :
Если вы хотите сделать перманент постоянным, просто добавьте параметр —permanent .
Создание набора правил с помощью FirewallD
В следующем примере мы покажем, как настроить брандмауэр, если у вас был веб-сервер. Мы предполагаем, что ваш сервер имеет только один интерфейс eth0 , и вы хотите разрешить входящий трафик только по портам SSH, HTTP и HTTPS.
Измените зону по умолчанию на dmz
Мы будем использовать зону dmz (демилитаризованную), потому что по умолчанию она разрешает только SSH-трафик. Чтобы изменить зону по умолчанию на dmz и назначить ее интерфейсу eth0 , выполните следующие команды:
Откройте порты HTTP и HTTPS:
Чтобы открыть порты HTTP и HTTPS, добавьте в зону dmz постоянные правила обслуживания:
Немедленно внесите изменения в силу, перезагрузив брандмауэр:
Чтобы проверить параметры конфигурации зоны dmz, введите:
Приведенный выше вывод говорит нам, что dmz является зоной по умолчанию, применяется к интерфейсу eth0 и что порты ssh (22), http (80) и https (443) открыты.
Выводы
Вы узнали, как настраивать и управлять службой FirewallD в вашей системе CentOS.
Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Источник