Cd-m.ru

ПК Журнал СД-М
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как настроить межсетевой экран с FirewallD на CentOS 7

Как настроить межсетевой экран с FirewallD на CentOS 7

How to Set Up a Firewall with FirewallD on CentOS 7

В этом руководстве мы покажем вам, как настроить брандмауэр с FirewallD в вашей системе CentOS 7, и объясним вам основные концепции FirewallD.

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

FirewallD — это законченное решение брандмауэра, которое управляет системными правилами iptables и предоставляет интерфейс D-Bus для их работы. Начиная с CentOS 7, FirewallD заменяет iptables как инструмент управления брандмауэром по умолчанию.

Перед началом работы с этим учебным курсом убедитесь, что вы вошли на свой сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Лучше всего запускать административные команды как пользователь sudo вместо root. Если у вас нет пользователя sudo в вашей системе CentOS, вы можете создать его, следуя этим инструкциям .

Основные концепции Firewalld

FirewallD использует понятия зон и сервисов вместо цепочки и правил iptables. На основе зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или запрещен в систему и из нее.

FirewallD можно настроить и управлять с помощью firewall-cmd утилиты командной строки.

Firewalld Zones

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

Ниже приведены зоны, предоставленные FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежного до доверенного:

  • drop: все входящие соединения сбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
  • block: все входящие соединения отклоняются с icmp-host-prohibited сообщением для IPv4 и icmp6-adm-prohibited для IPv6n. Разрешены только исходящие соединения.
  • public: для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие подключения.
  • external: для использования во внешних сетях с включенным маскированием NAT, когда ваша система выступает в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения.
  • internal: для использования во внутренних сетях, когда ваша система выступает в качестве шлюза или маршрутизатора. Другие системы в сети, как правило, доверяют. Разрешены только выбранные входящие соединения.
  • dmz : используется для компьютеров, расположенных в демилитаризованной зоне, которые имеют ограниченный доступ к остальной части вашей сети. Разрешены только выбранные входящие соединения.
  • work: Используется для работы машин. Другие компьютеры в сети, как правило, являются доверенными. Разрешены только выбранные входящие соединения.
  • home : Используется для домашних машин. Другие компьютеры в сети, как правило, являются доверенными. Разрешены только выбранные входящие соединения.
  • trusted: все сетевые подключения принимаются. Доверяйте всем компьютерам в сети.

Услуги брандмауэра

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

Firewalld Runtime и постоянные настройки

Firewalld использует два отдельных набора конфигурации, среду выполнения и постоянную конфигурацию.

Конфигурация времени выполнения является фактической рабочей конфигурацией, и она не является постоянной при перезагрузке. Когда служба Firewalld запускается, она загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.

По умолчанию при внесении изменений в конфигурацию Firewalld с помощью firewall-cmd утилиты эти изменения применяются к конфигурации времени выполнения. Чтобы сделать изменения постоянными, вам нужно использовать —permanent опцию.

Установка и включение FirewallD

Firewalld по умолчанию устанавливается в CentOS 7, но если он не установлен в вашей системе, вы можете установить пакет, набрав:

Сервис Firewalld по умолчанию отключен. Вы можете проверить состояние брандмауэра с помощью:

Если вы только что установили или никогда не активировали ранее, команда напечатает not running . В противном случае вы увидите running .

Чтобы запустить службу FirewallD и включить ее при загрузке, введите:

Работа с Firewalld Zones

После первого включения службы FirewallD public зона становится зоной по умолчанию. Вы можете просмотреть зону по умолчанию, набрав:

Чтобы получить список всех доступных зон, введите:

По умолчанию всем сетевым интерфейсам назначена зона по умолчанию. Чтобы проверить, какие зоны используются вашим сетевым интерфейсом (ами), наберите:

Вывод выше говорит нам, что оба интерфейса eth0 и eth1 назначены для публичной зоны.

Вы можете распечатать настройки конфигурации зоны с помощью:

Из приведенного выше вывода, мы можем видеть , что публика зона активна и набор по умолчанию, используемый как eth0 и eth1 интерфейсов. Также разрешены подключения, связанные с DHCP-клиентом и SSH.

Если вы хотите проверить настройки всех доступных зон, введите:

