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警报详情,确认无未处理的拒绝事件)。