0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

Настройка 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:

# 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 интерфейсов или еще что-то в этом роде. А так вы имеете универсальный командлет, который даст ожидаемый результат на разных машинах.

Читайте так же:
Скачать Dicter 3.8

Недостатки 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

Откройте порт брандмауэра на CentOS 7

Я использую CentOS 7 и должен убедиться, что порты 2888 и 3888 открыты.

Я читал эту статью , но это не сработало, потому что на CentOS 7 OS нет команды iptables save .

Кто-то сказал мне, что вышеприведенный URL не действителен для CentOS 7. и я должен следовать этому. Но в этой статье мне не ясно, какую именно команду мне нужно выполнить.

но это не переживает перезагрузок.

Так как же я могу открыть порты и заставить его пережить перезагрузку?

12 ответов

  • Нужна помощь, чтобы изменить порт postgresql на CentOS 7

Я только что установил postgresql (как он говорит на postgresql), сервер работает как шарм, никаких проблем вообще. Я просто попытался (хочу) изменить порт по умолчанию (5432) на (9898). Сначала я просто попытался сделать это с помощью файла postgresql.conf под /var/lib/pgsql/data/postgresql.conf.

когда я пытаюсь установить SteamCMD на CentOS 7, я получаю ошибку: Login Failure: No Connection, я могу подтвердить, что selinux отключен, и что брандмауэр выключен, я могу заставить его нормально работать в CentOS 6, но для CentOS 7, Кажется, есть какая-то икота, любая помощь будет оценена.

Используйте эту команду, чтобы найти свою активную зону(зоны):

Там будет написано либо public, dmz, либо что-то еще. Вы должны обращаться только к необходимым зонам.

В случае публичной попытки:

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

В противном случае замените свою зону общедоступной, например, если ваша зона является dmz:

Ответ ганешрагава верен, но также полезно знать, что вы можете использовать:

но если это известная услуга, вы можете использовать:

а затем перезагрузите брандмауэр

[ Ответ изменен, чтобы отразить комментарий Мартина Питера, оригинальный ответ имел —permanent в конце командной строки ]

CentOS (RHEL) 7, изменил брандмауэр на использование firewall-cmd , в котором есть понятие зон, которое похоже на версию Windows общедоступных, домашних и частных сетей. Вы должны посмотреть здесь , чтобы выяснить, какой из них, по вашему мнению, вам следует использовать. EL7 по умолчанию использует public , так что это то, что используют мои примеры ниже.

Вы можете проверить, какую зону вы используете с firewall-cmd —list-all , и изменить ее с firewall-cmd —set-default-zone=<zone> .

Затем вы будете знать, в какой зоне разрешать службу (или порт) :

firewall-cmd —permanent —zone=<zone> —add-service=http

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

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

firewall-cmd —zone=<zone> —query-port=80/tcp

firewall-cmd —zone=<zone> —query-service=http

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

Вы можете перезагрузить настройки брандмауэра с помощью: firewall-cmd —reload .

  • Как открыть порт брандмауэра с помощью задачи ansible firewalld на Centos 7

У меня есть задача в моем сценарии ansible-playbook открыть порт TCP на удаленной машине. но когда я запускаю свой плейбук ansible, он выдает ошибку. Но когда я запускаю firewall-cmd —permanent —zone=public —add-port=1234/tcp и firewalld-cmd —reload , я вижу, что порт добавлен в публичную.

Я хочу открыть порт на Azure. Я вошел в систему Azure VM. После этого как мне открыть порт? Я попытался открыть порт брандмауэра, но это не помогло. Я также пытался сделать это через azure-cli , но для этого нужен веб-логин. Могу ли я не открывать порт, войдя в этот Azure VM?

Fedora, сделал это через iptables

Чтобы просмотреть открытые порты, используйте следующую команду.

Мы используем следующее, чтобы увидеть службы, порты которых открыты.

Мы используем следующее, чтобы увидеть службы, порты которых открыты, и увидеть открытые порты

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

Чтобы эта служба была постоянно открыта, мы используем следующую команду.

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

Для запуска брандмауэра необходимо перезагрузить его с помощью следующей команды.

В то время как ганешрагав и Социр предоставляют правильные и непосредственно применимые подходы, полезно отметить, что вы можете добавить свои собственные услуги в /etc/firewalld/services . Для вдохновения посмотрите на /usr/lib/firewalld/services/ , где расположены предопределенные службы firewalld.

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

