Как установить и настроить брандмауэр FirewallD на Centos 8 Linux

12 set 2022 8 min di lettura
Как установить и настроить брандмауэр FirewallD на Centos 8 Linux
Indice dei contenuti

Введение

Правильно настроенный брандмауэр является одним из наиболее важных аспектов общей безопасности системы.

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.

Обязательно разрешите все входящие подключения, необходимые для правильной работы системы, и ограничьте все ненужные подключения.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.