如何让 SECMARK 在 Ubuntu 18.04 或 centOS 7.7 上工作

How to get SECMARK work on Ubuntu 18.04 or centOS 7.7

我有一个关于 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”来配置“安全”table,我得到了相同的输出。

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上下文,然后才能在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?