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настройки можно легко контролировать, применяется ли политика до или после обработки зон.

Другие вопросы по тегам