Например, вы можете создать /etc/firewalld/services/foobar.xml :

(Для получения информации о синтаксисе выполните man firewalld.service .)

Как только этот файл будет создан, вы можете firewall-cmd —reload сделать его доступным, а затем навсегда добавить его в какую-либо зону с помощью

затем следует firewall-cmd —reload , чтобы сразу же сделать его активным.

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

Мы используем следующее, чтобы увидеть службы, порты которых открыты:

Мы используем следующее, чтобы увидеть службы, порты которых открыты, и увидеть открытые порты:

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

Читайте так же:
Принтер ставит в очередь но не печатает

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

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

Лучшие ответы здесь работают, но я нашел что-то более элегантное в ответе Майкла Хэмптона на соответствующий вопрос. «new» (firewalld-0.3.9-11+) от —runtime-to-permanent до firewall-cmd позволяет создавать правила среды выполнения и тестировать их, прежде чем делать их постоянными:

Или отменить изменения только во время выполнения:

Также смотрите комментарий Энтони Нгуена . По-видимому, firewall-cmd —reload может работать неправильно в некоторых случаях, когда правила были удалены. В этом случае он предлагает перезапустить службу firewalld:

Если у вас есть несколько портов для разрешения в Centos 7 FIrewalld, мы можем использовать следующую команду.

Если вы знакомы со службой iptables, как в centos 6 или более ранних версиях, вы все равно можете использовать службу iptables путем ручной установки:

шаг 1 => установка репо epel

шаг 2 => установите службу iptables

шаг 3 => остановить службу firewalld

systemctl остановить firewalld

шаг 4 => отключить службу firewalld при запуске

шаг 5 => запуск службы iptables

шаг 6 => включить iptables при запуске

наконец, теперь вы можете редактировать конфигурацию iptables по адресу /etc/sysconfig/iptables.

Итак -> изменить правило -> reload/restart.

сделайте как старый centos с той же функцией, что и firewalld.

Firewalld немного неинтуитивен для ветерана iptables. Для тех, кто предпочитает управляемый iptables брандмауэр с синтаксисом, подобным iptables, в легко настраиваемом дереве, попробуйте заменить firewalld на fwtree: https://www.linuxglobal.com/fwtree-flexible-linux-tree-based-firewall/ а затем выполните следующие действия:

Привет в Centos 7 брандмауэр-cmd. Да правильно, если вы используете брандмауэр-cmd-зона=общественные —add-port=2888/tcp но если вы перезагрузите firewal брандмауэр-cmd —перезагрузить

ваш конфиг не будет сохранен

вам нужно добавить ключ

брандмауэр-cmd —постоянная — зона=публичная —add-port=2888/tcp

Похожие вопросы:

Я искал вокруг, смотрел видео быстрого запуска, и я не вижу много принятых ответов. Я запускаю Centos 7 на google compute engine. Я использую брандмауэр по умолчанию и решил разрешить трафик http и.

У меня есть centos 7, и я хочу настроить yum на использование tor в качестве прокси-сервера. Я установил tor, и, как вы знаете, tor установлен на 127.0.0.1 и порт 9050. Как я могу заставить yum.

Мне нужно открыть определенный порт для моего приложения. Я пробовал использовать правило INetFwAuthorizedApplication для каждого приложения для всех портов.

Я только что установил postgresql (как он говорит на postgresql), сервер работает как шарм, никаких проблем вообще. Я просто попытался (хочу) изменить порт по умолчанию (5432) на (9898). Сначала я.

когда я пытаюсь установить SteamCMD на CentOS 7, я получаю ошибку: Login Failure: No Connection, я могу подтвердить, что selinux отключен, и что брандмауэр выключен, я могу заставить его нормально.

У меня есть задача в моем сценарии ansible-playbook открыть порт TCP на удаленной машине. но когда я запускаю свой плейбук ansible, он выдает ошибку. Но когда я запускаю firewall-cmd —permanent.

Я хочу открыть порт на Azure. Я вошел в систему Azure VM. После этого как мне открыть порт? Я попытался открыть порт брандмауэра, но это не помогло. Я также пытался сделать это через azure-cli , но.

Я пытаюсь обновить довольно большую кодовую базу PHP 5.3 до PHP 7. Он размещен на CentOS 6.5, так что я хочу сохранить его на этом OS. В настоящее время я делаю это на virgin Vagrant box — я успешно.

У меня есть некоторые порты, заблокированные брандмауэром, когда я устанавливаю свой сервер centos, например, gerrit не может отправить email по ошибке тайм-аута, когда я останавливаю службу.

