Введение
Правильно настроенный брандмауэр является одним из наиболее важных аспектов общей безопасности системы.
FirewallD — это комплексное решение брандмауэра, которое управляет системными правилами iptables и предоставляет интерфейс D-Bus для работы с ними. Начиная с CentOS 7, FirewallD заменяет iptables в качестве инструмента управления брандмауэром по умолчанию.
В этом руководстве мы покажем вам, как настроить брандмауэр с помощью FirewallD в вашей системе CentOS 8, и объясним вам основные концепции FirewallD.
Предпосылки
Прежде чем приступить к этому руководству, убедитесь, что вы вошли на сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Лучшей практикой является запуск административных команд от имени пользователя sudo, а не от root. Если в вашей системе CentOS нет пользователя sudo, вы можете создать его, следуя этим инструкциям.
Если вы хотите установить и настроить FirewallD на удаленном сервере, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Основные понятия брандмауэра
FirewallD использует концепции зон и служб, а не цепочку и правила iptables. В зависимости от зон и служб, которые вы настроите, вы можете контролировать, какой трафик разрешен или запрещен в системе и из нее.
FirewallD можно настроить и управлять с помощью утилиты командной строки firewall-cmd
.
Зоны брандмауэра
Зоны — это предопределенные наборы правил, которые определяют, какой трафик должен быть разрешен в зависимости от уровня доверия в сетях, к которым подключен компьютер. Сетевые интерфейсы и источники могут быть назначены зоне.
Ниже приведены зоны, предоставляемые FirewallD, отсортированные по уровню доверия зоны от недоверенных до доверенных:
- drop: все входящие соединения сбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
- block: все входящие соединения запрещаются с сообщением
icmp-host-prohibited
дляIPv4
иicmp6-adm-prohibited
для IPv6n. Разрешены только исходящие соединения. - public: для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие подключения.
- external: для использования во внешних сетях с включенной маскировкой NAT, когда система действует как шлюз или маршрутизатор. Разрешены только выбранные входящие подключения.
- internal: для использования во внутренних сетях, когда система действует как шлюз или маршрутизатор. Другие системы в сети, как правило, надежны. Разрешены только выбранные входящие подключения.
- dmz: используется для компьютеров, расположенных в демилитаризованной зоне, которые имеют ограниченный доступ к остальной части сети. Разрешены только выбранные входящие соединения.
- работа: используется для рабочих машин. Другие компьютеры в сети, как правило, надежны. Разрешены только выбранные входящие подключения.
- дом: используется для бытовых машин. Другие компьютеры в сети, как правило, надежны. Разрешены только выбранные входящие соединения.
- trust: принимаются все сетевые подключения. Доверяйте всем компьютерам в сети.
Службы брандмауэра
Службы брандмауэра — это предопределенные правила, которые применяются в зоне и определяют параметры, необходимые для разрешения входящего трафика для конкретной службы.
Firewalld Runtime и постоянные настройки
Firewalld использует два отдельных набора настроек: среду выполнения и постоянную конфигурацию.
Конфигурация среды выполнения является фактической рабочей конфигурацией и не сохраняется при перезагрузке. Когда служба Firewalld запускается, она загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.
По умолчанию, когда вы вносите изменения в конфигурацию Firewalld с помощью утилиты firewall-cmd
, эти изменения применяются к конфигурации времени выполнения. Чтобы сделать изменения постоянными, вы должны использовать параметр --permanent
.
Установите и включите FirewallD
Firewalld установлен по умолчанию в CentOS 8, но если он не установлен в вашей системе, вы можете установить пакет, набрав:
sudo dnf install firewalld
Служба Firewalld по умолчанию отключена. Вы можете проверить состояние брандмауэра с помощью:
sudo firewall-cmd --state
Если вы только что установили или никогда не активировали его раньше, команда напечатает not running
. В противном случае вы увидите running
.
Чтобы запустить службу FirewallD и включить ее при запуске, введите:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Работа с зонами брандмауэра
После первого включения службы FirewallD public
зона устанавливается в качестве зоны по умолчанию. Вы можете просмотреть зону по умолчанию, набрав:
sudo firewall-cmd --get-default-zone
public
Чтобы получить список всех доступных зон, введите:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
По умолчанию всем сетевым интерфейсам назначается зона по умолчанию. Чтобы проверить, какие зоны используются вашим типом сетевого интерфейса:
sudo firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
Приведенный выше вывод говорит нам, что оба интерфейса eth0
и eth1
назначены для общедоступной зоны.
Вы можете распечатать настройки конфигурации зоны с помощью:
sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Из приведенного выше вывода видно, что общедоступная зона активна и установлена по умолчанию, используемой интерфейсами eth0
и eth1
. Кроме того, разрешены клиентские соединения DHCP и SSH.
Если вы хотите проверить конфигурации всех доступных зон, введите:
sudo firewall-cmd --list-all-zones
Команда выводит огромный список с настройками всех доступных зон.
Изменить зону интерфейса
Вы можете легко изменить зону интерфейса, используя параметр --zone
в сочетании с параметром --change-interface
. Следующая команда назначит интерфейс eth1
рабочей области:
sudo firewall-cmd --zone=work --change-interface=eth1
Проверьте изменения, набрав:
sudo firewall-cmd --get-active-zones
work
interfaces: eth1
public
interfaces: eth0
Изменить зону по умолчанию
Чтобы изменить зону по умолчанию, используйте параметр --set-default-zone
, за которым следует имя зоны, которую вы хотите установить по умолчанию.
Например, чтобы изменить зону по умолчанию на домашнюю, вам нужно выполнить следующую команду:
sudo firewall-cmd --set-default-zone=home
Проверьте изменения с помощью:
sudo firewall-cmd --get-default-zone
home
Открытие порта или сервиса
С помощью FirewallD вы можете разрешить трафик для определенных портов на основе предопределенных правил, называемых службами.
Чтобы получить список всех доступных предопределенных служб, введите:
sudo firewall-cmd --get-services
....
ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex plexmediaserver pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client....
Дополнительную информацию о каждой службе можно найти, открыв соответствующий XML-файл в каталоге /usr/lib/firewalld/services
. Например, служба HTTP определяется следующим образом:
Чтобы разрешить входящий HTTP-трафик (порт 80
) для интерфейсов в общедоступной области, только для текущего сеанса (конфигурация времени выполнения), введите:
sudo firewall-cmd --zone=public --add-service=http
Если вы меняете зону по умолчанию, вы можете переопределить параметр --zone
.
Чтобы убедиться, что служба была успешно добавлена, используйте параметр --list-services
:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Если вы хотите оставить порт 80 открытым после перезагрузки, вы должны снова ввести ту же команду, но на этот раз с параметром --permanent
:
sudo firewall-cmd --permanent --zone=public --add-service=http
Используйте --list-services
вместе с параметром --permanent
для проверки изменений:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
Синтаксис удаления службы такой же, как и при добавлении службы. Просто используйте --remove-service
вместо --add-service
:
sudo firewall-cmd --zone=public --remove-service=http --permanent
Приведенная выше команда удаляет службу http из постоянной конфигурации общедоступной зоны.
Что делать, если я запускаю приложение, такое как Plex Media Server, для которого недоступна соответствующая служба?
В подобных ситуациях у вас есть два варианта. Вы можете открыть соответствующие порты или определить новую службу FirewallD.
Например, сервер Plex прослушивает порт 32400 и использует TCP, чтобы открыть порт в общедоступной области для текущего сеанса, используйте параметр --add-port=
:
sudo firewall-cmd --zone=public --add-port=32400/tcp
Протоколы могут быть tcp
или udp
.
Чтобы убедиться, что порт добавлен правильно, используйте параметр --list-ports
:
sudo firewall-cmd --zone=public --list-ports
32400/tcp
Чтобы порт 32400
открытым после перезагрузки, добавьте правило в постоянные настройки, выполнив ту же команду с параметром --permanent
.
Синтаксис удаления порта такой же, как и при добавлении порта. Просто используйте --remove-port
вместо --add-port
.
sudo firewall-cmd --zone=public --remove-port=32400/tcp
Создайте новую службу FirewallD
Как мы уже упоминали, службы по умолчанию хранятся в каталоге /usr/lib/firewalld/services
. Самый простой способ создать новую службу — скопировать существующий файл службы в каталог /etc/firewalld/services
, который является путем к созданным пользователями службам, и изменить настройки файла.
Например, чтобы создать определение службы для Plex Media Server, мы можем использовать файл службы SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
Откройте только что созданный файл plexmediaserver.xml
и измените краткое имя и описание службы в тегах <short>
и <description>
. Наиболее важным тегом, который вам необходимо изменить, является тег port
, который определяет номер порта и протокол, который вы хотите открыть.
В следующем примере мы открываем порты 1900
UDP и 32400
TCP.
sudo vi /etc/firewalld/services/plexmediaserver.xml
Отредактируйте файл следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>
Сохраните файл и закройте файл.
Перезагрузите службу FirewallD:
sudo firewall-cmd --reload
Теперь вы можете использовать сервис plexmediaserver
в своих регионах, как и любой другой сервис.
Перенаправление портов с помощью Firewalld
Чтобы перенаправить трафик с одного порта на другой порт или адрес, сначала включите маскирование для нужной зоны с помощью --add-masquerade
. Например, чтобы включить маскирование для зоны external
типа:
sudo firewall-cmd --zone=external --add-masquerade
- Перенаправить трафик с одного порта на другой на том же сервере
В следующем примере мы перенаправляем трафик с порта 80
на порт 8080
на том же сервере:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
- Перенаправить трафик на другой сервер
В следующем примере мы перенаправляем трафик с порта 80
на порт 80
на сервере с IP 10.12.12.22
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.12.12.22
- Перенаправлять трафик на другой сервер через другой порт
В следующем примере мы перенаправляем трафик с порта 80
на порт 8080
на сервере с IP 10.12.12.22
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.12.12.22
Если вы хотите сделать переадресацию постоянной, добавьте параметр --permanent
.
Создайте набор правил с помощью FirewallD
В следующем примере мы покажем, как настроить брандмауэр, если вы используете веб-сервер Предположим, что ваш сервер имеет только один интерфейс eth0
, и вы хотите разрешить входящий трафик только через порты SSH, HTTP и HTTPS.
- Измените зону по умолчанию на dmz.
Мы будем использовать зону DMZ (демилитаризованную), потому что по умолчанию она разрешает только SSH-трафик. Чтобы изменить зону по умолчанию в dmz и назначить ее интерфейсу eth0
, выполните следующие команды:
sudo firewall-cmd --set-default-zone=dmz
- Откройте порты HTTP и HTTPS:
Чтобы открыть порты HTTP и HTTPS, добавьте постоянные правила обслуживания в зону dmz:
sudo firewall-cmd --permanent --zone=dmz --add-service=http
Чтобы изменения вступили в силу немедленно, перезагрузите брандмауэр:
sudo firewall-cmd --reload
- Проверьте изменения
Чтобы проверить тип настроек конфигурации dmz-зоны:
sudo firewall-cmd --zone=dmz --list-all
dmz (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Вывод выше говорит нам, что dmz является зоной по умолчанию, она применяется к интерфейсу eth0
, а порты ssh (22), http (80) и https (443) открыты.
Вывод
Вы узнали, как настраивать и управлять службой FirewallD в вашей системе CentOS.
Обязательно разрешите все входящие подключения, необходимые для правильной работы системы, и ограничьте все ненужные подключения.