Как установить, настроить и использовать 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 на веб-сайте проекта.