Преобразование правил IPtables в правила FirewallD (Killswitch для Wireguard)

Согласно учебному пособию Маллвада, включение Killswitch для Wireguard включает в себя следующее:

A: Добавьте следующие строки в раздел [Interface] файлов конфигурации WireGuard, находящихся в /etc/wireguard/:

PostUp  =  iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show  %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show  %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Где имя файла для отдельных конфигураций vpn /etc/wireguard/mullvad-se5.conf например. CentO/S и Fedora используют FirewallD вместо IPtables, поэтому использование вышеприведенных правил приводит к не отвечающему туннелю "вверх". Какой точный эквивалент FirewallD для приведенных выше правил?

1 ответ

вступление

Ваше предположение не совсем верно. Тот факт, что система использует Firewalld, не означает, что команды iptables не работают... Оба (iptables & firewalld) устанавливают одинаковые параметры по отношению к ядру - это просто вариант, как его настроить. Дело в том, что когда вы используете firewalld и что-то настраивается с использованием команды iptables, она работает до тех пор, пока правила firewalld не будут перезагружены, так как это "дополнительные" правила не известны firewalld - у него нет представления объекта firewalld.

Вопрос в том, действительно ли это проблема в случае непостоянного туннеля - в случае перезагрузки туннель не является постоянным, и во время переустановки соединения все настройки могут быть установлены снова, поэтому я не вижу "состояние времени выполнения" настройка как действительно проблема...

Конкретно к вопросу

В Firewalld есть ключ --direct, который рекомендуется использовать в качестве последнего параметра (если у вас нет другого способа настройки правила), но он есть... Синтаксис наиболее близок к iptables, поэтому Я указываю прямо на эту опцию. Если вы хотите, чтобы правило было постоянным, вы также можете использовать опцию --peristent, но я думаю, что в этом случае оно не требуется.

Синтаксис в целом:

firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>

По умолчанию таблица является фильтром, поэтому, если вы используете iptables без опции -t, вы работаете с табличным фильтром.

iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

будет соответствовать

firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Как вы можете видеть, разница в начале заключается только в том, как сказать, где будет добавлено правило. <args> часть такая же, как в случае команды iptables.

Я надеюсь, что этого примера будет достаточно, чтобы вы могли переписать любое правило (правила) в синтаксис firewalld. Удачи!

-------- редактировать: добавить -D "альтернатива" ----------

iptables -D OUTPUT ...

переписываться с

firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
Другие вопросы по тегам