Прежде всего, это не содержит моего ответа. Я хочу найти, какое правило брандмауэра разрешает определенный порт 1433 На моем сервере установлен Plesk, а правило брандмауэра MS SQL over TCP protocol.

Настройка 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.

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

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

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

Firewalld Centos 7. Установка, настройка, примеры

Firewalld хорошая замена iptables, пришедшая в базовых версиях Centos 7. Он не сильно отличается от своего предшественника и все изменения, в основном, связаны лишь в способе ввода тех или иных команд. Давайте начнем с самого простого — установки.

Установка

Несмотря на то, что в базовых версиях Centos 7 firewall установлен по-умолчанию, некоторые хостинг провайдера удаляют его из своих сборок. Если на команду

система отвечает, что firewalld не найден, то необходимо выполнить его установку следующей командой:

После установки необходимо будет запустить firewalld и добавить его в автозагрузку. Выполняем следующие команды:

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

Если ответ «running», значит наш брандмаур установлен и готов к работе.

Общее

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

которая выведет вам все доступные зоны.

Так же в firewalld имеется возможность установки постоянных правил. Для этого используется ключ—permanent.

Давайте посмотрим, а что же доступно нам «из коробки»:

Кстати, если добавить ключикpermanent, о котором я говорил чуть выше, то list-all выведет лишь то, что доступно на постоянной основе.

Если вдруг вы захотите увидеть лишь доступные порты, то можно воспользоваться следующей командой:

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

Открываем порт

Открыть порт возможно простой командой add-port:

Тут мы открываем порт 3000 для public. В данном примере настройка сохранится лишь временно, так как не указанpermanent. Давайте откроем его на постоянной основе:

После изменений не забывайте перезагружать правила.

Закрываем порт

Для того, чтобы закрыть тот или иной порт используется команда remove-port:

Удаление порта так же может быть как постоянным, так и временным, поэтому не забывайте проpermanent:

Сервисы

Если вы выполняли командуlist-all, то могли обратить внимание на services. Подключенные сервисы сами так же используют определенные порты, но они уже не записываются в переменную открытых портов, а значит их уже не увидеть в list-ports.

Давайте, для примера, создадим сервис pptp, который будет работать на 1723 порту, используя tcp. Создаем сервис:

Так, сервис для firewalld создан. Давайте немного подредактируем его открываем файл, расположенный по пути/etc/firewalld/services/pptp.xml и заменяем его содержимое на следующее:

Читайте так же:
Не устанавливается Discord в системе Windows

Как можно было заметить, все настройки сервисов хранятся в xml формате.

После создания сервиса его необходимо добавить в firewalld:

Теперь наш сервис будет доступен после перезагрузки правил. Чтобы удалить данный service воспользуемся следующей командой:

Если вас заинтересовала данная возможность, то вы можете посмотреть список доступных services, используя следующую команду:

Еще пару команд

Вроде самые важные возможности я описал, но всё же давайте посмотрим еще некоторые команды для firewalld:

  • get-active-zones — список активных зон;
  • add-interface — добавить интерфейс;
  • change-interface — изменить интерфейс;
  • remove-interface — удалить интерфейс;
  • panic-on — включение режима паники. Позволяет заблокировать все сетевые соединения;
  • panic-off — отключение режима паники;
  • add-masquerade — добавить маскарадинг;
  • remove-masquerade — удалить маскарадинг.

Пример. Переносим порт для ssh

Давайте перенесем наш ssh на нестандартный порт, например на 5555. Итак, для начала нам необходимо открыть данный порт:

Проверяем работу ssh на новом порту и, если всё работает хорошо, удаляем ssh service:

В данном примере нет информации по редактированию конфигурации ssh, так как она не относится к данной статье, но, в качестве подсказки, конфиг находится по пути /etc/ssh/sshd_config.

Заключение

Несмотря на такое количество не осмотренных команд, данная статья заканчивается именно на тут 🙁 Надеюсь, что читатели данной статьи теперь смогут с легкостью открыть порты для своих приложений.

Firewalld, установка и настройка, зоны, NAT, проброс портов

Firewalld — решение для управления брандмауэром, доступное во многих дистрибутивах Linux, которое работает как интерфейс для системы фильтрации пакетов iptables, предоставляемой ядром Linux. В данном руководстве мы рассмотрим установку и настройку брандмауэра при помощи административного инструмента firewall-cmd.

