将 IPtables 规则转换为 FirewallD 规则(Wireguard 的 Killswitch)

将 IPtables 规则转换为 FirewallD 规则(Wireguard 的 Killswitch)

根据 Mullvad 的教程,启用 Wireguard 的终止开关需要执行以下操作:

答:在 /etc/wireguard/ 中的 WireGuard 配置文件的 [Interface] 部分下添加以下几行:

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 具有- 直接的建议将其用作最后一个选项(如果您没有其他选项,如何设置规则),但它就在那里......语法最接近iptables这就是为什么我直接指出这个选项。如果你想让规则持久,你也可以使用--持久性选项,但我认为在这种情况下它是不受欢迎的。

一般语法是:

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命令。

我希望这个例子足以让您能够将任何规则重写为防火墙语法。祝你好运!

-------- 编辑:添加-D“选择” - - - - -

iptables -D OUTPUT ...

对应

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

相关内容