Aay*_*ura 9 networking iptables cgroups
我似乎无法匹配的cgroup V2层次结构与正在运行的进程cgroup
的模块iptables
。我正在运行带有所有必需模块的 Linux 4.13.0:
$ grep CGROUP <kernel_config>
CONFIG_CGROUPS=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
# CONFIG_CGROUP_RDMA is not set
CONFIG_CGROUP_FREEZER=y
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
# CONFIG_CGROUP_BPF is not set
# CONFIG_CGROUP_DEBUG is not set
CONFIG_SOCK_CGROUP_DATA=y
**CONFIG_NETFILTER_XT_MATCH_CGROUP=m**
CONFIG_NET_CLS_CGROUP=m
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
$ lsmod | grep cgroup
xt_cgroup 16384 2
x_tables 36864 7 xt_LOG,xt_cgroup,iptable_mangle,ip_tables,iptable_filter,xt_mark,ipt_MASQUERADE
Run Code Online (Sandbox Code Playgroud)
它是一个基于 Debian 的发行版,带有 systemd-235,它挂载了以下 cgroup:
$ mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (rw,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
Run Code Online (Sandbox Code Playgroud)
如果我使用 cgroup v1 和net_cls
,一切都很好:
$ cd /sys/fs/cgroup/net_cls,net_prio/
$ mkdir test
$ echo 1 > test/net_cls.classid
$ iptables -A OUTPUT -m cgroup --cgroup 1 -j LOG
$ ping -i 2 google.com &>/dev/null &
$ pgrep ping > test/tasks
Run Code Online (Sandbox Code Playgroud)
我可以在日志中看到数据包。对 cgroup v2 执行相同操作,成功添加了 iptables 规则但不匹配:
$ cd /sys/fs/cgroup/unified/
$ mkdir test
$ iptables -A OUTPUT -m cgroup --path test -j LOG
$ ping -i 2 google.com &>/dev/null &
$ pgrep ping > test/cgroup.procs
Run Code Online (Sandbox Code Playgroud)
该进程在此 cgroup 中运行:
$ cat /proc/<pid>/cgroup
0::/test
Run Code Online (Sandbox Code Playgroud)
并且iptables
没有抱怨无效的 cgroup 路径,但日志中没有显示任何内容。
我需要在我的 VPN 流量之外运行一个 Tor 中继,它用于发送到我的 LAN 之外的所有数据包。我遵循了此答案中概述的方法,并且效果很好(使用 cgroup v1)。问题是我没有找到在启动时创建自定义 cgroup 的直接方法(cgmanager
由于明显缺乏 cgroup v2 支持而无法启动)并将 tor 进程分配给它(如何在systemd
服务中执行?) . 但是systemd
确实在统一的 cgroup v2 层次结构中为每个服务创建了一个单独的 cgroup,因此 Tor 进程位于system.slice/system-tor.slice
. 如上面的一个简单示例所示,iptables 似乎无法匹配此流量。
小智 1
根据https://www.spinics.net/lists/netdev/msg352495.html,v2 cgroup 的正确语法是:
iptables -A OUTPUT -m cgroup ! --path test -j LOG
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2108 次 |
最近记录: |