Зоны и службы Firewalld

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

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

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

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

block — аналогично предыдущему, но при отклонении входящих запросов отправляется сообщение icmp-host-prohibited или icmp6-adm-prohibited.

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

external — внешние сети при использовании брандмауэра в качестве шлюза. Она настроена для маскирования NAT, поэтому ваша внутренняя сеть остается частной, но доступной.

internal — внутренняя сторона шлюза. Компьютеры обладают достаточным уровнем доверия, доступен ряд дополнительных служб.

dmz — используется для компьютеров, расположенных в DMZ («демилитаризованная зона», изолированные компьютеры без доступа к остальной сети). Разрешены только определенные входящие соединения.

work — используется для рабочих машин. Доверять большинству компьютеров в сети. Может быть разрешено еще несколько служб.

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

trusted — доверять всем машинам в сети. Наиболее открытая из всех доступных опций, должна использоваться с осторожностью.

В зонах могут быть установлены разрешения для пользовательских или предварительно заданных служб. Конфигурация предварительно заданных служб находится в директории /usr/lib/firewalld/services. Например, вот содержимое файла /usr/lib/firewalld/services/kerberos.

Можно создавать свои службы для использования в firewalld, создавая файл аналогичного формата в директории /usr/lib/firewalld/services, имя файла также должно заканчиваться на .xml. После создания пользовательских файлов в этой директории нужно запустить команду restorecon для применения подходящих контекстов SELinux.

Управление Firewalld

В Centos 7 firewalld установлен по умолчанию, если же его нет, то можно установить следующей командой:

После установки нужно включить службу

Добавляем в автозагрузку

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

Проверить работу и доступность службы можно командой

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

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

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

Изменения можно сделать временными при помощи опции —timeout, в которой мы можем указать время действия правила в секундах, по истечении которого оно будет удалено.
Это очень полезно при удаленном управлении системой: вы не сможете постоянно заблокировать себе доступ из-за ошибки в правиле, так как по истечении указанного времени изменение будет отменено. Опции —timeout и —permanent нельзя использовать одновременно.

Далее мы рассмотрим ряд других распространенных и полезных опций команды firewall-cmd. Если не указывать зону при изменении конфигурации, будет использоваться зона по умолчанию. Зону можно указать при помощи опции —zone=ИМЯ_ЗОНЫ

—get-default-zone — вывод зоны, установленной в качестве зоны по умолчанию, изначально это зона public.

—new-zone=ИМЯ_ЗОНЫ — создание новой пользовательской зоны, требуется опция —permanent.

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

—get-zones — вывод списка всех доступных зон.

—list-all-zones выводит более подробную информацию о каждой зоне, для примера приведем результат для одной из них.

—get-active-zones выводит только те зоны, которые в данный момент используются и связаны с каким-либо интерфейсом.

—get-services позволяет получить список предварительно заданных служб, которые можно использовать в правилах брандмауэра. Эти службы привязаны к портам.

Читайте так же:
Как найти потерянный Андроид

RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

—list-services используется для получения списка служб, разрешенных для зоны. Ниже приведен заданный по умолчанию список для зоны public.

—add-service применяется для добавления служб в указанной зоне, в данном примере мы добавим предварительно заданную службу kerberos в зону public.

—remove-service выполняет обратную процедуру и прекращает доступ службы в зону.

—add-source=IP-адрес — добавить в зону IP-адрес или диапазон адресов. Это означает, что если адрес источника входящего трафика будет соответствовать диапазону, то к этому трафику будет применяться установленная зона. В данном случае мы установим соответствие зоны testing и трафика с диапазона 10.10.10.0/24.

—remove-source=IP-адрес — удаление IP-адреса или диапазона адресов, ранее добавленных для зоны.

Для одной зоны можно указывать в качестве источника несколько IP-адресов или диапазонов.

—add-port=ПОРТ/ПРОТОКОЛ — добавить в зону TCP или UDP порт. Принцип действия аналогичен —add-source.

—list-ports — вывод списка портов, разрешенных для указанной зоны. Мы только что добавили TCP-порт 9000 в зоне по умолчанию и видим его в списке.

—remove-port удаляет порты, ранее добавленные —add-port.

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

В следующем примере создается новая зона ‘test’, применяемая к трафику с диапазона 192.168.1.0/24. После чего мы разрешаем для зоны службу ssh и TCP-порт 9000.

Так как все изменения вносились с опцией —permanent, требуется перезапуск текущей конфигурации.

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

