Поиск по сайту:

Как установить, настроить и использовать Firewalld в CentOS и Ubuntu


Firewalld (демон брандмауэра) — это альтернатива службе iptables, предназначенная для динамического управления системным брандмауэром с поддержкой зон сети (или брандмауэра) и предоставляющая интерфейс D-Bus для управления конфигурациями. Его легко использовать и настраивать, и теперь он является инструментом управления брандмауэром по умолчанию в RHEL/CentOS, Fedora и некоторых других дистрибутивах Linux.

В этой статье мы обсудим, как настроить системный брандмауэр с помощью firewalld и реализовать базовую фильтрацию пакетов в CentOS/RHEL 7 и Ubuntu.

Основы брандмауэра

Firewalld состоит из трех уровней:

  • основной уровень: отвечает за обработку конфигурации и серверную часть (перечислены ниже).
  • Интерфейс D-Bus: основное средство изменения и создания конфигурации брандмауэра.
  • бэкэнды: для взаимодействия с netfilter (собственный модуль ядра, используемый для межсетевого экрана). К ним относятся iptables, ip6tables, ebtables, ipset, nft, linnftables; сетевой менеджер; и модули.

Он управляет правилами брандмауэра путем реализации зон сети/брандмауэра, которые определяют уровень доверия сетевых подключений или интерфейсов. Другие поддерживаемые функции брандмауэра включают службы, прямую настройку (используется для прямой передачи необработанного синтаксиса iptables), IPSets, а также типы ICMP.

Firewalld поддерживает два типа сред конфигурации:

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

Инструмент командной строки firewall-cmd используется для управления средой выполнения и постоянной конфигурацией. Альтернативно вы можете использовать инструмент настройки графического пользовательского интерфейса (GUI) firewall-config для взаимодействия с демоном.

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

Файл глобальной конфигурации firewalld находится по адресу /etc/firewalld/firewalld.conf, а функции брандмауэра настраиваются в формате XML.

Понимание важных функций Firewalld

Центральной особенностью firewalld являются зоны сети/брандмауэра. Все остальные объекты ограничены зоной. Зона брандмауэра описывает уровень доверия для привязки соединения, интерфейса или исходного адреса.

Конфигурация по умолчанию включает несколько предопределенных зон, отсортированных в соответствии с уровнем доверия зон по умолчанию от ненадежных до доверенных: удалить, заблокировать, общедоступную, внешнюю, dmz, рабочую, домашнюю, внутреннюю и доверенную. Они определены в файлах, хранящихся в каталоге /usr/lib/firewalld/zones.

Вы можете настроить или добавить свои собственные зоны с помощью клиента CLI или просто создать или скопировать файл зоны в /etc/firewalld/zones из существующих файлов и отредактировать его.

Еще одна важная концепция firewalld — это сервисы. Служба определяется с использованием портов и протоколов; эти определения представляют данную сетевую службу, например веб-сервер или службу удаленного доступа. Службы определяются в файлах, хранящихся в каталоге /usr/lib/firewalld/services/ или /etc/firewalld/services/.

Если вы знаете базовые концепции iptables/ip6tables/ebtables, вы также можете использовать прямой интерфейс (или конфигурацию) для получения прямого доступа к брандмауэру. Но те, кто не знаком с iptables, могут использовать богатый язык для создания более сложных правил брандмауэра для IPv4 и IPv6.

Как установить пакет Firewalld в Linux

В CentOS 7 пакет firewalld уже установлен, и вы можете проверить его с помощью следующей команды.

rpm -qa firewalld

В Ubuntu 16.04 и 18.04 вы можете установить его с помощью менеджера пакетов по умолчанию, как показано.

sudo apt install firewalld

Как управлять службой Firewalld в Linux

Firewalld — это обычная служба systemd, которой можно управлять с помощью команды systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

После запуска службы firewalld вы также можете проверить, запущен ли демон, с помощью инструмента firewall-cmd (если он не активен, эта команда выведет «not бег ").

sudo firewall-cmd --state

Если вам удастся сохранить какие-либо изменения навсегда, вы можете перезагрузить firewalld. Это перезагрузит правила брандмауэра и сохранит информацию о состоянии. Текущая постоянная конфигурация станет новой конфигурацией среды выполнения.

sudo firewall-cmd --reload

Как работать с зонами брандмауэра в Firewalld

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

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

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

sudo firewall-cmd --get-default-zone

Чтобы установить зону по умолчанию, например внешнюю, используйте следующую команду. Обратите внимание, что добавление опции --permanent устанавливает конфигурацию навсегда (или позволяет запрашивать информацию из среды постоянной конфигурации).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Далее давайте посмотрим, как добавить интерфейс в зону. В этом примере показано, как добавить адаптер беспроводной сети (wlp1s0) в домашнюю зону, которая используется в домашних зонах.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Интерфейс можно добавить только в одну зону. Чтобы переместить его в другую зону, используйте переключатель --change-interface, как показано, или удалите его из предыдущей зоны с помощью переключателя -remove-interface, а затем добавьте его. в новую зону.

Предполагая, что вы хотите подключиться к общедоступной сети WI-FI, вам следует переместить беспроводной интерфейс обратно в общедоступную зону, например:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

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

sudo firewall-cmd --get-active-zones

По отношению к предыдущему пункту: если вы хотите найти дополнительную информацию о конкретной зоне, то есть обо всем, что в ней добавлено или включено, используйте одну из этих команд:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Еще одна полезная опция — --get-target, которая показывает цель постоянной зоны. Целью может быть одно из следующих значений: default, ACCEPT, DROP, REJECT. Вы можете проверить цель различных зон:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Как открывать и блокировать порты в Firewalld

Чтобы открыть порт (или комбинацию порт/протокол) в брандмауэре, просто добавьте его в зону с помощью опции --add-port. Если вы не укажете зону явно, она будет включена в зоне по умолчанию.

В следующем примере показано, как добавить порты 80 и 443, чтобы разрешить входящий веб-трафик через HTTP и HTTPS. > протоколы соответственно:

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

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

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Заблокировать или закрыть порт в брандмауэре одинаково легко: просто удалите его из зоны с помощью опции --remove-port. Например, закрыть порты 80 и 443 в публичной зоне.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Вместо использования комбинации порта или порта/протокола вы можете использовать имя службы, которой назначен порт, как описано в следующем разделе.

Как открыть и заблокировать службы в Firewalld

Чтобы открыть службу в брандмауэре, включите ее с помощью опции --add-service. Если зона не указана, будет использоваться зона по умолчанию.

Следующая команда навсегда включит службу http в общедоступной зоне.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

Опцию --remove-service можно использовать для отключения службы.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Как включить и отключить маскировку IP с помощью Firewalld

Маскарад IP (также известный как IPMASQ или MASQ) – это NAT (трансляция сетевых адресов). Strong>) механизм в сети Linux, который позволяет вашим хостам в сети с частными IP-адресами взаимодействовать с Интернетом, используя общедоступный IP-адрес, назначенный вашим сервером Linux (шлюз IPMASQ).

