Centos
配置 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;
瀏覽現有的 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 文件創建自己的包。
- 將 .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
- 將 .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
可能是您選擇的任何內容。