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

Согласно руководству Mullvad, для включения выключателя для 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 для приведенных выше правил?

0
задан 1 March 2019 в 15:22
1 ответ

Введение

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

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

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

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

Синтаксис в общем случае:

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

таблица по умолчанию является фильтром, так что в случае, если вы используете iptables без опции -t, вы работаете с фильтром table -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

, так как вы видите, что разница "только" в начале в том, как сказать, куда будет добавлено правило. Часть совпадает с командой iptables.

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

-------- edit : adding -D "alternative" ----------

iptables -D OUTPUT ...

соответствуют

firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
0
ответ дан 5 December 2019 в 03:54

Теги

Похожие вопросы