Это отображение один-ко-многим. Трафик с ваших невидимых хостов будет отображаться для других компьютеров в Интернете так, как если бы он исходил с вашего сервера Linux.

Вы можете включить маскировку IP-адресов в нужной зоне, например в общедоступной зоне. Но прежде чем сделать это, сначала проверьте, активен ли маскарад или нет («нет» означает, что он отключен, а «да» означает обратное).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Типичным вариантом использования маскировки является переадресация портов. Предположим, вы хотите подключиться по SSH с удаленного компьютера к хосту во внутренней сети с IP-адресом 10.20.1.3, на котором демон sshd прослушивает порт 5000.

Вы можете перенаправить все подключения к порту 22 на вашем сервере Linux на целевой порт на целевом хосте, выполнив:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Чтобы отключить маскировку в зоне, используйте переключатель --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Как включить и отключить сообщение IMCP в Firewalld

Сообщения ICMP (Протокол управляющих сообщений Интернета) представляют собой либо информационные запросы, либо ответы на информационные запросы, либо сообщения об ошибках.

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

sudo firewall-cmd --get-icmptypes

Чтобы добавить или удалить нужный тип блока.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Вы можете просмотреть все типы ICMP, добавленные в зону, с помощью переключателя --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Как использовать прямой интерфейс для передачи необработанных команд iptables

Firewall-cmd также предоставляет параметры прямого доступа (--direct), позволяющие получить более прямой доступ к брандмауэру. Это полезно для тех, у кого есть базовые знания iptables.

Важно. Прямые параметры следует использовать только в крайнем случае, когда невозможно использовать обычные параметры firewall-cmd, описанные выше.

Вот пример того, как передать необработанное правило iptables с помощью переключателя --add-rules. Вы можете легко удалить эти правила, заменив --add-rule на --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Дополнительную информацию о iptables можно найти в этом руководстве: Как настроить брандмауэр Iptables для включения удаленного доступа к службам в Linux.

Если вы не знакомы с синтаксисом iptables, вы можете выбрать «многофункциональный язык» firewalld для создания более сложных правил брандмауэра в простой и понятной форме, как описано далее.

Как использовать расширенный язык в Firewalld

Расширенный язык (также известный как многофункциональные правила) используется для добавления более сложных правил брандмауэра для IPv4 и IPv6. без знания синтаксиса iptables.

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

--add-rich-rule используется для добавления расширенных правил. В этом примере показано, как разрешить новые соединения IPv4 и IPv6 для службы http и регистрировать 1 запись в минуту с помощью аудита:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Чтобы удалить добавленное правило, замените параметр --add-rich-rule на --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Эта функция также позволяет блокировать или разрешать трафик с определенного IP-адреса. В следующем примере показано, как отклонить соединения с IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Как включить и отключить режим паники в Firewalld

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

Чтобы запросить режим паники, используйте опцию --query-panic.

sudo firewall-cmd --query-panic

Чтобы включить режим паники, используйте опцию --panic-on. Вы можете проверить, работает ли он, с помощью команды ping, как показано. Поскольку пакет отброшен, имя www.google.com не может быть разрешено, поэтому отображается ошибка.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Чтобы отключить режим паники, используйте опцию --panic-off.

sudo firewall-cmd --panic-off

Как заблокировать Firewalld

Помните, что в разделе «Основы работы с firewalld» мы упоминали, что локальные приложения или службы могут изменять конфигурацию брандмауэра, если они работают с правами root. Вы можете контролировать, какие приложения могут запрашивать изменения в брандмауэре, указав это в белом списке блокировки.

Эта функция по умолчанию отключена, вы можете включить или отключить ее с помощью переключателя --lockdown-on или --lockdown.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

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

sudo vim /etc/firewalld/firewalld.conf

Найдите параметр Lockdown и измените его значение с no (означает «выключено») на yes (означает «включено»).

Lockdown=yes

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

sudo firewall-cmd --reload
Краткое содержание

Firewalld – это простая в использовании замена службы iptables, которая использует iptables в качестве серверной части. В этой статье мы показали, как установить пакет firewalld, объяснили важные функции firewalld и обсудили, как их настроить в среде выполнения и постоянной конфигурации.

Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь обращаться к нам через форму комментариев ниже. Для получения дополнительной информации вы можете обратиться к странице руководства firewalld (man firewalld) или к документации firewalld на веб-сайте проекта.