Firewall linux настройка centos

Настройка firewalld CentOS 7 с примерами команд

Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром — firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 😉 Хороший пример на эту тему — selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.

Firewalld — это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.

Запуск и остановка firewalld

Проверим, запущен ли firewalld:

# systemctl status firewalld

Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:

# firewall-cmd —state
running

# systemctl stop firewalld

# systemctl disable firewalld

# systemctl start firewalld

# systemctl enable firewalld

Зоны firewalld

В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:

# firewall-cmd —get-zones
block dmz drop external home internal public trusted work

Назначение зон (условно, конечно):

  • drop — все входящие пакеты отбрасываются (drop) без ответа. Разрешены только исходящие соединения.
  • block — входящие соединения отклоняются (rejected) с ответом icmp-host-prohibited (или icmp6-adm-prohibited). Разрешены только инициированные системой соединения.
  • public — зона по-умолчанию. Из названия ясно, что эта зона нацелена на работу в общественных сетях. Мы не доверяем этой сети и разрешаем только определенные входящие соединения.
  • external — зона для внешнего интерфейса роутера (т.н. маскарадинг). Разрешены только определенные нами входящие соединения.
  • dmz — зона DMZ, разрешены только определенные входящие соединения.
  • work — зона рабочей сети. Мы все еще не доверяем никому, но уже не так сильно, как раньше 🙂 Разрешены только определенные входящие соединения.
  • home — домашняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • internal — внутренняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • trusted — разрешено все.

Список всех активных зон:

# firewall-cmd —get-active-zones
public
interfaces: enp1s0

Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.

Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:

# firewall-cmd —get-zone-of-interface=enp1s0
public

А можно узнать, какие интерфейсы принадлежат конкретной зоне:

# firewall-cmd —zone=public —list-interfaces
enp1s0

Пример: разрешаем ssh на нестандартном порте

Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.

Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:

# firewall-cmd —permanent —list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:

# firewall-cmd —permanent —zone=public —remove-service=dhcpv6-client

Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):

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

# firewall-cmd —zone=public —list-ports
2234/tcp

Ок, порт открыт. Редактируем конфиг sshd:

# nano /etc/ssh/sshd_config
.
port 2234
.

# systemctl restart sshd.service

Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd — нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:

# yum provides semanage
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 2234

Вот теперь все ок. Проверяем подключение по ssh на новом порте. Если все ок, закрываем доступ к порту 22:

Читайте также:  Виртуальная машина windows для macbook

# firewall-cmd —permanent —zone=public —remove-service=ssh
# firewall-cmd —reload

Смотрим, что получилось:

# firewall-cmd —list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Разные полезные команды:

Включить режим блокировки всех исходящих и входящих пакетов:

Выключить режим блокировки всех исходящих и входящих пакетов:

Узнать, включен ли режим блокировки всех исходящих и входящих пакетов:

Перезагрузить правила firewalld без потери текущих соединений:

Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):

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

# firewall-cmd —zone=public —add-interface=em1

Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):

# firewall-cmd —zone=public —permanent —add-interface=em1

Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.

Разрешить диапазон портов:

# firewall-cmd —zone=public —add-port=5059-5061/udp

Маскарад (masquerade, он же nat, он же. ):

# firewall-cmd —zone=external —query-masquerade

# firewall-cmd —zone=external —add-masquerade

Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.

Перенаправить входящие на 22 порт на другой хост:

# firewall-cmd —zone=external —add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23

Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):

# firewall-cmd —zone=external /
—add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23

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

Преимущества firewalld

Основное преимущество — вы немного абстрагируетесь от цепочек iptables.Для включения перенаправления портов не придется думать про PREROUTING или POSTROUTING в дополнение к FORWARD. Вам дается «API от iptables от производителя», что-то в этом роде. Если вы включили nat, то неважно, где конкретно (под каким порядковым номером текущих правил) размещено правило. Вы просто указываете — включи nat на eth0. И без глупостей 😉 Это может быть удобно, если надо организовать web интерфейс управления брандмауэром.

Есть возможность проверить статус (например, включен nat или нет!). И также использовать это в своих скриптах, в логике вашего приложения, например. Я не знаю, как в iptables создать именно запрос статуса (вкл/выкл). Можно, конечно, что-то в роде iptables -L -t nat | grep ‘. ‘, но согласитесь, это немного не то же самое, что выполнить ‘firewall-cmd —zone=external —query-masquerade’. Есть, к примеру, сотни VM с CentOS, в которых могут немного отличаться названия wan интерфейсов или еще что-то в этом роде. А так вы имеете универсальный командлет, который даст ожидаемый результат на разных машинах.

Недостатки firewalld

Основной недостаток, на мой взгляд, это то, что при привыкании начнется отвыкание от «чистого» iptables, который и в Debian, и в Ubuntu, и в CentOS и, вообще, везде. Даже, кстати, в микротик синтаксис и цепочки похожи по типу на iptables. Это на любителя, конечно. И профессионалу все равно, с чем работать, если есть конкретные условия, он будет работать с тем, что есть. Но. я ретроград и отчаянно сопротивляюсь (при отсутсвии явных преимуществ) новинкам, которые каждый крупный игрок реализует под себя. RedHat выгодно, если все больше новых специалистов будут асами в firewalld.

И если вы перешли на firewalld, то уже чистый синтаксис iptables вам только помешает — будет каша или просто сломается работа брандмауэра, если вы начнете изменять/дополнять правила не с помощью стандартного синтаксиса firewalld.

Не хочу firewalld! Верните мне старый iptables!

Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:

Новичкам тут не место:

# systemctl disable firewalld
# systemctl stop firewalld

Ставим старый добрый iptables:

# yum install iptables-services

# systemctl start iptables
# systemctl start ip6tables

Автозапуск при включении:

# systemctl enable iptables
# systemctl enable ip6tables

Для сохранения правил iptables после перезагрузки:

# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables

# service iptables save

Текущие правила находятся в файлах:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables

Перезапуск iptables (например, после совершения каких-либо изменений):

Источник

Как настроить брандмауэр с FirewallD на CentOS 7

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

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

Читайте также:  Import error python windows

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

Подготовка

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

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

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

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

Зоны Firewalld

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

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

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

Услуги межсетевого экрана

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

Среда выполнения Firewalld и постоянные настройки

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

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

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

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

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

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

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

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

Работа с зонами Firewalld

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

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

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

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

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

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

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

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

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

Вы можете легко изменить Зону интерфейса, используя параметр —zone в сочетании с параметром —change-interface . Следующая команда назначит интерфейс eth1 рабочей зоне:

Проверьте изменения, набрав:

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

Чтобы изменить зону по умолчанию, используйте параметр —set-default-zone за которым следует имя зоны, которую вы хотите сделать по умолчанию.

Читайте также:  Search program and files windows

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

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

Открытие порта или сервиса

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

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

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

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

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

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

Выводы

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

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

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Источник

Оцените статью