我正在尝试在我的 archlinux 发行版上设置一个 nftables 防火墙,该防火墙仅允许通过 vpn 的流量(并阻止所有 ipv6 流量以防止任何 ipv6 泄漏)
我已经使用它有一段时间了,最终得到了一个可以让我浏览网页的配置,尽管据我到目前为止对 nftable 的了解,它不应该让我这样做。规则集非常短,如下所示:
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
jump base_checks
ip saddr VPN_IP_ADRESS udp sport openvpn accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy drop;
ip daddr VPN_IP_ADRESS udp dport openvpn accept
oifname "tun0" accept
}
chain base_checks {
ct state { related, established} accept
ct state invalid drop
}
}
我试图通过反复试验找到自己的方法,并且其中还有许多其他规则,但仅此而已,我就可以先连接到 VPN 服务器,然后浏览网页。一旦我从 outout 链中删除最后一条规则,它就不会再让我浏览网页了。
我对此完全陌生,几乎一无所知,正在尝试学习。不幸的是,关于 nftables 的文档并不是那么广泛,所以我现在有点陷入困境。
据我目前的了解,此设置应该允许连接到 VPN,但不应允许任何其他传入流量 - 但我可以毫无问题地浏览网页。
有谁知道它为什么起作用以及我应该如何继续设置 nftables 以获得更完整的设置?
答案1
state
related
您可以使用和允许传入流量established
。 HTTP 流量由客户端发送请求发起,响应将按照established
输出链中的规则进行匹配。假设您的路由通过 VPN,则您的规则接受初始流量oif "tun0" accept
。