Установленный в операционной системе Firewall используется для предотвращения несанкционированного прохождения трафика между компьютерными сетями. Вручную или автоматически создаются специальные правила для межсетевого экрана, которые и отвечают за управление доступом. В ОС, разработанной на ядре Linux, CentOS 7 имеется встроенный фаервол, а управление им осуществляется с помощью брандмауэра. По умолчанию задействован FirewallD, и о его настройке мы бы хотели поговорить сегодня.
Настраиваем Firewall в CentOS 7
Как уже было сказано выше, стандартным брандмауэром в CentOS 7 назначена утилита FirewallD. Именно поэтому настройка фаервола будет рассмотрена на примере этого инструмента. Задать правила фильтрации можно и с помощью той же iptables, но это выполняется немного другим образом. С конфигурацией упомянутой утилиты рекомендуем ознакомиться, перейдя по следующей ссылке, а мы же начнем разбор FirewallD.
Читайте также: Настройка iptables в CentOS 7
Основные понятия межсетевого экрана
Существует несколько зон — наборов правил для управления трафиком на основе доверия к сетям. Всем им задаются собственные политики, совокупность которых и образует конфигурацию брандмауэра. Каждой зоне присваивается один или несколько сетевых интерфейсов, что также позволяет регулировать фильтрацию. От используемого интерфейса напрямую зависят применяемые правила. Например, при подключении к общедоступному Wi-Fi сетевой экран повысит уровень контроля, а в домашней сети откроет дополнительный доступ для участников цепи. В рассматриваемом фаерволе присутствуют такие зоны:
Зона | Описание |
---|---|
trusted | Максимальный уровень доверия ко всем устройствам сети |
home | Группа локальной сети. Существует доверие к окружению, но при этом входящие соединения доступны только для определенных машин |
work | Рабочая зона. Присутствует доверие к большинству устройств, а также активируются дополнительные сервисы |
dmz | Зона для изолированных компьютеров. Такие устройства отсоединены от остальной сети и пропускают только определенный входящий трафик |
internal | Зона внутренних сетей. Доверие применяется ко всем машинам, открываются дополнительные сервисы |
external | Обратная к предыдущей зона. Во внешних сетях активна маскировка NAT, закрывая внутреннюю сеть, но не блокируя возможность получения доступа |
public | Зона общедоступных сетей с недоверием ко всем устройствам и индивидуальным приемом входящего трафика |
block | Все входящие запросы сбрасываются с отправлением ошибки icmp-host-prohibited или icmp6-adm-prohibited |
drop | Минимальный уровень доверия. Входящие соединения сбрасываются без каких-либо уведомлений |
Сами же политики бывают временные и постоянные. При появлении или редактировании параметров действие фаервола сразу меняется без надобности перезагрузки. Если же были применены временные правила, после рестарта FirewallD они будут сброшены. Перманентное правило на то так и называются — оно будет сохранено на постоянной основе при применении аргумента —permanent
.
Включение брандмауэра FirewallD
Для начала нужно запустить FirewallD или убедиться в том, что он находится в активном состоянии. Только функционирующий демон (программа, работающая в фоновом режиме) будет применять правила для межсетевого экрана. Активация производится буквально в несколько кликов:
- Запустите классический «Терминал» любым удобным методом, к примеру, через меню «Приложения».
- Введите команду
sudo systemctl start firewalld.service
и нажмите на клавишу Enter. - Управление утилитой осуществляется от имени суперпользователя, поэтому придется подтвердить подлинность, указав пароль.
- Чтобы убедиться в функционировании сервиса, укажите
firewall-cmd --state
. - В открывшемся графическом окне повторно подтвердите подлинность.
- Отобразится новая строка. Значение «running» говорит о том, что фаервол работает.
Если же вам однажды потребуется временно или перманентно отключить брандмауэр, советуем воспользоваться инструкцией, представленной в другой нашей статье по следующей ссылке.
Подробнее: Отключение Firewall в CentOS 7
Просмотр правил по умолчанию и доступных зон
Даже работающий в штатном режиме фаервол имеет свои определенные правила и доступные зоны. Перед началом редактирования политик советуем ознакомиться с текущей конфигурацией. Делается это при помощи простых команд:
- Определить функционирующую по умолчанию зону поможет команда
firewall-cmd --get-default-zone
. - После ее активации вы увидите новую строку, где отобразится необходимый параметр. Например, на скриншоте ниже активной считается зона «public».
- Однако активными могут быть сразу несколько зон, к тому же они привязываются к отдельному интерфейсу. Узнайте эту информацию через
firewall-cmd --get-active-zones
. - Команда
firewall-cmd --list-all
выведет на экран правила, заданные для зоны по умолчанию. Обратите внимание на скриншот ниже. Вы видите, что активной зоне «public» присвоено правило «default» — функционирование по умолчанию, интерфейс «enp0s3» и добавлено два сервиса. - Если появилась надобность узнать все доступные зоны брандмауэра, введите
firewall-cmd --get-zones
. - Параметры же конкретной зоны определяются через
firewall-cmd --zone=name --list-all
, где name — название зоны.
После определения необходимых параметров можно переходить к их изменению и добавлению. Давайте детально разберем несколько самых популярных конфигураций.
Настройка зон интерфейсов
Как вы знаете из информации выше, для каждого интерфейса определяется своя зона по умолчанию. Он будет находиться в ней до тех пор, пока настройки не изменятся пользователем или программно. Возможен ручной перенос интерфейса в зону на одну сессию, и осуществляется он активацией команды sudo firewall-cmd --zone=home --change-interface=eth0
. Результат «success» свидетельствует о том, что перенос прошел успешно. Напомним, что такие настройки сбрасываются сразу после перезагрузки фаервола.
При подобном изменении параметров следует учитывать, что работа сервисов может быть сброшена. Некоторые из них не поддерживают функционирование в определенных зонах, допустим, SSH хоть и доступен в «home», но в пользовательских или особенных сервис работать откажется. Убедиться в том, что интерфейс был успешно привязан к новой ветви можно, введя firewall-cmd --get-active-zones
.
Если вы захотите сбросить произведенные ранее настройки, просто выполните рестарт брандмауэра: sudo systemctl restart firewalld.service
.
Порой не всегда удобно изменять зону интерфейса всего на одну сессию. В таком случае потребуется редактировать конфигурационный файл, чтобы все настройки ввелись на перманентной основе. Для этого мы советуем использовать текстовый редактор nano, который устанавливается с официального хранилища sudo yum install nano
. Далее остается произвести такие действия:
- Откройте конфигурационный файл через редактор, введя
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
, где eth0 — название необходимого интерфейса. - Подтвердите подлинность учетной записи для выполнения дальнейших действий.
- Отыщите параметр «ZONE» и поменяйте его значение на нужное, например,
public
илиhome
. - Зажмите клавиши Ctrl + O, чтобы сохранить изменения.
- Не изменяйте имя файла, а просто нажмите на Enter.
- Выйдите из текстового редактора через Ctrl + X.
Теперь зона интерфейса будет такой, какой вы ее указали, до момента следующего редактирования конфигурационного файла. Чтобы обновленные параметры вступили в действие, выполните sudo systemctl restart network.service
и sudo systemctl restart firewalld.service
.
Установка зоны по умолчанию
Выше мы уже демонстрировали команду, которая позволяла узнать установленную по умолчанию зону. Ее также можно изменить, установив параметр на свой выбор. Для этого в консоли достаточно прописать sudo firewall-cmd --set-default-zone=name
, где name — имя необходимой зоны.
Об успешности выполнения команды будет свидетельствовать надпись «success» в отдельной строке. После этого все текущие интерфейсы привяжутся к указанной зоне, если другого не задано в конфигурационных файлах.
Создание правил для программ и утилит
В самом начале статьи мы рассказали о действии каждой зоны. Определение сервисов, утилит и программ в такие ветви позволит применить для каждой из них индивидуальные параметры под запросы каждого пользователя. Для начала советуем ознакомиться с полным списком доступных на данный момент сервисов: firewall-cmd --get-services
.
Результат отобразится прямо в консоли. Каждый сервер разделен пробелом, и в списке вы сможете с легкостью отыскать интересующий вас инструмент. Если же нужный сервис отсутствует, его следует дополнительно установить. О правилах инсталляции читайте в официальной документации программного обеспечения.
Указанная выше команда демонстрирует только названия сервисов. Детальная информация по каждому из них получается через индивидуальный файл, находящийся по пути /usr/lib/firewalld/services
. Такие документы имеют формат XML, путь, например, к SSH выглядит так: /usr/lib/firewalld/services/ssh.xml
, а документ имеет следующее содержимое:
SSH
Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.
Активируется поддержка сервиса в определенной зоне вручную. В «Терминале» следует задать команду sudo firewall-cmd --zone=public --add-service=http
, где --zone=public — зона для активации, а --add-service=http — название сервиса. Учтите, что такое изменение будет действовать только в пределах одной сессии.
Перманентное добавление осуществляется через sudo firewall-cmd --zone=public --permanent --add-service=http
, а результат «success» свидетельствует об успешном завершении операции.
Просмотреть полный список постоянных правил для определенной зоны можно, отобразив список в отдельной строке консоли: sudo firewall-cmd --zone=public --permanent --list-services
.
Решение неполадки с отсутствием доступа к сервису
Стандартно в правилах брандмауэра указаны самые популярные и безопасные сервисы как разрешенные, однако некоторые стандартные или сторонние приложения он блокирует. В таком случае пользователю вручную потребуется изменить настройки, чтобы решить проблему с доступом. Сделать это можно двумя разными методами.
Проброс порта
Как известно, все сетевые сервисы используют определенный порт. Он запросто обнаруживается межсетевым экраном, и по нему могут выполняться блокировки. Чтобы избежать таких действий со стороны фаервола, нужно открыть необходимый порт командой sudo firewall-cmd --zone=public --add-port=0000/tcp
, где --zone=public — зона для порта, --add-port=0000/tcp — номер и протокол порта. Опция firewall-cmd --list-ports
отобразит список открытых портов.
Если же вам необходимо открыть порты, входящие в диапазон, воспользуйтесь строкой sudo firewall-cmd --zone=public --add-port=0000-9999/udp
, где --add-port=0000-9999/udp — диапазон портов и их протокол.
Приведенные выше команды лишь позволят протестировать применение подобных параметров. Если оно прошло успешно, следует добавить эти же порты в постоянные настройки, а делается это путем ввода sudo firewall-cmd --zone=public --permanent --add-port=0000/tcp
или sudo firewall-cmd --zone=public --permanent --add-port=0000-9999/udp
. Список открытых постоянных портов просматривается так: sudo firewall-cmd --zone=public --permanent --list-ports
.
Определение сервиса
Как видите, добавление портов не вызывает никаких трудностей, но процедура усложняется в том случае, когда приложений используется большое количество. Отследить все использующиеся порты становится трудно, ввиду чего более правильным вариантом станет определение сервиса:
- Скопируйте конфигурационный файл, написав
sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml
, где service.xml — имя файла сервиса, а example.xml — название его копии. - Откройте копию для изменения через любой текстовый редактор, к примеру,
sudo nano /etc/firewalld/services/example.xml
. - Для примера мы создали копию сервиса HTTP. В документе вы в основном видите различные метаданные, например, короткое имя и описание. Влияет на работу сервера только смена номера порта и протокола. Над строкой «</service>» следует добавить
<port protocol="tcp" port="0000"/>
, чтобы открыть порт. tcp — использующийся протокол, а 0000 — номер порта. - Сохраните все изменения (Ctrl + O), закройте файл (Ctrl + X), а затем перезапустите фаервол для применения параметров через
sudo firewall-cmd --reload
. После этого сервис появится в списке доступных, который можно просмотреть черезfirewall-cmd --get-services
.
Вам остается только выбрать наиболее подходящий метод решения неполадки с доступом к сервису и выполнить приведенные инструкции. Как видите, все действия выполняются достаточно легко, и никаких трудностей возникнуть не должно.
Создание пользовательских зон
Вы уже знаете, что изначально в FirewallD создано большое количество разнообразных зон с определенными правилами. Однако случаются ситуации, когда системному администратору требуется создать пользовательскую зону, как, например, «publicweb» для установленного веб-сервера или «privateDNS» — для DNS-сервера. На этих двух примерах мы и разберем добавление ветвей:
- Создайте две новые перманентные зоны командами
sudo firewall-cmd --permanent --new-zone=publicweb
иsudo firewall-cmd --permanent --new-zone=privateDNS
. - Они будут доступны после перезагрузки инструмента
sudo firewall-cmd --reload
. Для отображения перманентных зон введитеsudo firewall-cmd --permanent --get-zones
. - Присвойте им нужные сервисы, например, «SSH», «HTTP» и «HTTPS». Делается это командами
sudo firewall-cmd --zone=publicweb --add-service=ssh
,sudo firewall-cmd --zone=publicweb --add-service=http
иsudo firewall-cmd --zone=publicweb --add-service=https
, где --zone=publicweb — название зоны для добавления. Просмотреть активность сервисов можно, прописавfirewall-cmd --zone=publicweb --list-all
.
Из этой статьи вы узнали, как создавать пользовательские зоны и добавлять в них сервисы. Об установке их по умолчанию и присвоении интерфейсов мы уже рассказали выше, вам остается лишь указать правильные названия. Не забывайте перезагружать межсетевой экран после внесения любых перманентных изменений.
Как видите, брандмауэр FirewallD — достаточно объемный инструмент, позволяющий произвести максимально гибкую конфигурацию межсетевого экрана. Осталось только убедиться в том, что утилита запускается вместе с системой и указанные правила сразу же начинают свою работу. Сделайте это командой sudo systemctl enable firewalld
.
Как открыть доступ по порту 5900 в CentOS с настройками по умолчанию без танцев с бубном одной командой?
Нашёл: Applications -> Sundry -> Firewall:
Configuration: Permanent
Zones: public
Ports -> Add -> 5900 (tcp) -> OK
Всё, терминал не нужен J