Команда выводит огромный список с настройками всех доступных зон.

Изменение зоны интерфейса

Вы можете легко изменить интерфейсную зону, используя —zone опцию using в сочетании с —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 файл и изменить краткое имя и описание службы в пределах <short> и <description> тегов. Самый важный тег, который вам нужно изменить, — это 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 (demilitarized), потому что по умолчанию она разрешает только SSH-трафик. Чтобы изменить зону по умолчанию на dmz и назначить ее eth0 интерфейсу, выполните следующие команды:

Откройте порты HTTP и HTTPS:

Чтобы открыть порты HTTP и HTTPS, добавьте правила постоянного обслуживания в зону dmz:

Чтобы изменения вступили в силу немедленно, перезагрузите брандмауэр:

Чтобы проверить параметры конфигурации зоны dmz, введите:

Вывод выше говорит нам, что dmz является зоной по умолчанию, применяется к eth0 интерфейсу и порты ssh (22) http (80) и https (443) открыты.

Вывод

Вы узнали, как настроить и управлять службой FirewallD в вашей системе CentOS.

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

CentOS 7: настройка firewall-cmd

Для начала посмотрим стату демона:
systemctl status firewalld
● firewalld.service — firewalld — dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-01-24 04:22:44 EST; 2 weeks 4 days ago
Docs: man:firewalld(1)
Main PID: 683 (firewalld)
Tasks: 2
Memory: 908.0K
CGroup: /system.slice/firewalld.service
└─683 /usr/bin/python -Es /usr/sbin/firewalld —nofork —nopid

Просто проверить статус можно так:
firewall-cmd —state
running

Добавлениеудаление из автозагрузки:
systemctl disable firewalld
systemctl enable firewalld

Остановказапуск сервиса:
systemctl stop firewalld
systemctl start firewalld

Выведем зону по умолчанию:
firewall-cmd —get-default-zone
public

Кстати изменить ее можно например так:
firewall-cmd —set-default-zone=home

Так-же в файрволле есть понятие "зоны", выведем их список:
firewall-cmd —get-zones
block dmz drop external home internal public trusted work

Выведем список активных зон:
firewall-cmd —get-active-zones
public
interfaces: enp0s3

Что означают зоны:
block — входящие соединения отклоняются (reject) с ответом icmp-host-prohibited icmp6-adm-prohibited, разрешены соединения инициированные системой
dmz — демилитаризованная зона, разрешены указанные входящие соединения
drop — все входящие пакеты отклоняются (drop) без ответа, разрешены исходящие соединения
external — зона внешнего интерфейса, разрешены указанные входящие соединения
home — домашняя (доверенная) зона, разрешены указанные входящие соединения
internal — зона внутреннего интерфейса, разрешены указанные входящие соединения
public — по умолчанию, разрешаем указанные входящие соединения
trusted — разрешено все
work — зона рабочей сети, разрешены указанные входящие соединения

Из вывода мы видим, что интерфейс enp0s3 принадлежит зоне public

Добавить интейрфес в зону можно так:
firewall-cmd —get-zone-of-interface=enp0s3

Посмотрим файл сетевого интерфейса:
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 | grep ZONE
ZONE=public

Какие интерфейсы принадлежат зоне public:
firewall-cmd —zone=public —list-interfaces
enp0s3

Что вообще разрешено:
firewall-cmd —permanent —list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Задача: убрать неиспользуемый сервис dhcpv6-client, добавить ssh на нестандартном порту:
firewall-cmd —permanent —zone=public —remove-service=dhcpv6-client
firewall-cmd —permanent —zone=public —add-port=2222/tcp

Заметьте, permanent говорит о том, что правила сохранятся после перезагрузки

Перечитаем правила (без потери текущих соединений):
firewall-cmd —reload

Перечитаем правила (с потерей текущих соединений):
firewall-cmd —complete-reload

Проверим открытость порта:
firewall-cmd —zone=public —list-ports

Заставим ssh работать по этому порту:
vi /etc/ssh/sshd_config
Port 22
Port 2222

Рестартуем сервис:
systemctl restart sshd.service

