Centos

配置 SELinux 以允許所有出站 tcp 和 udp 埠

  • December 17, 2019

我有一個可能連接到任何出站遠端 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;

瀏覽現有的 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;

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 文件創建自己的包。

  1. 將 .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
  1. 將 .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可能是您選擇的任何內容。

引用自:https://serverfault.com/questions/942237