如何让 SECMARK 在 Ubuntu 18.04 或 centOS 7.7 上工作 No chain/target/match by that name的原因OS 类型与 SECMARK 的关系参考

问题描述

我有一个关于 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?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...