У меня есть следующие зоны, относящиеся к этому вопросу.
Я хочу рассматривать трафик, зашифрованный IPSEC (который поступает с определенных IP-адресов), как принадлежащий SemiTrusted.
В iptables я бы использовал сопоставление политик, чтобы использовать цепочку с доверием.
Как я могу добиться этого с помощью firewalld. Я не видел никаких упоминаний о политике на страницах руководства firewalld и не видел, как найти соответствие на основе политики ipsec в firewalld.richlanguage (5).
Я предполагаю, что могу использовать firewalld.direct (5), но я не знаю, как интегрировать его с другой конфигурацией на основе firewalld.zone (5).
edit: Чтобы прояснить, я не хочу открывать порты ipsec в зоне SemiTrusted. Это банально.
Для этого вам не нужно прямое правило; firewalld уже имеет определение службы для IPsec.
firewall-cmd --zone=SemiTrusted --add-service=ipsec
Определение разрешает весь трафик AH, ESP и UDP-порта 500.
Вам понадобится второе правило, если на любом конце есть NAT и вам нужно добавить UDP-порт 4500:
firewall-cmd --zone=SemiTrusted --add-port=4500/udp
Я проделал то же самое с промежуточной зоной:
# first allow 500/udp, 4500/udp, AH and ESP on incoming interface
firewall-cmd --permanent --zone=public --add-service=ipsec
# traffic from our specific IPs
firewall-cmd --permanent --new-zone=OurIps
firewall-cmd --permanent --zone=OurIps --add-source=a.b.c.d/29
# little hack to ensure zone SemiTrusted active and relevant chains are in iptables
firewall-cmd --permanent --new-ipset=empty --type=hash:ip
firewall-cmd --permanent --new-zone=SemiTrusted
firewall-cmd --permanent --zone=SemiTrusted --add-source=ipset:empty
# rule to forward incoming IPsec traffic from OurIps zone to SemiTrusted zone
firewall-cmd --permanent --direct --add-rule ipv4 filter IN_OurIps 0 -m policy --pol ipsec --dir in -g IN_SemiTrusted
# and... have fun
firewall-cmd --reload
Конечно, вы можете управлять IP-адресами в OurIps через явные подсети или ipset.