Теперь нужно либо отключить selinux, т.к. он не даст работать ssh на нестандартном порту:
Отключить SELINUX
vim /etc/sysconfig/selinux
SELINUX=disabled
reboot

Либо решить задачу с помощью policycoreutils-python:
yum provides semanage
yum install policycoreutils-python
semanage port -a -t ssh_port_t -p tcp 2222

Проверяем, если есть подключение — уберем стандартный порт:
firewall-cmd —permanent —zone=public —remove-service=ssh
firewall-cmd —reload

Заметьте, permanent говорит о том, что правила сохранятся после перезагрузки

Несколько примеров возможных правил

Добавить диапазон портов:
firewall-cmd —zone=public —add-port=1025-1125/udp

Маскарадинг (masquerade, nat):

Проверить статус (возможно указать другую зону):
firewall-cmd —zone=external —query-masquerade

Включить:
firewall-cmd —zone=external —add-masquerade

Перенаправление входящие подключений с 22 порта на удаленный хост без изменения порта назначения:
firewall-cmd —zone=external —add-forward-port=port=22:proto=tcp:toaddr=10.0.2.30

Перенаправление входящие подключений с 22 порта на удаленный хост с изменением порта назначения:
firewall-cmd —zone=external —add-forward-port=port=22:proto=tcp:toport=2222:toaddr=10.0.2.30

Вывести список сервисов так:
firewall-cmd —get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet
bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns
docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication
freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client
ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve
mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole
pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius
rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync
squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm
vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

Информацию о сервисах можно найти тут:
ls -l /usr/lib/firewalld/services/
-rw-r—r—. 1 root root 412 Apr 11 2018 amanda-client.xml
-rw-r—r—. 1 root root 447 Apr 11 2018 amanda-k5-client.xml
-rw-r—r—. 1 root root 320 Apr 11 2018 bacula-client.xml
-rw-r—r—. 1 root root 346 Apr 11 2018 bacula.xml
-rw-r—r—. 1 root root 275 Apr 11 2018 bitcoin-rpc.xml
-rw-r—r—. 1 root root 307 Apr 11 2018 bitcoin-testnet-rpc.xml
-rw-r—r—. 1 root root 281 Apr 11 2018 bitcoin-testnet.xml
-rw-r—r—. 1 root root 244 Apr 11 2018 bitcoin.xml
-rw-r—r—. 1 root root 294 Apr 11 2018 ceph-mon.xml
Вывод обрезан
.

Добавить http сервис в зону public (временно и постоянно):
firewall-cmd —zone=public —add-service=http
firewall-cmd —zone=public —permanent —add-service=http

Вывести список временных и постоянных правил из зоны public:
firewall-cmd —zone=public —list-services
firewall-cmd —zone=public —permanent —list-services

Если не нашли нужного сервиса, делаем так:

Способ 1, открытие портов:

Открываем порт 1025 протокола tcp в зоне public (временно или перманентно):
firewall-cmd —zone=public —add-port=1025/tcp
firewall-cmd —zone=public —permanent —add-port=1025/tcp

И проверяем:
firewall-cmd —list-ports
1025/tcp

Способ 2, оперделение сервисов:

Скопируем например конфиг ssh
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/newssh.xml

vi /etc/firewalld/services/newssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>NEWSSH</short>
<description>Secure Shell (SSH) is a protocol on non standard ports</description>
<port protocol="tcp" port="2223"/>
<port protocol="tcp" port="2224"/>
</service>

Перечитаем правила:
firewall-cmd —reload

Сервис появился в списке:
firewall-cmd —get-services
. newssh .

Создание зон

Создадим зону с названием newsshzone:
firewall-cmd —permanent —new-zone=newsshzone

firewall-cmd —permanent —get-zones
. newsshzone .

Перечитаем конфиг, чтоб получить к ним доступ:
firewall-cmd —reload

Читать еще:  Как написать в службу поддержки Авито

Теперь можно работать с зоной (временно и перманентно):
firewall-cmd —zone=newsshzone —add-service=ssh
firewall-cmd —zone=newsshzone —permanent —add-service=ssh

И привязывать ее к интерфейсам:
firewall-cmd —zone=newsshzone —change-interface=enp0s3

Для постоянного связывания интерфейса с зоной прописываем его в конфиге:
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
ZONE=newsshzone

