Firewall cmd команда не найдена
firewalld — программное обеспечение для управления брандмауэрами, поддерживаемое многими дистрибутивами Linux. Выступает в качестве клиентского интерфейса для встроенных в ядро Linux систем фильтрации пакетов nftables и iptables.
В этом обучающем руководстве мы покажем, как настраивать брандмауэр firewalld для сервера CentOS 8 и расскажем об основах управления брандмауэром с помощью административного инструмента firewall-cmd .
Предварительные требования
Для прохождения этого обучающего руководства нам потребуется сервер под управлением CentOS 8. Мы будем считать, что вы выполнили вход на этот сервер в качестве пользователя non-root user с привилегиями sudo . Чтобы выполнить настройку сервера, воспользуйтесь нашим руководством по начальной настройке сервера CentOS 8.
Основные концепции в firewalld
Прежде чем обсуждать фактическое использование утилиты firewall-cmd для управления конфигурацией брандмауэра, мы должны познакомиться с несколькими концепциями, которые вводит этот инструмент.
Демон firewalld управляет группами правил, используя элементы, называемые зонами. Зоны представляют собой набор правил, который определяет разрешенный трафик в зависимости от уровня доверия в сети. Зоне назначаются сетевые интерфейсы, определяющие поведение, которое должен разрешать брандмауэр.
Такая гибкость позволяет легко изменять правила в зависимости от среды, особенно в случае с компьютерами, которые часто перемещаются между сетями (например, с ноутбуками). Вы можете использовать более строгие правила, например, запретить большую часть трафика в публичных сетях WiFi и ввести менее строгие ограничения для домашней сети. Для сервера эти зоны не так важны, поскольку его сетевая среда редко изменяется, если это вообще происходит.
Вне зависимости от того, насколько динамична ваша сетевая среда, вам будет полезно познакомиться с общей идеей, лежащей в основе заданных зон firewalld . Заданные зоны в firewalld упорядочены от наименее доверенных к наиболее доверенным:
Для использования брандмауэра можно создавать правила и изменять свойства зон, а также назначать сетевые интерфейсы в наиболее подходящие зоны.
Постоянство правил
В firewalld правила можно применять к текущему набору правил времени исполнения или использовать как постоянные. При добавлении или изменении правила по умолчанию изменяется только работающий брандмауэр. После перезагрузки системы или службы firewalld сохраняются только постоянные правила.
Большинство операций firewall-cmd могут принимать флаг --permanent , указывающий на необходимость применения изменений к постоянной конфигурации. Кроме того, текущую конфигурацию брандмауэра можно сохранить в постоянной конфигурации с помощью команды firewall-cmd --runtime-to-permanent .
Такое разделение конфигурации времени исполнения и постоянной конфигурации позволяет безопасно тестировать правила на активном брандмауэре и просто перезагружать его в случае возникновения проблем.
Установка и активация firewalld
Брандмауэр firewalld установлен по умолчанию в некоторых дистрибутивах Linux, в том числе во многих образах CentOS 8. Однако вам может потребоваться установить firewalld самостоятельно:
После установки firewalld вы можете активировать службу и перезагрузить сервер. Помните, что в случае активации службы firewalld она будет запускаться при загрузке системы. Прежде чем настраивать такое поведение, лучше создать правила брандмауэра и воспользоваться возможностью протестировать их во избежание потенциальных проблем.
После перезагрузки сервера брандмауэр запускается, сетевые интерфейсы помещаются в настроенные зоны (или возвращаются в заданные по умолчанию зоны), и все правила зон применяются к соответствующим интерфейсам.
Чтобы проверить работу и доступность службы, можно использовать следующую команду:
Это показывает, что наш брандмауэр запущен и работает с конфигурацией по умолчанию.
Знакомство с текущими правилами брандмауэра
Прежде чем мы начнем вносить изменения, мы познакомимся со средой и правилами firewalld, используемыми по умолчанию.
Изучение параметров по умолчанию
Чтобы посмотреть, какая зона выбрана по умолчанию, можно использовать следующую команду:
Поскольку мы не отправили firewalld никаких команд для отклонения от основной зоны и никакие наши интерфейсы не настроены на привязку к другой зоне, эта зона будет единственной активной зоной (зоной, контролирующей трафик для наших интерфейсов). Это можно проверить с помощью следующей команды:
Здесь мы видим, что на нашем сервере брандмауэр контролирует два сетевых интерфейса ( eth0 и eth1 ). Управление обоими интерфейсами осуществляется в соответствии с правилами, заданными для зоны public.
Как же узнать, какие правила заданы для зоны public? Конфигурацию зоны по умолчанию можно распечатать с помощью следующей команды:
Из выводимых результатов мы видим, что эта зона активна и используется по умолчанию и что с ней связаны интерфейсы eth0 и eth1 (все это мы уже знали из предыдущих запросов). Также мы видим, что эта зона разрешает трафик клиента DHCP (для назначения IP-адресов), SSH (для удаленного администрирования) и Cockpit (веб-консоль).
Изучение альтернативных зон
Мы получили представление о конфигурации зоны по умолчанию и активной зоны. Также мы можем получить информацию о других зонах.
Чтобы получить список доступных зон, введите команду:
Чтобы посмотреть конкретную конфигурацию, относящуюся к зоне, необходимо добавить параметр --zone= к команде --list-all :
Вы можете вывести все определения зон, используя опцию --list-all-zones . Возможно вы захотите вывести результаты на пейджер для удобства просмотра:
Далее мы узнаем о назначении зон сетевым интерфейсам.
Выбор зон для интерфейсов
Если вы не настроили сетевые интерфейсы иным образом, каждый интерфейс будет помещен в зону по умолчанию при запуске брандмауэра.
Изменение зоны интерфейса
Для перемещения интерфейса между зонами во время сеанса следует использовать параметр --zone= в сочетании с параметром --change-interface= . Как и для всех остальных команд, изменяющих брандмауэр, вам потребуется использовать sudo .
Например, интерфейс eth0 можно переместить в зону home с помощью следующей команды:
Примечание. При перемещении интерфейса в новую зону следует помнить, что это может повлиять на работоспособность служб. Например, в данном случае мы перемещаемся в зону home, в которой поддерживается SSH. Это означает, что наше соединение не должно быть отброшено. В некоторых других зонах SSH по умолчанию не поддерживается, при переходе в такую зону ваше соединение будет разорвано, и вы не сможете снова войти на сервер.
Чтобы убедиться в успешности операции мы можем снова запросить активные зоны:
Изменение зоны по умолчанию
Если все интерфейсы могут быть хорошо обработаны в одной зоне, проще всего определить наиболее подходящую зону как зону по умолчанию, а затем использовать эту зону для конфигурации.
Вы можете изменить зону по умолчанию с помощью параметра --set-default-zone= . При этом немедленно изменятся все интерфейсы, использующие зону по умолчанию:
Установка правил для приложений
Рассмотрим базовый способ определения исключений брандмауэра для служб, которые вы хотите сделать доступными.
Добавление службы к зонам
Самый простой метод заключается в том, чтобы добавлять необходимые службы или порты в используемые зоны. Список доступных определений служб можно получить с помощью опции --get-services :
Примечание. Вы можете получить более подробную информацию о каждой из этих служб, посмотрев соответствующий файл .xml в директории /usr/lib/firewalld/services . Например, служба SSH определяется следующим образом:
Вы можете активировать службу для зоны с помощью параметра --add-service= . Данная операция будет нацелена на зону по умолчанию или на другую зону, заданную параметром --zone= . По умолчанию изменения применяются только к текущему сеансу брандмауэра. Для изменения постоянной конфигурации брандмауэра следует использовать флаг --permanent .
Вы можете опустить флаг --zone= , если хотите внести изменения в зону по умолчанию. Для проверки успешного выполнения операции можно использовать команду --list-all или --list-services :
После подтверждения надлежащей работы всех систем вы можете изменить постоянные правила брандмауэра, чтобы служба была доступна после перезагрузки системы. Чтобы сделать предыдущие изменения постоянными, нужно ввести их повторно и добавить флаг --permanent :
Также можно использовать флаг --runtime-to-permanent для сохранения текущей конфигурации брандмауэра в постоянной конфигурации:
Будьте осторожны, поскольку при этом все изменения в текущей конфигурации брандмауэра сохраняются в постоянной конфигурации.
Если вы хотите убедиться. что изменения успешно сохранены в постоянной конфигурации, добавьте флаг --permanent к команде --list-services . Вам потребуются привилегии sudo для выполнения любых операций с флагом --permanent :
Что делать, если подходящая служба отсутствует?
В базовом комплекте firewalld представлены многие распространенные приложения, к которым вы можете захотеть предоставить доступ. Однако возможны ситуации, когда эти службы не будут соответствовать вашим требованиям.
В этой ситуации у вас будет два варианта.
Открытие порта для зон
Проще всего добавить поддержку определенного приложения можно посредством открытия используемых им портов в соответствующих зонах. Для этого нужно указать порт или диапазон портов, а также протокол (TCP или UDP), связанный с портами.
Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в зону public с помощью параметра --add-port= . Протоколы могут назначаться как tcp или udp :
Мы можем проверить успешность назначения с помощью операции --list-ports :
Также можно указать последовательный диапазон портов, разделив начальный и конечный порты диапазона дефисом. Например, если наше приложение используйте порты UDP с 4990 по 4999, мы можем открыть их на public с помощью следующей команды:
После тестирования мы вероятно захотим добавить это правило в брандмауэр на постоянной основе. Используйте для этого sudo firewall-cmd --runtime-to-permanent или запустите команды снова с флагом --permanent :
Определение службы
Открыть порты для зон довольно просто, но также может быть сложно следить за тем, для чего предназначен каждый порт. Если вы будете выводить из эксплуатации службы на своем сервере, вы можете забыть, какие из открытых портов вам еще нужны. Чтобы избежать подобной ситуации, можно определить новую службу.
Службы представляют собой наборы портов с именем и описанием. Использование служб упрощает администрирование портов, но требует некоторой предварительной подготовки. Проще всего начать с копирования существующего скрипта (из директории /usr/lib/firewalld/services ) в директорию /etc/firewalld/services , где брандмауэр ищет нестандартные определения.
Например, мы можем скопировать определение службы SSH и использовать его для определения службы example. Имя файла без суффикса .xml определяет имя службы в списке служб брандмауэра:
Теперь можно изменить определение в скопированном вами файле. Вначале откройте его в предпочитаемом текстовом редакторе. Здесь мы используем vi :
Вначале файл будет содержать только что скопированное вами определение SSH:
Основная часть этого определения представляет собой метаданные. Вы можете изменить короткое имя службы, заключенное в тегах <short> . Это имя службы, предназначенное для чтения людьми. Также следует добавить описание на случай, если вам потребуется дополнительная информация при проведении аудита службы. Единственное изменение конфигурации, которое вам потребуется, и которое повлияет на функциональность службы, будет заключаться в определении портов, где вы идентифицируете номер порта и протокол, который хотите открыть. Можно указать несколько тегов <port/> .
Представьте, что для нашей службы example нам необходимо открыть порт 7777 для TCP и 8888 для UDP. Мы можем изменить существующее определение примерно так:
Сохраните и закройте файл.
Перезагрузите брандмауэр, чтобы получить доступ к новой службе:
Теперь вы увидите ее в списке доступных служб:
Теперь вы можете использовать эту службу в зонах, как и обычно.
Создание собственных зон
Хотя большинству пользователей будет достаточно заданных зон, иногда может быть полезно определить собственные зоны с названиями, соответствующими их функции.
Например, вы можете захотеть создать для своего веб-сервера зону с именем publicweb. При этом вы можете также захотеть использовать другую зону для службы DNS в вашей частной сети. Эту зону вы можете назвать privateDNS.
При добавлении зоны вы должны добавить ее в постоянную конфигурацию брандмауэра. Затем вы можете произвести перезагрузку для активации конфигурации для текущего сеанса. Например, мы можем создать две описанные выше зоны, введя следующие команды:
Вы можете проверить их наличие в постоянной конфигурации с помощью следующей команды:
Как указывалось ранее, пока они будут недоступны в работающем брандмауэре:
Перезагрузите брандмауэр, чтобы добавить эти зоны в активную конфигурацию:
Для зоны privateDNS можно добавить службу DNS:
Затем мы можем изменить интерфейсы на новые зоны, чтобы протестировать их:
Сейчас вы можете протестировать свою конфигурацию. Если эти значения будут работать, эти правила можно будет добавить в постоянную конфигурацию. Для этого можно снова запустить все команды с флагом --permanent , но в этом случае мы используем флаг --runtime-to-permanent для полного сохранения активной конфигурации как постоянной:
Сохранив правила в постоянной конфигурации, перезагрузите брандмауэр, чтобы проверить сохранение изменений:
Проверьте правильность назначения зон:
Убедитесь, что в обеих зонах доступны соответствующие службы:
Вы успешно настроили собственные зоны! Если вы захотите задать одну из этих зон по умолчанию для других интерфейсов, используйте для настройки параметр --set-default-zone= :
Заключение
Теперь вы должны неплохо понимать принципы администрирования службы firewalld в системе CentOS на каждодневной основе.
Служба firewalld позволяет настраивать администрируемые правила и наборы правил, учитывающие условия вашей сетевой среды. Она позволяет легко переключаться между разными политиками брандмауэра посредством использования зон и дает администраторам возможность абстрагировать управление портами в более удобную систему определения служб. Умение работать с этой системой позволит вам воспользоваться преимуществами гибкости и функциональности данного инструмента.
Дополнительную информацию о firewalld можно найти в официальной документации по firewalld.
How to Open Port 80 on CentOS 7 (firewall-cmd and iptables commands) (Ноябрь 2021).
Table of Contents:
firewall-cmd - это интерфейс командной строки для firewalld ( firewalld daemon ), инструмента динамического управления брандмауэром с интерфейсом D-Bus.
Он поддерживает как IPv4, так и IPv6; он также поддерживает сетевые зоны межсетевого экрана, мосты и ipsets. Он учитывает временные правила брандмауэра в зонах, регистрирует отклоненные пакеты, автоматически загружает модули ядра и многое другое.
Firewalld использует параметры времени выполнения и постоянной настройки, которыми вы можете управлять с помощью firewall-cmd., мы объясним, как решить проблему « firewall-cmd: команда не найдена » в системах RHEL / CentOS 7 Linux.
Мы столкнулись с вышеуказанной ошибкой при попытке настроить правила брандмауэра для недавно запущенного экземпляра Linux AWS ( Amazon Web Services ) EC2 ( Elastic Cloud Compute ) RHEL 7.4, как показано на скриншоте ниже.
firewall-cmd: команда не найдена
$ sudo yum установить firewalld
Установите FirewallD в RHEL 7
Затем запустите firewalld и включите автозапуск при загрузке системы, затем проверьте его состояние.
$ sudo systemctl start firewalld $ sudo systemctl enable firewalld $ sudo systemctl status firewalld
Запустите и включите FirewallD
Теперь вы можете запустить firewall-cmd, чтобы открыть порт ( 5000 в этом примере) в брандмауэре, как это, всегда перезагружать конфигурации брандмауэра, чтобы изменения вступили в силу.
$ sudo firewall-cmd --zone = public --add-port = 5000 / tcp --permanent $ sudo firewall-cmd --reload
Открыть порт в FirewallD
Чтобы заблокировать указанный выше порт, выполните эти команды.
$ sudo firewall-cmd --zone = public --remove-port = 5000 / tcp --permanent $ sudo firewall-cmd --reload
Вы также можете прочитать эти полезные руководства по firewalld:
, мы объяснили, как решить « firewall-cmd: команда не найдена » в RHEL / CentOS 7. Чтобы задать какие-либо вопросы или поделиться своими мыслями, используйте форму комментария ниже.
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 позволяет создавать правила с условиями. Рассмотрим несколько примеров:
2. Или для конкретного порта:
3. Чтобы заблокировать подсеть можно воспользоваться командой:
Список правил с условиями можно отобразить командой:
Удаление правил
Аналогично созданию, но вместо 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 --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.
Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:
И дописываем следующее:
* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.
Основной брандмауэр в операционных системах Linux - это iptables. Но команды iptables сложны, и многим пользователям тяжело запомнить все опции и случаи, в которых их надо использовать. Поэтому разработчики дистрибутивов создают свои надстройки над iptables, которые помогают упростить управление фаерволом. У CentOS надстройка для управления iptables называется Firewalld.
У Firewalld есть несколько важных отличий, по сравнению с iptables. Здесь управление доступом к сети выполняется на уровне зон и сервисов, а не цепочек и правил. А также правила обновляются динамически, не прерывая запущенных сессий. В этой статье будет рассмотрена настройка Firewall CentOS 7 на примере Firewalld.
Основы использования Firewalld
Как я уже сказал выше, Firewalld работает не с цепочками правил, а с зонами. Каждому сетевому интерфейсу может быть присвоена определенная зона. Зона представляет из себя набор правил, ограничений и разрешений, которые применяются к этому сетевому интерфейсу. Для одного интерфейса может быть выбрана только одна зона. Разработчики создали несколько предустановленных зон:
Таким образом, чтобы разрешить или запретить какой-либо сервис, вам достаточно добавить или удалить его из текущей зоны или сменить зону интерфейса на ту, где он разрешён. Можно провести аналогию с политикой действий по умолчанию для пакетов в iptables. Зона trusted имеет политику ACCEPT и разрешает все подключения, зона block имеет политику DENY, которая запрещает все подключения, а все остальные зоны можно считать наследниками зоны block, плюс в них уже предопределены правила разрешения сетевых подключений для некоторых сервисов.
Также у Firewalld есть два вида конфигурации:
- runtime - действительна только до перезагрузки, все изменения, в которых явно не указано другое, применяются к этой конфигурации;
- permanent - постоянные настройки, которые будут работать и после перезагрузки.
Теперь вы знаете всё необходимое, поэтому перейдём к утилите firewalld-cmd.
Синтаксис и опции firewall-cmd
Управлять настройками Firewalld можно как с помощью консольной утилиты firewall-cmd, так и в графическом интерфейсе. CentOS чаще всего используется на серверах, поэтому вам придётся работать в терминале. Давайте рассмотрим синтаксис утилиты:
firewall-cmd опции
Для управления зонами используется такой синтаксис:
firewall-cmd --конфигурация --zone=зона опции
В качестве конфигурации нужно указать опцию --permanent, чтобы сохранить изменения после перезагрузки или ничего не указывать, тогда изменения будут действительны только до перезагрузки. В качестве зоны используйте имя нужной зоны. Давайте рассмотрим опции утилиты:
- --state - вывести состояние брандмауэра;
- --reload - перезагрузить правила из постоянной конфигурации;
- --complete-reload - жёсткая перезагрузка правил с разрывом всех соединений;
- --runtime-to-permanent - перенести настройки конфигурации runtime в постоянную конфигурацию;
- --permanent - использовать постоянную конфигурацию;
- --get-default-zone - отобразить зону, используемую по умолчанию;
- --set-default-zone - установить зону по умолчанию;
- --get-active-zones - отобразить активные зоны;
- --get-zones - отобразить все доступные зоны;
- --get-services - вывести предопределенные сервисы;
- --list-all-zones - вывести конфигурацию всех зон;
- --new-zone - создать новую зону;
- --delete-zone - удалить зону;
- --list-all - вывести всё, что добавлено, из выбранной зоны;
- --list-services - вывести все сервисы, добавленные к зоне;
- --add-service - добавить сервис к зоне;
- --remove-service - удалить сервис из зоны;
- --list-ports - отобразить порты, добавленные к зоне;
- --add-port - добавить порт к зоне;
- --remove-port - удалить порт из зоны;
- --query-port - показать, добавлен ли порт к зоне;
- --list-protocols - вывести протоколы, добавленные к зоне;
- --add-protocol - добавить протокол к зоне;
- --remove-protocol - удалить протокол из зоны;
- --list-source-ports - вывести порты источника, добавленные к зоне;
- --add-source-port - добавить порт-источник к зоне;
- --remove-source-port - удалить порт-источник из зоны;
- --list-icmp-blocks - вывести список блокировок icmp;
- --add-icmp-block - добавить блокировку icmp;
- --add-icmp-block - удалить блокировку icmp;
- --add-forward-port - добавить порт для перенаправления в NAT;
- --remove-forward-port - удалить порт для перенаправления в NAT;
- --add-masquerade - включить NAT;
- --remove-masquerade - удалить NAT.
Это далеко не все опции утилиты, но для этой статьи нам будет их достаточно.
Настройка Firewall в CentOS 7
1. Статус брандмауэра
Первым делом необходимо посмотреть состояние брандмауэра. Для этого выполните:
sudo systemctl status firewalld
Если служба Firewalld отключена, то необходимо её включить:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Теперь нужно посмотреть, запущен ли Firewalld, с помощью команды firewall-cmd:
sudo firewall-cmd --state
2. Управление зонами
Как вы уже поняли, зоны - это основной инструмент для управления сетевыми подключениями. Чтобы посмотреть зону по умолчанию, выполните:
sudo firewall-cmd --get-default-zone
В моем случае это зона public. Вы можете изменить текущую зону с помощью опции --set-default-zone:
sudo firewall-cmd --set-default-zone=public
Чтобы посмотреть, какие зоны используются для всех сетевых интерфейсов, выполните:
sudo firewall-cmd --get-active-zones
В списке будут выведены зоны и интерфейсы, для которых они присвоены. Такой командой можно посмотреть конфигурацию для определённой зоны. Например, для зоны public:
sudo firewall-cmd --zone=public --list-all
3. Настройка сервисов
Вы можете посмотреть все предопределенные сервисы командой:
sudo firewall-cmd --get-services
А чтобы удалить этот сервис, выполните:
В обоих случаях мы использовали опцию --permanent, чтобы конфигурация сохранялась после перезагрузки. После изменений нужно обновить правила:
sudo firewall-cmd --reload
Затем, если вы посмотрите конфигурацию зоны, то там появится добавленный сервис:
sudo firewall-cmd --zone=public --list-all
4. Как открыть порт в Firewalld
Если для нужной вам программы нет сервиса, вы можете открыть её порт вручную. Для этого просто добавьте нужный порт к зоне. Например порт 8083:
sudo firewall-cmd --zone=public --add-port=8083/tcp --permanent
Чтобы удалить этот порт из зоны, выполните:
sudo firewall-cmd --zone=public --remove-port=8083/tcp --permanent
Аналогично сервисам, чтобы открыть порт в firewall centos 7 надо перезагрузить брандмауэр.
sudo firewall-cmd --reload
5. Проброс портов Firewalld
sudo firewall-cmd --zone=public --add-forward-port=port=2223:proto=tcp:toport=22
Здесь перенаправление выполняется только на текущей машине. Если вы хотите настроить сеть NAT и пробрасывать порт на другую машину, то вам нужно сначала включить поддержку masquerade:
sudo firewall-cmd --zone=public --add-masquerade
Затем уже можно добавить порт:
sudo firewall-cmd --zone=publiс --add-forward-port=port=2223:proto=tcp:toport=22:toaddr=192.168.56.4
6. Расширенные правила
Если функциональности зон вам недостаточно, вы можете использовать расширенные правила. Общий синтаксис расширенных правил такой:
rule family = "семейтво" source значение destination значение log audit действие
Вот значение основных параметров:
Давайте рассмотрим несколько примеров. Нам необходимо заблокировать доступ к серверу для пользователя с IP 135.152.53.5:
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=135.152.53.5 reject'
Или нам нужно запретить для этого же пользователя только доступ к порту 22:
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=135.152.53.5 port port=22 protocol=tcp reject'
Посмотреть все расширенные правила можно командой:
sudo firewall-cmd --list-rich-rules
Выводы
В этой статье мы разобрали, как выполняется настройка firewall в CentOS 7 и какие задачи можно с помощью него выполнить. Программой намного проще пользоваться, чем iptables, но по моему мнению надстройка фаервола от Ubuntu - ufw ещё проще в использовании.
Читайте также: