我有一个应用程序可能会连接到任何出站远程 tcp/udp 端口。因此,我想要一种方法来允许所有出站 tcp 和 udp 连接。
我理解,您可以结合使用 audit2allow 和 semodule -i 来处理 selinx 审计日志中的 name_connect 拒绝。到目前为止,这是我目前的解决方法。但是,对于我以后遇到的每个端口运行此方法,这对我来说是不可扩展的。我想让它经得起未来的考验。我不知道在应用程序安装之前要访问的端口列表。
我希望有一个配置可以开放所有人的访问权限。此配置是否可以扩展以允许所有应用程序的所有出站 tcp、udp 端口(上面我只针对固定应用程序请求)?
最糟糕的情况是,我将枚举 .pp 和 .te 文件中所有可能的端口,并使用 semodule -i 安装它们一次。
例子
在这种情况下,我的应用程序想要连接到 8181。但是,我希望它能够连接到 0
type=AVC msg=audit(1543521403.978:2324): avc: denied { name_connect } for pid=26497 comm="java" dest=8181 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:intermapper_port_t:s0
tclass=tcp_socket
audit2allow 生成:
module joseph-module 1.0;
require {
type tomcat_t;
type intermapper_port_t;
class tcp_socket name_connect;
}
#============= tomcat_t ==============
allow tomcat_t intermapper_port_t:tcp_socket name_connect;
答案1
浏览现有的 SELinux 策略,我发现有一个布尔值允许 Apache 向任何 TCP 端口建立传出连接。它看起来像这样:
[root@localhost ~]# sesearch -s httpd_t -A -p name_connect -b httpd_can_network_connect
allow httpd_t port_type:tcp_socket name_connect; [ httpd_can_network_connect ]:True
我相信你可以采用这种方法,例如:
allow tomcat_t port_type:tcp_socket name_connect;
答案2
1)创建文件 allow-all-outbound-ports.te
module allow-all-outbound-ports 1.0;
require {
type tomcat_t;
type port_type;
class tcp_socket name_connect;
class udp_socket name_connect;
}
#============= tomcat_t ==============
allow tomcat_t port_type:tcp_socket name_connect;
allow tomcat_t port_type:udp_socket name_connect;
然后我按照 https://relativkreativ.at/articles/how-to-compile-a-selinux-policy-package 关于如何从.te 文件创建自己的包。
2)将 .te 转换为 .mod
checkmodule -M -m -o allow-all-outbound-ports.mod allow-all-outbound-ports.te
stdout: checkmodule: loading policy configuration from allow-all-outbound-ports.te
stdout: checkmodule: policy configuration loaded
stdout: checkmodule: writing binary representation (version 19) to allow-all-outbound-ports.mod
3)将.mod 转换为.pp
semodule_package -o allow-all-outbound-ports.pp -m allow-all-outbound-ports.mod
<no std out>
4)安装包
semodule -i allow-all-outbound-ports.pp
执行完所有这些命令后,我的应用程序便能够在任何端口上进行通信。我尝试了 5357,这是我以前从未启用过的端口。请注意,这tomcat_t
可以是您选择的任何端口。