И перезагружаем сервисы:
sudo systemctl restart network
sudo systemctl restart firewalld

Проверяем:
firewall-cmd —get-active-zones
newsshzone
interfaces: enp0s3

firewall-cmd —zone=newsshzone —list-services
ssh

Назначить зону по умолчанию:
firewall-cmd —set-default-zone=newsshzone

Настройка firewalld в CentOS

Firewalld — утилита для управления встроенным в ядро Linux брандмауэром Netfilter. Несмотря на собственный синтаксис, имеет такой же принцип работы, как Iptables. Дополнительно про управление Netfilter при помощи последнего.

Установка и запуск

В некоторых системах CentOS может не оказаться firewalld. Для его установки вводим:

yum install firewalld

Для автоматического зауска вводим:

systemctl enable firewalld

И для запуска службы:

systemctl start firewalld

Общие команды для управления firewalld

Мягко перечитать правила (применить настройки):

Перечитать правила и сбросить текущие подключения:

* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.

Посмотреть созданные правила:

systemctl stop firewalld

systemctl start firewalld

systemctl disable firewalld

systemctl enable firewalld

Сохранить текущие правила, сделав их постоянными (permanent):

Управление правилами

Синтаксис

Общий синтаксис для работы с правилами:

firewall-cmd [опции] [зона] <правило>

* порядок следования параметров не важен.

  • [опции] — дополнительные параметры для создаваемого правила, например —permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный.
  • [зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, —zone=dmz. Не обязательный.
  • <правило> — само правило. Обязательный.

Чтобы правила применялись, не забываем их перечитывать:

Добавление портов

Открыть порт 80:

firewall-cmd —permanent —add-port=80/tcp

* где ключ —permanent — добавить постоянное правило (будет действовать после перезагрузки).

Добавить правило для определенной зоны:

firewall-cmd —permanent —zone=external —add-port=80/tcp

Добавить диапазон портов:

firewall-cmd —permanent —add-port=6500-6700/udp

Добавить несколько правил одной командой:

firewall-cmd —permanent —add-port=80/tcp —add-port=443/tcp

Добавление сервиса

Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.

Посмотреть список доступных служб:

Разрешить порт, например, для сервиса ntp:

firewall-cmd —permanent —add-service=ntp

Создать собственную службу:

firewall-cmd —permanent —new-service=name-service

* где name-service — произвольное имя создаваемой службы.

Добавить порт, например TCP 2200 к службе:

firewall-cmd —permanent —service=name-service —add-port=2200/tcp

Задать описание для удобства:

firewall-cmd —permanent —service=name-service —set-short="Service With This Name"

firewall-cmd —permanent —service=name-service —set-description="Long Description For Service With This Name"

Информацию о созданном сервисе можно получить командой:

Теперь созданную службу можно использовать для создания правил, например:

firewall-cmd —permanent —add-service=name-service

Rich-Rule

rich-rule позволяет создавать правила с условиями. Рассмотрим несколько примеров:

1. Разрешаем службу http с условием, что запросы будут с определенных IP-адресов (подсети 192.168.0):

firewall-cmd —permanent —add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'

2. Или для конкретного порта:

firewall-cmd —permanent —add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" port port="5038" protocol="tcp" accept'

3. Чтобы заблокировать подсеть можно воспользоваться командой:

firewall-cmd —permanent —add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"

Список правил с условиями можно отобразить командой:

Удаление правил

Аналогично созданию, но вместо add вводим remove, например —remove-port (удалит порт) или —remove-service (службу).

Удалим правило для открытия 80-о порта:

firewall-cmd —permanent —remove-port=80/tcp

Управление зонами

Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.

Посмотреть список всех имеющихся зон:

Посмотреть список используемых зон:

Информация о конкретной зоне:

firewall-cmd —list-all —zone=public

Создать правило для зоны public:

firewall-cmd —permanent —zone=public —add-port=80/tcp

Добавить сетевой интерфейс в зону:

firewall-cmd —permanent —zone=public —remove-interface=ens34

firewall-cmd —permanent —zone=internal —add-interface=ens34

* сначала нужно удалить адаптер из текущей зоны.

Задать действие по умолчанию для зоны:

firewall-cmd —permanent —zone=public —set-target=DROP

Создать новую зону:

firewall-cmd —permanent —new-zone=custom_zone

* чтобы система увидела новую зону custom_zone, команда reload обязательная.

Пример настройки NAT (шлюза)

firewall-cmd —permanent —zone=dmz —add-masquerade

* без указания зон, будет включен для public и external.

Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:

firewall-cmd —permanent —direct —add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE

* правило включает маскарадинг на внешнем интерфейсе ens33. Где опция —direct требуется перед всеми пользовательскими правилами (—passthrough, —add-chain, —remove-chain, —query-chain, —get-chains, —add-rule, —remove-rule, —query-rule, —get-rules); nat — таблица, в которую стоит добавить правило; POSTROUTING 0 — цепочка в таблице nat; опция MASQUERADE указывает сетевому экрану менять внутренний IP-адрес на внешний.

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT

* добавляет в таблицу filter (цепочку FORWARD) правило, позволяющее хождение трафика с ens32 на ens33.

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT

* добавляет правило в таблицу filter (цепочку FORWARD), позволяющее хождение трафика с ens33 на ens32 для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED) и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).

