SELinux(Security-Enhanced Linux)是Linux內核的強制訪問控制(MAC)模塊,通過策略規則嚴格限制進程對文件、端口、設備等資源的訪問權限;防火墻(CentOS 7及以上默認使用firewalld
)是網絡層訪問控制工具,負責管理進出系統的網絡流量(如開放/關閉端口、限制源IP)。兩者結合可實現“網絡層+系統層”的雙重安全防護,彌補單一組件的不足。
通過sestatus
命令確認SELinux是否啟用及當前模式(Enforcing
/Permissive
/Disabled
)。若未啟用,需編輯/etc/selinux/config
文件,將SELINUX=
行修改為Enforcing
(強制模式),并重啟系統使配置生效。
示例:
sestatus # 查看狀態
sudo sed -i 's/SELINUX=.*/SELINUX=enforcing/g' /etc/selinux/config # 修改為強制模式
sudo reboot # 重啟系統
啟動firewalld
并設置開機自啟,添加常用服務(如http
、https
)或端口(如80/tcp
、443/tcp
)到防火墻規則,確保網絡流量能到達對應服務。
示例:
sudo systemctl start firewalld # 啟動firewalld
sudo systemctl enable firewalld # 開機自啟
sudo firewall-cmd --permanent --add-service=http # 添加http服務
sudo firewall-cmd --permanent --add-service=https # 添加https服務
sudo firewall-cmd --reload # 重新加載配置
當通過firewalld
開放新端口(如8080/tcp
)時,需同步配置SELinux的端口上下文,否則SELinux會阻止進程使用該端口。使用semanage
命令添加端口及對應的SELinux類型(如http_port_t
用于HTTP服務):
示例:
sudo semanage port -a -t http_port_t -p tcp 8080 # 添加8080/tcp端口并關聯http_port_t類型
sudo firewall-cmd --permanent --add-port=8080/tcp # firewalld開放8080/tcp端口
sudo firewall-cmd --reload # 重新加載firewalld
若需進一步細化訪問控制(如僅允許某IP訪問HTTP服務),可通過firewalld
的富規則限制網絡層訪問,同時通過SELinux策略限制進程的操作權限(如禁止HTTP服務綁定低端口):
示例:
# firewalld富規則:僅允許192.168.0.100訪問80/tcp端口
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.100" port port="80" protocol="tcp" accept'
# SELinux策略:限制httpd服務僅能綁定1024以上端口(默認允許)
sudo setsebool -P httpd_can_network_connect 1 # 允許httpd訪問網絡(可選)
sudo firewall-cmd --reload # 重新加載firewalld
當SELinux阻止firewalld或服務的正常操作時,需通過日志分析原因并調整策略:
ausearch
命令過濾AVC
(訪問控制拒絕)事件;audit2allow
工具根據日志生成策略模塊,并加載到SELinux中。# 查看最近的SELinux拒絕事件
sudo ausearch -m avc -ts recent
# 生成自定義策略模塊(假設日志中包含"avc: denied")
sudo ausearch -m avc -ts recent | audit2allow -M my_selinux_policy
# 加載自定義策略模塊
sudo semodule -i my_selinux_policy.pp
若firewalld開放了某端口但SELinux未配置對應上下文,會導致服務無法訪問。需確保兩者規則一致(如開放端口的同時配置SELinux端口類型)。
通過semanage port -l
查看當前SELinux管理的端口,通過firewall-cmd --list-all
查看firewalld規則,確保兩者均未包含不必要的開放項。
修改SELinux或firewalld配置前,備份相關文件(如/etc/selinux/config
、/etc/firewalld/zones/public.xml
),便于故障恢復。
通過以上步驟,可實現SELinux與firewalld在CentOS中的有效配合,構建“網絡層過濾+系統層強制控制”的雙重安全防線,顯著提升系統安全性。