Преобразование правил 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>