systemctl restart firewalld

* для того, чтобы сервер CentOS заработал в качестве шлюза, также необходимо настроить ядро. Подробнее в статье Настройка Интернет шлюза на CentOS 7.

Для просмотра созданных данным способом правил используем команду:

firewall-cmd —direct —get-all-rules

Проброс портов

Проброс настраивается со следующим синтаксисом:

firewall-cmd —add-forward-port=port=<порт прослушивания>:proto=tcp|udp|sctp|dccp:toport=<порт назначения>:toaddr=<куда перенаправить>

firewall-cmd —zone=external —permanent —add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15

* в данном примере мы будем слушать запросы на порту 25 и передодить их на узел 192.168.0.15 и порт 8025.

Запретить или разрешить трафик между интерфейсами

Предположим, у нас есть два внутренних сетевых интерфейса ens35 и ens36. Мы хотим контролировать трафик между ними.

Запретить

Применяется в случаях, когда на сервере включен FORWARD, но необходимо блокировать трафик между определенными сегменами сети.

Вводим следующие команды:

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j DROP

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j DROP

Разрешить

Применяется в случаях, когда интерфейсы находятся в зонах, где по умолчанию, трафик блокируется.

Для разрешения команды, практически, аналогичные:

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j ACCEPT

Разрешить трафик в одном направлении

В предыдущих примерах мы разрешали трафик в обоих направлениях. Если необходимо сделать так, чтобы только сеть ens35 видела сеть ens36, вводим одну команду:

firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT

Возможные проблемы при работе с firewalld

1. Ошибка command not found (команда не найдена).

Возможные причины: не установлен пакет или не запущена служба.

Выполняем установку пакета firewalld:

yum install firewalld firewall-config

systemctl start firewalld

2. Не применяются правила.

Причина: не введена команда перезапуска правил.

Если это не помогло, делаем перезапуск со сбросом подключений:

В некоторых случаях, необходимо перезапустить сетевые службы:

systemctl restart network

В исключительных случаях, перезагружаем компьютер:

3. The interface is under control of NetworkManager and already bound to the default zone.

Ошибка появляется при попытке удалить интерфейс из зоны, настройками которого управляет NetworkManager.

Читать еще:  Как открыть APK-файл на компьютере в Windows

Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:

И дописываем следующее:

* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.

Настройка FirewallD на сервере с CentOS 8 и 7

date26.02.2021
userVyacheslavK
directoryCentOS, Linux
commentsОдин комментарий

Начиная с CentoOS 7 для настройки правил фильтрации трафика появился новый инструмент firewalld. Именно его рекомендуется использовать для управления правилами iptables. В CentOS 8 вместо стандартного пакета фильтрации iptables теперь используется фреймворк nftables, и при настройке правил файервола через firewalld на самом деле вы настраиваете nftables. В этой статье мы рассмотрим установку, основные концепции и настройку межсетевого экрана firewalld на сервере под управлением CentOS 8 (в CentOS 7 все аналогично).

Основные концепции firewalld, зоны и правила

