配置 SELinux 以允许所有出站 tcp 和 udp 端口

配置 SELinux 以允许所有出站 tcp 和 udp 端口

我有一个应用程序可能会连接到任何出站远程 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可以是您选择的任何端口。

相关内容