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에도 마찬가지입니다. 쉘의 cgroup 멤버십을 수동으로 변경하고 VPN의 다른 노드를 핑하는 것도 작동하지 않았습니다. 나는 또한 --path vpn.slice대신 사용해 보았지만 --path /vpn.slice아무런 차이가 없습니다.

여기서 뭔가 빠졌나요?

관련 정보