Также можно просмотреть информацию о зоне test и увидеть, какие изменения мы внесли.

Диапазон адресов источника 192.168.1.0/24, разрешены входящие подключения для службы ssh и TCP-порта 9000.

Рассмотренные правила достаточно просты. Далее мы познакомимся с rich rules, которые обеспечивают гораздо большую гибкость.

Rich rules в firewalld

Rich rules предоставляют гораздо больший уровень контроля, благодаря более тонким настройкам. Также их можно использовать для настройки ведения лога, маскарадинга, проброс портов и ограничения трафика.

Синтаксис и примеры rich rules подробно описаны в соответствующей странице руководства.

При наличии нескольких rich rules они обрабатываются в определенном порядке. Сначала применяются правила перенаправления портов и маскарадинга. Далее идут правила ведения логов. Потом разрешающие правила, а в самом конце — запрещающие. Для пакета используется первое правило из указанного порядка, которое ему подойдет. если он не соответствует ни одному правилу, то к нему будет применено отклонение по умолчанию.

Рассмотрим наиболее важные опции для работы с rich rules.

—add-rich-rule=’ПРАВИЛО’ — добавить правило, в данном примере мы разрешаем трафик с диапазона 10.0.0.0/24 только в диапазон 192.168.0.10/32 через TCP-порты c 8080 по 8090.

—list-rich-rules — вывод всех rich rules для указанной зоны. Мы видим только что созданное нами правило.

—remove-rich-rule — удалить rich rule, синтаксис такой же как у —add-rich-rule.

Создадим rich rule, отклоняющее любой трафик с диапазона 192.168.0.10/24.

Reject выдает ICMP-пакет об отклонении, тогда как drop просто отклоняет трафик без дополнительных действий. Поэтому drop может быть предпочтительнее в плане безопасности, так как ответ об отклонении раскрывает существование системы.

При использовании в rich rules адресов источника или получателя нужно указывать семейство rule family ipv4 или ipv6 в зависимости от используемой адресации.

Rich rules могут использоваться для ограничения трафика. Например, так можно ограничить количество входящих SSH-соединений десятью в минуту:

Также можно применять rich rules для записи сообщений в файл лога. Которое также может быть ограничено. Здесь мы ведем лог SSH-соединений с диапазона адресов 192.168.0.0/24, но количество записей ограничено 50 в минуту. Записываются только сообщения уровня ‘info’ или более важные.

Трансляция сетевых адресов (NAT)

Командой firewall-cmd можно настроить NAT с маскарадингом или пробросом портов. Маскарадинг можно настроить только для IPv4, но не для IPv6.

Настройка маскарадинга в firewalld

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

Маскарадинг для зоны можно включить опцией —add-masquerade

При помощи опции —query-masquerade мы можем убедиться, что маскарадинг успешно включен. В данном случае мы запросим постоянную конфигурацию, так как изменили только ее и еще не выполнили перезапуск.

В нашем примере маскарадингу будет подвергаться любой пакет, отправляемый на адреса, указанные в зоне ‘testing’. Для более тонкой настройки можно воспользоваться rich rules.

Здесь маскарадинг выполняется для всего трафика с диапазона адресов 192.168.1.0/24.

проброс портов в firewalld

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

В рассмотренном ниже примере локальная система будет перенаправлять весь трафик, отправленный на порт 22, на TCP-порт 2222 на адрес 10.0.0.10. Правило перенаправления портов будет применяться только для отправителей, указанных в зоне ‘testing’.

Убедиться в успешной работе проброса портов можно при помощи опции —query-forward-port.

Целиком вводить запись, которую вы делали при добавлении проброса портов, достаточно неудобно. Лучше воспользоваться опцией —list-all, она покажет все перенаправляемые порты.

Также эта команда показывает включен или отключен маскарадинг.

Для более тонкой настройки снова можно воспользоваться rich rules. В данном примере мы можем указать конкретный адрес отправителя в зоне testing, а не всю зону.

Также мы можем не использовать параметр to-addr, в этом случае перенаправление портов полностью будет выполняться на локальной системе. Действующие rich rules можно просмотреть, используя опцию —list-rich-rules.

Заключение

Команда firewall-cmd позволяет нам создавать базовые правила для firewalld, а также rich rules с очень подробными пользовательскими параметрами. Мы также рассмотрели маскарадинг и перенаправление портов для отправки трафика на другие узлы при помощи трансляции сетевых адресов (NAT).

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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