iptables cgroup 过滤器不匹配

iptables cgroup 过滤器不匹配

我需要确保只有特定服务可以访问我的 VPN 虚拟接口。据我所知,使用 iptables 根据进程 cgroup 成员身份进行过滤是最简洁的方法。

因此,我使用 systemd 将 sshd 服务放入vpn.slicecgroup 中,并创建了一条链并将其添加到 INPUT 和 OUTPUT:

iptables -N vpn
iptables -A vpn -m cgroup --path /vpn.slice -j ACCEPT
iptables -A vpn -j DROP

iptables -A INPUT  -i $INTERFACE -j vpn
iptables -A OUTPUT -o $INTERFACE -j vpn

iptables -L 输出:

[root@sh ~]# iptables -L -v
Chain INPUT (policy ACCEPT 287K packets, 17M bytes)
 pkts bytes target     prot opt in     out     source               destination         
  106  5160 vpn        all  --  homeforward any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 476K packets, 673M bytes)
 pkts bytes target     prot opt in     out     source               destination         
   78 10062 vpn        all  --  any    homeforward  anywhere             anywhere            

Chain vpn (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             cgroup /vpn.slice
  184 15222 DROP       all  --  any    any     anywhere             anywhere            

应用这些规则时,我无法连接到 ssh 服务器,其他端口上的 netcat 也是如此。手动更改 shell 的 cgroup 成员身份并尝试 ping vpn 中的其他节点也不起作用。我也尝试过使用--path vpn.slice而不是--path /vpn.slice,它没有什么区别。

我在这里错过了什么吗?

相关内容