SELinux與防火墻(以firewalld為例)的配合機制及實踐
SELinux(強制訪問控制)與防火墻(網絡層訪問控制)是Linux系統中互補的安全組件,二者配合可實現“網絡層攔截+系統層管控”的多層防御體系。其中,防火墻負責過濾外部網絡流量(如允許/拒絕特定端口、IP的訪問),SELinux則進一步限制進程對系統資源(文件、端口、設備等)的訪問權限,防止內部進程越權操作或提權攻擊。
SELinux配置
sestatus
命令確認是否啟用(enabled
)及當前模式(Enforcing
/Permissive
/Disabled
)。/etc/selinux/config
文件,將SELINUX=
的值改為enforcing
,保存后重啟系統使配置生效(sudo reboot
)。setenforce 1
(臨時切換至Enforcing模式,重啟失效);setenforce 0
(臨時切換至Permissive模式,用于調試)。防火墻配置
systemctl start firewalld
啟動服務,systemctl enable firewalld
設置開機自啟。firewall-cmd --state
應返回running
。通過firewalld開放服務或端口(如HTTP、HTTPS),作為第一層網絡訪問控制。常用命令:
sudo firewall-cmd --permanent --add-service=http
(HTTP服務,默認端口80);sudo firewall-cmd --permanent --add-service=https
(HTTPS服務,默認端口443)。sudo firewall-cmd --permanent --add-port=8080/tcp
(開放TCP 8080端口)。sudo firewall-cmd --reload
(使永久規則生效)。若firewalld開放了某端口(如8080),需確保對應服務的SELinux上下文允許其使用該端口。例如,若要將Nginx綁定到8080端口(默認僅允許80/443),需執行:
semanage port -l | grep http
(默認HTTP端口為80/tcp、443/tcp)。sudo semanage port -a -t http_port_t -p tcp 8080
(將TCP 8080端口標記為http_port_t
類型,允許HTTP服務使用)。semanage port -l | grep 8080
應顯示http_port_t
。若firewalld放行的流量被SELinux攔截(可通過/var/log/audit/audit.log
查看AVC
拒絕日志),需生成并加載自定義SELinux策略。例如:
ausearch -m avc -ts recent
查看最近的SELinux拒絕事件,或通過audit2why
工具解析原因(sudo ausearch -c 'httpd' --raw | audit2why
)。sudo ausearch -c 'httpd' --raw | audit2allow -M my_httpd_policy
(根據日志生成名為my_httpd_policy
的策略模塊)。sudo semodule -i my_httpd_policy.pp
(將策略模塊加載到SELinux中)。firewalld的“富規則”(Rich Rules)可實現更精細的網絡控制(如限制特定IP訪問某端口),結合SELinux可進一步提升安全性。例如:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
(僅允許192.168.1.0/24網段訪問SSH)。/var/ssh_data
),可使用semanage fcontext
設置上下文:sudo semanage fcontext -a -t ssh_home_t "/var/ssh_data(/.*)?"
,然后通過restorecon -Rv /var/ssh_data
應用上下文。日志分析
/var/log/audit/audit.log
(記錄SELinux拒絕事件),使用grep AVC /var/log/audit/audit.log
篩選拒絕信息。journalctl -u firewalld
),或通過firewall-cmd --get-log-denied
開啟詳細拒絕日志。定期驗證
nmap -p 80,443 <服務器IP>
驗證端口是否開放。sealert -a /var/log/audit/audit.log
查看SELinux警報詳情,確認無未處理的拒絕事件。通過上述步驟,SELinux與防火墻可實現“網絡層過濾+系統層管控”的協同防御,有效降低系統遭受外部攻擊和內部濫用的風險。需注意的是,配置過程中應遵循“最小權限原則”,僅開放必要的服務和端口,并定期更新SELinux策略以適應系統變化。