SELinux與Ubuntu防火墻(UFW/iptables)的配合
SELinux(強制訪問控制)與Ubuntu防火墻(如UFW、iptables)是互補的安全組件:防火墻負責網絡層流量過濾(如允許/拒絕特定端口、IP的訪問),SELinux則進一步限制進程對系統資源(文件、端口、設備等)的訪問權限,防止內部進程越權操作。二者配合可實現“網絡層攔截+系統層管控”的多層防御體系。
基礎準備:確保兩者均處于有效狀態
sestatus
命令確認SELinux已啟用(enabled)及當前模式(建議生產環境設置為Enforcing
模式);若未啟用,可編輯/etc/selinux/config
文件將SELINUX=
的值改為enforcing
,重啟系統使配置生效;臨時切換模式可使用setenforce 1
(Enforcing)或setenforce 0
(Permissive,用于調試)。sudo ufw default deny incoming
拒絕所有入站流量),并通過sudo ufw allow 80/tcp
等命令添加必要的網絡流量規則;啟用防火墻服務(sudo systemctl enable ufw && sudo systemctl start ufw
)。核心配合步驟:策略與規則的協同
sudo ufw allow http
;開放自定義端口(如8080):sudo ufw allow 8080/tcp
;添加規則后需重載配置(sudo ufw reload
)使生效。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
)。/var/log/audit/audit.log
查看AVC拒絕日志),需生成并加載自定義SELinux策略。例如:
ausearch -m avc -ts recent
查看最近的SELinux拒絕事件,或通過audit2why
工具解析原因(sudo ausearch -c 'httpd' --raw | audit2why
);my_httpd_policy
的策略模塊(sudo ausearch -c 'httpd' --raw | audit2allow -M 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'
),然后重載firewalld(sudo firewall-cmd --reload
);/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
(可通過grep AVC /var/log/audit/audit.log
篩選拒絕信息);firewalld日志默認集成到系統日志(journalctl -u firewalld
),或通過firewall-cmd --get-log-denied=full
開啟詳細拒絕日志。nmap -p 80,443 <服務器IP>
驗證端口是否開放);測試SELinux策略(如使用sealert -a /var/log/audit/audit.log
查看SELinux警報詳情,確認無未處理的拒絕事件)。