firewalld-0

Шлюз FIREWALL

Все что нужно настроить — включить перенаправления на уровне ядра. Для этого открываем следующий файл:
vi /etc/sysctl.conf

И добавляем в него следующую строку:
net.ipv4.ip_forward=1

После применяем настройку:
sysctl -p /etc/sysctl.conf

В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.
В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.

Настройка брандмауэра
Настройка выполняется для двух сетевых интерфейсов — INT (внутренний) и EXT (внешний):

firewall-cmd --direct --permanent --add-rule ipv4 nat POSTROUTING 0 -o EXT -j MASQUERADE

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i INT -o EXT -j ACCEPT

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i EXT -o INT -m state --state RELATED,ESTABLISHED -j ACCEPT

systemctl restart firewalld

 

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

firewall-cmd --zone=**** --add-forward-port=port=****:proto=tcp:toport=****:toaddr=**** --permanent

firewall-cmd --zone=**** --add-forward-port=port=10002:proto=tcp:toport=22:toaddr=192.168.10.2 --permanent

network-manager рулит зоной для firewalld.
Установить зону для интерфейса:

nmcli con modify (имя интерфейса в NM) connection.zone myZone

 

firewall-cmd --state узнать состояние FirewallD
firewall-cmd --reload перезагрузить FirewallD
firewall-cmd --get-zones вывести список всех заданных зон
firewall-cmd --get-services список всех поддерживаемых служб
firewall-cmd --get-active-zones список всех активных зон
firewall-cmd [--zone=] --add-interface= добавить интерфейс к зоне
firewall-cmd [--zone=] --change-interface= изменить интерфейс
firewall-cmd [--zone=] --remove-interface= удалить интерфейс из зоны
firewall-cmd --panic-on режим паники, блокирующий все сетевые соединения
firewall-cmd --panic-off отмена режима паники
firewall-cmd [--zone=] --add-service= [--timeout=] добавить службу к зоне
firewall-cmd [--zone=] --remove-service= [--timeout=] удалить службу из зоны
firewall-cmd [--zone=] --add-port=[-]/ [--timeout=] добавить порт к зоне
firewall-cmd [--zone=] --remove-port=[-]/ [--timeout=] удалить порт из зоны
firewall-cmd [--zone=] --add-masquerade добавить маскарадинг к зоне
firewall-cmd [--zone=] --remove-masquerade удалить маскарадинг
добавить проброс портов к зоне:
firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
удалить проброс портов из зоны:
firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
листинг проброса в зоне
firewall-cmd --zone=**** --list-forward-ports

Достаточно полное, хоть и краткое описание параметров утилиты firewalld-cmd которые позволяют управлять межсетевым экраном firewalld. По традиции большинство опций начинаются с символов --.

Получение справки:

  • -h, --help - Возвращает описание опций firewall-cmd.
  • -V, --version - Возвращает версию firewalld.

Проверка статуса:

  • --state Проверяет активен ли демон firewalld. Возвращает код 0 если демон активен или NOT_RUNNING если демон не запущен. Так же выводит информацию в стандартный поток STDOUT

Перезагрузка:

  • --reload - Перезагружает правила межсетевого экрана с сохранением информации о состоянии.
  • --complete-reload — Полностью перезагружает межсетевой экран, в том числе перезагружает модули ядра (netfilter)/ Очевидно что все соединения будут сброшены и временные правила потеряны. Эта перезагрузка для особо неприятных случаев.

Паника (внештатный режим):

  • --panic-on — Включае режим паники. Все входящие и исходящие пакеты без исключения отбрасываются, все соединения со временем разрываются. Идеально подходит на случай обнаружения взлома или иных серьёзных проблем.
  • --panic-off — Отключить режим паники. Брэндмауер начинает работать в штатном режиме, некоторые соединения могут быть восстановлены, если режим паники длился меньше время смерти для этих соединений.
  • --query-panic — Возвращает 0 если режим паники включен и 1 если выключен.

