firewalld применяет зону интерфейса после совпадения зоны ipset
У меня есть настройка firewalld с двумя зонами.
Одна зона используется для разрешения трафика из определенных IP-сетей на некоторые порты:
some-ips-allowed (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ipset:some-ip-set
services:
ports: 22/tcp 80/tcp 443/tcp
...
The some-ip-set
содержит несколько сетей, скажем,10.0.0.0/8
.
Другой зоне назначены некоторые интерфейсы (внесены в белый список из-заtarget: ACCEPT
):
something-trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: eth123
sources:
services:
ports:
...
Интерфейс имеет IP в той же сети:10.0.0.1
.
Теперь сложный случай: если я попытаюсь получить доступ к машине через интерфейсeth123
на порту ex. , мне отказывают. Это связано с приоритетами: firewalld настраивает nftables так, чтобы ipsets обрабатывались раньше интерфейсов, а зонаsome-ips-allowed
не разрешает порт123
.
Вот отрывок изnft list ruleset
, обратите внимание на директиву:
chain filter_INPUT_ZONES {
ip saddr @some-ip-set goto filter_IN_some-ip-set
iifname "eth123" goto filter_IN_something-trusted
...
Короче говоря, логика такая: если IP соединения совпадает, то используется зона ipset, и всё.
Чего я хочу добиться: если IP-адрес соединения совпадает и он не обрабатывается явно, то он будет обработан в следующей соответствующей зоне (зоне интерфейса).
Возможно ли это в firewalld, желательно без прямого вмешательства в команды?
Изменить: Согласно этому: https://wiki.nftables.org/wiki-nftables/index.php/Jumping_to_chain , я вижу, что у меня естьjump
вместоgoto
в правилах нфт.
Опять же, можно ли это сделать с помощью команд уровня? Если нет, безопасно ли (т. е. не вызовет ли это непредсказуемых конфликтов и побочных эффектов) использоватьnft
команды напрямую, хотя остальная часть конфигурации управляетсяfirewall-cmd
?
1 ответ
Кажется, невозможно сделать это, используяfirewall-cmd
.
Однако желаемый эффект можно получить, используя Политики firewalld вместо Зон .
Рассмотрим следующую политику:
some-ips-allowed-policy (active)
priority: -1
target: CONTINUE
ingress-zones: ANY
egress-zones: HOST
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source ipset="some-ip-set" port port="22" protocol="tcp" accept
Он будет применяться ко всему входящему трафику (благодаряANY
иHOST
зоны входа/выхода), и будетaccept
подключения с IP-адресов в предоставленном ipset.
Теперь, если политика не соответствует IP-адресам, она просто продолжит обработку зон (обратите внимание наCONTINUE
цель).nft
показывает, что политика порождаетjump
заявления - как раз то, что нужно.
Кроме того, используяpriority
настройки можно легко контролировать, применяется ли политика до или после обработки зон.