Перед тем как приступить к установке и настройке firewalld, мы познакомимся с понятием зон, которые используются для определения уровня доверия к различным соединениям. Для различных зон firewalld можно применить различные правила фильтрации, указывать активные опции брандмауэра в виде предварительно определенных служб, протоколов и портов, перенаправления портов и rich-rules.

Firewalld фильтрует входящий трафик по зонам в зависимости от примененных к зоне правил. Если IP-адрес отправителя запроса соответствует правилам какой-либо зоны, то пакет будет отправляться через эту зону. Если же адрес не соответствует ни одной из настроенных на сервере зоне, пакет будет обрабатываться зоной используемой по умолчанию. При установке firewalld зона по умолчанию называется public.

В firewalld есть зоны, где уже предварительно настроены разрешения для различных служб. Можно использовать эти настройки или создавать собственные зоны. Список зон по-умолчанию, которые создаются при установке firewalld (хранятся в каталоге /usr/lib/firewalld/zones/):

В firewalld используется два набора правил — постоянные и временные. Временные правила работают до перезагрузки сервера. По умолчанию при добавлении правил в firewalld, правила считаются временными (runtime). Чтобы добавить правило на постоянной основе нужно использовать флаг — permanent. Такие правила будут применяться после перезагрузки сервера.

Установка и включение firewalld в CentOS

В CentOS 7/8 firewalld устанавливается по умолчанию при установке ОС. Если вы его удалили и хотите установить firewalld, можете воспользоваться стандартным менеджером yum/dnf:

# yum install firewalld -y — для Centos 7
# dnf install firewalld -y — для Centos 8

установка firewalld в centos 8

Чтобы демон firewalld запускался автоматически со стартом сервера, нужно добавить его в автозагрузку:

# systemctl enable firewalld

# systemctl start firewalld

Проверить статус сервиса:

# systemctl status firewalld

Работа с правилами firewalld

Правила по умолчанию:

Перед настройкой правил firewalld, нужно проверить, какая зона используется по умолчанию:

firewall-cmd —get-default-zone

Так как firewalld мы только установили и еще не настраивали, у нас зона по-умолчанию public.

Проверим активную зону. Она также одна — public:

Как видим, сетевой интерфейс eth0 управляется зоной public.

# ip link show
Или
# nmcli device status

Чтобы посмотреть правила активной зоны, введите:

Из листинга видно, что в данную зону добавлены обычные операции, связанные с DHCP-клиентом и ssh.

Доступные зоны

Чтобы просмотреть список всех зон, нужно выполнить команду:

У меня получился такой список:

Чтобы проверить правила конкретной зоны, нужно добавить флаг — zone.

# firewall-cmd —zone=home —list-all

Правила всех зон, можно просмотреть командой:

Листинг будет довольно большой, так как зон может быть много.

Изменение зоны по умолчанию.

По умолчанию все сетевые интерфейсы расположены в зоне public, но их можно перенести в любую из зон, командой:

# firewall-cmd —zone=home —change-interface=eth0

После параметра —zone= указать нужную зону.

Чтобы изменить зону по умолчанию, нужно применить команду:

firewall-cmd —set-default-zone

Добавление правил для приложений

Чтобы открыть порт для приложения, можно добавить в исключения сервис. Вывести список доступных сервисов:

firewall-cmd --get-services

Вывод будет содержать большое количество сервисов. Подробная информация о службе содержится в ее xml файле. Эти файлы расположены в директории /usr/lib/firewalld/services.

В XML файле есть описание сервиса, протокол и номер порта, который будет открыт в firewalld.

xml описания сервисов для firewalld

При добавлении правил, вы можете использовать параметр —add-service, чтобы открыть доступ определенному сервису:

# firewall-cmd —zone=public —add-service=http

# firewall-cmd —zone=public —add-service=https

После добавления правил, можно проверить, добавлены ли сервисы в указанную зону:

# firewall-cmd —zone=public —list-services

Если вы хотите сделать эти правила постоянными, при добавлении нужно добавить параметр —permanent.

Чтобы удалить сервис из зоны:

# firewall-cmd —permanent —zone=public —remove-service=http

# firewall-cmd —zone=public —permanent —list-services