Опции обработки зон:

  • --get-default-zone — Возвращает зону по умолчанию для соединений и интерфейсов (Изначально по умолчанию public).
  • --set-default-zone=<zone> - Устанавливает зону по умолчанию для соединений и интерфейсов (Для которых зона не была установлена). Это постоянные изменения.
  • --get-zones — Возвращает предопределенных зон служб используя пробелы в качестве разделителя.
  • --get-services — Возвращает список стандартных служб используя пробелы в качестве разделителя.
  • --get-icmptypes - Возвращает список предопределенных типов ICMP используя пробелы в качестве разделителя
  • --get-active-zones — Возвращает список активных в настоящее время зон вместе с интерфейсами в этих зонах в формате:
    <zone1>: <interface1> <interface2> ..
    <zone2>: <interface3> ..
  • --get-zone-of-interface=<interface> - Возвращает зону которой пренадлежит интерфейс <interface> или ничего, если интерфейсу не назначена зона.
  • --list-all-zones — Возвращает список всех действий во всех зонах в формате:
    <zone>
    interfaces: <interface1> ..
    services: <service1> ..
    ports: <port1> ..
    forward-ports: <forward port1> ..
    icmp-blocks: <icmp type1> ..

Опции обработки интерфейсов:

Эти опции относятся только к одной конкретной зоне. Если используется --zone=<zone>, то они влияют на зону <zone>. Если --zone=<zone> опущен, то опции влияют на зону «по умолчанию» (смотрите --get-default-zone). Получить список предопределенных зон можно используя --get-zones. Имя интерфейса это строка длинной не более 16 символов, оно не может содержать '', '/', '!' и '*'. [--zone=<zone>]

  • --list-interfaces — Возвращает список интерфейсов которые пренадлежат к зоне <zone>. Если параметр --zone опущен, то используется зона «по умолчанию». [--zone=<zone>]
  • --add-interface=<interface> - Добавляет интерфейс <interface> в зону <zone>. Если параметр --zone опущен, то используется зона «по умолчанию».
  • [--zone=<zone>] { --change-interface=<interface> | --change --zone=<interface> } - Изменить зону интерфейса <interface> принадлежащего зоне <zone>. Если параметр --zone опущен, то используется зона «по умолчанию». Если старая и новая зона совпадают то команда ничего не делает и не возвращает ошибки. Если интерфейс не принадлежал ранее к этой зоне то он будет в неё добавлен, как при использовании параметра --add-interface.
  • [--zone=<zone>]--query-interface=<interface> - Возвращает 0 если интерфейс <interface> принадлежит к зоне <zone> и 1 если не пренадлежит.
  • [--zone=<zone>]--remove-interface=<interface> - Удаляет интерфейс<interface> из зоны <zone>.Если параметр --zone опущен, то используется зона «по умолчанию»

.Опции настройки и запроса зон:

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

  • [--zone=<zone>] --add-ACTION [--timeout=<seconds>] - Добавить действие ACTION для зоны <zone>. Эта опция может быть указана несколько раз. Если параметр --zone опущен, то используется зона «по умолчанию». Чтобы получить зону по умолчанию используется --get-default-zone. Если указан тайм-аут то действие ACTION будет активно указанное количество секунд и затем удалено.
  • [--zone=<zone>] --remove-ACTION - Удалить действие ACTION из зоны <zone>. Эта опция может быть указан несколько раз. Если параметр --zone опущен, то используется зона «по умолчанию». Если действие было добавлено с указанием тайм-аута, оно всё равно будет удалено.
  • [--zone=<zone>] --query-ACTION — Возвращает 0 если действие ACTION было добавлено для зоны <zone> и 1 в противном случае. Если параметр --zone опущен, то используется зона «по умолчанию».
  • [--zone=<zone>] --add-masquerade [--timeout=<seconds>] - Включить маскарад для зоны <zone>. Если параметр --zone опущен, то используется зона «по умолчанию». Если указан тайм-аут, маскарадинг будет активным в течение указанного количества секунд.
  • [--zone=<zone>] --remove-masquerade - Отключить маскарад для зоны <zone>. Если параметр --zone опущен, то используется зона «по умолчанию». Если маскарадинг был включен с тайм-аут, он всё равно будет отключен.
  • [--zone=<zone>] --query-masquerade — Возвращает 0 если маскарадинг включен для зоны <zone> и 1 в противном случае.Если параметр --zone опущен, то используется зона «по умолчанию».
  • [--zone=<zone>] --list-services — Возвращает список сервисов добавлены в зону <zone> разделенный пробелами. Если параметр --zone опущен, то используется зона «по умолчанию». Чтобы получить список всех предустановленных сервисов используйте --get-services.
  • [--zone=<zone>] --list-ports— Возвращает список портов добавленных в зону <zone> разделённый пробелами. Списрок имеет формат: <port>[-<port>]/<protocol>, где в качестве порта может быть указан диапазон портов. Если параметр --zone опущен, то используется зона «по умолчанию».
  • [--zone=<zone>]--list-icmp-blocks - Список типов ICMP пакетов добавлнных в зону <zone> разделенный пробелами. Если параметр --zone опущен, то используется зона «по умолчанию». Для получения списка всех предопределенных типов ICMP используйте --get-icmptypes.
  • [--zone=<zone>] --list-forward-ports — Возвращает список всех «проброшенных» портов добавленных в зону <zone>.Если параметр --zone опущен, то используется зона «по умолчанию».
  • [--zone=<zone>] --list-all - Возвращает список всех действий добавленных или включенных в зону <zone>. Если параметр --zone опущен, то используется зона «по умолчанию».

