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> в виде строк.