Debian 上实现防火墙与 SELinux 的协同防护
一 前提与选型
- Debian 默认不启用 SELinux,常见做法是使用 UFW 管理防火墙;而 SELinux 常见于 RHEL/CentOS/Fedora。在 Debian 上若要使用 SELinux,需要额外安装与启用相关组件。防火墙与 SELinux 分别工作在网络层与主机层,属于纵深防御,建议同时启用并正确配置两者的放行策略,避免“只开防火墙却因 SELinux 拒绝导致服务不可用”。
二 启用 SELinux 的正确步骤
- 安装与启用组件(Debian 12 示例)
- 安装策略与工具:sudo apt-get update && sudo apt-get install -y selinux-basics selinux-policy-default auditd
- 启用 SELinux:sudo selinux-activate
- 重启:sudo reboot
- 检查状态:getenforce(返回 Enforcing/Permissive/Disabled),sestatus(查看详细模式与策略)
- 基本运维
- 临时切换:sudo setenforce 0(Permissive)/ 1(Enforcing)
- 永久生效:编辑 /etc/selinux/config 的 SELINUX= 项(enforcing/permissive/disabled),重启后生效
- 提示
- 初次启用会触发系统 relabel,耗时与磁盘 IO 相关;生产变更建议在维护窗口进行,并提前备份关键数据与配置。
三 防火墙选择与配置要点
- 工具选型与差异
- UFW:Debian 常用、上手快,适合中小规模与常规服务器场景
- nftables:内核原生新一代框架,规则表达更简洁、性能与可维护性更优,适合规则复杂或规模较大的环境
- firewalld:RHEL/CentOS 默认;在 Debian 可用,但生态与默认集成度不如前两者
- UFW 快速示例(放行 SSH 与 Web)
- 启用:sudo ufw enable
- 放行端口/服务:sudo ufw allow 22/tcp;sudo ufw allow 80,443/tcp
- 状态与规则:sudo ufw status numbered
- nftables 快速示例(最小“白名单”骨架)
- 规则思路:放行 lo、已建立/相关连接,按需放行 SSH(22),其余默认丢弃;按需扩展端口/协议
- 建议以 systemd 服务管理 nftables,确保规则持久化与开机加载。
四 协同配置与排错清单
- 原则
- 防火墙负责“谁能进来”(源/目的/端口/协议),SELinux 负责“进程被允许做什么”(域/类型/权限)。两者缺一不可,且策略需同时匹配。
- 常见服务的最小配置范式
- SSH
- 防火墙:放行 22/TCP
- SELinux:保持默认 sshd 相关策略即可(Debian 启用 SELinux 后通常无需额外布尔)
- Web(Nginx/Apache)
- 防火墙:放行 80/443/TCP
- SELinux:如部署在非默认目录,使用 semanage fcontext 为目录设置 httpd_sys_content_t 等类型,并执行 restorecon;必要时开启相关布尔(如与代理/网络访问相关)
- FTP(vsftpd,主动模式)
- 防火墙:放行 20/TCP、21/TCP 与被动端口段(示例:21100–21110/TCP)
- SELinux:启用 ftp_home_dir、allow_ftpd_full_access 等布尔(setsebool -P),并确保数据/日志目录类型正确
- Samba(文件共享)
- 防火墙:放行 Samba 服务或 139/445/TCP
- SELinux:开启 samba_enable_home_dirs,为共享目录设置 samba_share_t 类型并 restorecon
- 排错路径
- SELinux 拒绝:ausearch -m avc -ts recent;或查看 /var/log/audit/audit.log;必要时用 setsebool 调整布尔、用 semanage fcontext/restorecon 修正类型
- 防火墙阻断:UFW 使用 sudo ufw status numbered;nftables 使用 sudo nft list ruleset;iptables 使用 sudo iptables -S/-L -n -v
- 服务自检:ss -lntp | grep <端口>;curl -Iv http://localhost;必要时临时 setenforce 0 验证是否为 SELinux 导致,再恢复为 Enforcing 并修正策略。
五 安全建议
- 避免使用 Telnet(明文传输),优先 SSH;如必须使用,务必限制来源 IP 并配合 SELinux 精细策略
- 变更流程:先在测试环境验证;变更前备份规则与关键配置;变更后及时验证与留痕(版本化规则与审计日志)
- 合规与加固:结合最小权限原则配置防火墙与 SELinux;定期审计 AVC 拒绝日志与规则有效性,形成闭环。