Варианты действий для использования с опциями настройки и запроса зон:

Эти действия (ACTION) используются в --add-ACTION, --remove-ACTION и --query-ACTION предыдущего раздела.

  • service=<service> - Использовать одну из стандартных служб. Для получения списка всех стандартных служб используйте --get-services.
  • port=<port>[-<port>]/<protocol> - Использовать порт <port> или диапазон портов <port>-<port> для работы протоколы. Порт - это номер порта от 1 до 65535. Протокол может быть TCP или UDP.
  • icmp-block=<icmptype> - .Использовать предопределенные типы ICMP пакетов. Для получения списка всех предопределенных типов ICMP используйте --get-icmptypes.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toport=<port>[-<port>] - Использовать порт при переадресации пакетов. Указываются исходный и целевой порты или диапазоны портов для протокола. Протоколом может быть UDP или TCP. Проброс осуществляется с локального порта port на локальный toport.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toaddr=<address> - Проброс локального порта port в тот же порт на хосте toaddr.
  • forward-port=port=<port>[-<port>]:proto=<protocol>:toport=<port>[-<port>]:toaddr=<address> - Проброс локального порта port в порт toport на хосте toaddr.

Постоянные параметры:

Постоянные параметры будут хранится в настройках и не исчезнут после перезагрузки. Так же их изменение вступят в силу только после перезагрузки или перезапуска системы.(Ключевое слово тут --permanent) Можно использовать:

  • --permanent { --get-zones | --get-services | --get-icmptypes }
  • --permanent [--zone=<zone>] { --list-services | --list-ports | --list-icmp-blocks | --list-forward-ports }
  • --permanent [--zone=<zone>] { --add-ACTION | --remove-ACTION | --query-ACTION }
  • --permanent [--zone=<zone>] { --add-masquerade | --remove-masquerade |--query-masquerade }

Результат такой же как и при использовании временных параметров, только постоянный. :)

Ещё опции:

Эти опции служат для управления правилами на более низком уровне.

  • --direct--passthrough { ipv4 | ipv6 | eb } <args> - Передача команд через фаервол. Аргументом <args> могут быть любые агрументы командной строки допрустимые в iptables, ip6tables и ebtables.
  • --direct--add-chain { ipv4 | ipv6 | eb } <table> <chain> - Добавить новую цепочку <chain> в таблицу <table>.
  • --direct--remove-chain { ipv4 | ipv6 | eb } <table> <chain> - Удалить цепочку <chain> из таблицы <table>.
  • --direct--query-chain { ipv4 | ipv6 | eb } <table> <chain> - Возвращает 0 если цепочка с именем <chain> присутствует в таблице <table> и 1 в противном случае.
  • --direct--get-chains { ipv4 | ipv6 | eb } <table> - Возвращает все цепочки содержащиеся в таблице <table> в виде списка разделенного пробелами.
  • --direct--add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args> - Добавить правило <args> в цепочку <chain> таблицы <table>.Приоритет используется для задания позиции правила в цепи. Правило с приоритетом 0 добавляется на самый верх цепи. Чем больше приоритет, тем ниже правило расположено в цепочке. Порядок расположения правил с одинаковым приоритетом может менятся и поэтому не предсказуем. Не стоит назначать одинаковый приоритет правилам.
  • --direct--remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args> -Удалить правило <args> из цепочки <chain> в таблице <table>.
  • --direct--query-rule { ipv4 | ipv6 | eb } <table> <chain> <args> - Возвращает 0 если правило <args> существует в цепочке <chain> таблицы <table> и 1 в противном случае.
  • --direct--get-rules { ipv4 | ipv6 | eb } <table> <chain> - Возвращает все правила цепочки <chain> в таблице <table> в виде строк.