问题描述
我有一个关于 SEcmark 的问题,它是 iptables 中的一个包标签功能。
我尝试基于 Paul Moore's guide(一个非常古老的 14 岁博客)进行配置,但结果在 ubuntu 18.04 和 centOS 7.7 上都出现错误:
命令:iptables -t mangle -A INPUT -p tcp --src 192.168.0.16 --dport 22 -j SEcmark --selctx system_u:object_r:foo_ssh_packet_t:s0
Ubuntu:No chain/target/match by that name
centOS:invalid argument. Run 'dmesg' for more information
(P.S. 我在 centOS 上运行 dmesg 但没有得到任何有价值的东西)
我还尝试通过将“-t mangle”更改为“-t security”来配置“security”表,但得到了相同的输出。
iptables -t security -A INPUT -p tcp --src 192.168.0.16 --dport 22 -j SEcmark --selctx system_u:object_r:foo_ssh_packet_t:s0
解决方法
因为没有人知道答案,我不知怎么自己想出了如何去做,我想我最好留下一些东西来帮助其他人。
No chain/target/match by that name
的原因
SECMARK 和 SELinux 是高度耦合的,必须先定义 SELinux Context,然后才能在 iptables/nftables 规则中使用。
定义 SELinux 的方法是创建一个用户定义的 SELinux 规则集,也就是 .te
文件,然后编译并安装到您的机器上。之后,您的 iptables/nftables 就可以正常执行上述命令了。
OS 类型与 SECMARK 的关系
Ubuntu 是当今最流行的 Linux 发行版之一,但注意到 Ubuntu 不要预安装 SELinux,并且 AppArmor 直到 2019 年 1 月才支持 SECMARK,所以如果如果你想在 Ubuntu 上使用 SECMARK,卸载 apparmor 并安装 SELinux 可能是值得的。
如果您想在系统之间使用 SECMARK,请注意您需要在两个系统上都安装策略。
参考
SECMARK Support code(did not merge till today)
From the mailing list: [apparmor] Apparmor netfiter support?