В то время как firewalld, как правило, является отличным инструментом для настройки брандмауэра на компьютере с Linux, для этого конкретного случая использования — перенаправления трафика на другие хосты — использовать его довольно сложно. Я бы предложил отключить его на вашем сервере и просто использовать iptables (или nftables) напрямую.
Однако, если вы действительно хотите использовать firewalld, попробуйте это (как root):
1. Создайте пользовательскую зону для вашего интерфейса WireGuard, которая принимает весь трафик:
брандмауэр-cmd --permanent --new-zone=mywg
firewall-cmd --permanent --zone=mywg --set-target=ПРИНЯТЬ
брандмауэр-cmd --перезагрузить
2. Добавьте в зону «богатые» правила для отклонения входящих подключений от WireGuard к самому серверу:
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" priority="30001" значение протокола="tcp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" priority="30002" значение протокола="udp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" priority="30003" значение протокола="tcp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" priority="30004" значение протокола="udp" reject'
3. Добавьте «прямые» правила, чтобы разрешить переадресацию SSH-соединений IPv4 между другими хостами WireGuard и отклонить все остальное:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -m state --state ESTABLISHED, RELATED -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 1 -i wg0 -o wg0 -m state --state NEW -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 2 -i wg0 -j REJECT
firewall-cmd --direct --add-rule ipv6 filter FORWARD 0 -i wg0 -j REJECT
4. Привяжите зону к вашему интерфейсу WireGuard и сохраните изменения:
брандмауэр-cmd --zone=mywg --add-interface=wg0
firewall-cmd --runtime-to-permanent
Вы можете добавить дополнительные прямые правила IPv4 от 0 до 2 (перенумеровав ОТКЛОНЯТЬ
правило должно быть последним), если вы хотите разрешить другие типы трафика между вашими хостами WireGuard (или просто замените правила 0 и 1 одним правилом, например -i wg0 -o wg0 -J ПРИНЯТЬ
если вы хотите разрешить серверу пересылать любой трафик между вашими хостами WireGuard).
См. раздел «Втулка и спица». Как использовать WireGuard с Firewalld статью для полного объяснения (узел C — это ваш сервер в этой статье).