Если вы хотите добавить в исключения свой сервис, вы можете создать файл xml самостоятельно и заполнить его. Можно скопировать данные с любого сервиса, изменить название, описание и номер порта.

Скопируем файл smtp.xml в директорию для работы с сервисами пользователей:

# cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services

Измените описание сервиса в файле.

создать собственную службу в firewalld

Сам файл xml тоже нужно переименовать по имени вашего сервиса. После чего, нужно перезагрузить firewalld и проверить есть ли наш сервис в списке:

Я назвал сервис test и в списке он появился:

Теперь можно добавить созданный сервис в любую зону:

# firewall-cmd —zone=public —add-service=test —permanent

# firewall-cmd —zone=public —permanent —list-services

Если вы на нашли нужный вам сервис в списке, вы можете открыть нужный порт на firewalld командой:

# firewall-cmd —zone=public —add-port=77/tcp — открыть 77 порт tcp
# firewall-cmd —zone=public —add-port=77/udp — открыть 77 порт udp
# firewall-cmd —zone=public —add-port=77-88/udp — открыть диапазон портов 77-88 udp
# firewall-cmd —zone=public —list-ports — проверить список разрешенных портов

Заблокировать/разрешить ICMP ответы:

# firewall-cmd —zone=public —add-icmp-block=echo-reply
# firewall-cmd —zone= public —remove-icmp-block=echo-reply

Удалить добавленный порт:

# firewall-cmd —zone=public —remove-port=77/udp — удалить временное правило 77 udp

# firewall-cmd —permanent —zone=public —remove-port=77/udp — удалить постоянное правило

firewall-cmd --zone=public —add-port - открыть порт в файерволе

Добавление собственных зон

Вы можете создать собственную зону (назову ее our):

# firewall-cmd —permanent —new-zone=our

После создания новой зоны, как и после создания сервиса, нужна перезагрузка firewalld:

Зона our доступна. Вы можете добавлять в нее сервисы или открывать определенные порты.

Firewalld: блокировка IP-адресов, создание исключений

Вы можете добавлять в исключения firewalld доверенные адреса IP адреса или блокировать нежелательные.

Чтобы добавить в исключения конкретный IP- адрес (например 8.8.8.8) на вашем сервере через firewalld, используйте команду:

# firewall-cmd —zone=public —add-rich-rule=’rule family=»ipv4″ source address=»8.8.8.8″ accept’

Проверьте зону, и убедитесь что IP добавлен в исключения в правиле rich rules:

# firewall-cmd —zone=public —list-all

Чтобы заблокировать IP, нужно заменить accept на reject:

# firewall-cmd —zone=public —add-rich-rule=’rule family=»ipv4″ source address=»8.8.4.4″ reject’

# firewall-cmd —zone=public —list-all

Можно разрешить определенную службу только для запросов с конкретного IP адреса:

#firewall-cmd —permanent —add-rich-rule ‘rule family=»ipv4″ source address=»10.10.1.0/24″ service name=»https» accept’

Если вам нужно срочно заблокировать вообще все запросы к серверу, используйте команду паники:

Отключить режим паники можно либо командой:

Либо перезагрузив сервер.

Вы можете заблокировать конфигурацию firewalld, чтобы локальные сервисы с правами root не могли изменить созданные вами правила файервола:

Отключить режим блокировки:

Перенаправление портов в firewalld

Вы можете создать правило перенаправления портов (port forwarding) в firewalld. Чтобы перенаправить 443 порт на 9090:

# firewall-cmd —zone=public —add-forward-port=port=443:proto=tcp:toport=9090 —permanent

Чтобы удалить правило перенаправления порта:

# firewall-cmd —zone=public —remove-forward-port=port=443:proto=tcp:toport=9090

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

page

page

page

alt=»информация об оборудовании компьютеров и серверов в glpi» width=»58″ height=»56″ /> Установка и настройка GLPI и FusionInventory, инвентаризация ИТ инфраструктуры
alt=»mdadm — faulty — сбойный диск» width=»58″ height=»56″ /> Программный RAID в Linux с помощью mdadm
alt=»подключение openvpn клиента к серверу» width=»58″ height=»56″ />Установка и настройка сервера OpenVPN на CentOS 7

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты