温馨提示×

CentOS防火墙与SELinux如何协同工作

小樊
36
2025-12-29 04:54:19
栏目: 智能运维

CentOS 防火墙与 SELinux 的协同机制

一、核心概念与分工

  • 防火墙(firewalld/iptables):工作于网络层/传输层,依据源/目的IP、端口、协议进行允许或拒绝,决定“包能不能进/出主机”。
  • SELinux(Security-Enhanced Linux):工作于内核的强制访问控制(MAC)层,依据主体(进程/域)—客体(文件/套接字/端口等)—权限三元组进行细粒度控制,决定“进程被允许对资源做什么”。
  • 协同关系:二者是互补而非替代。即使防火墙放行了某个端口,若 SELinux 策略不允许对应进程绑定/访问该端口或资源,访问仍会被拒绝;反之亦然。实际生效需要网络放行 + 策略放行同时满足。

二、典型工作流程

  • 数据包到达网卡,按firewalld/iptables规则进行匹配与动作(ACCEPT/DROP/REJECT 等)。
  • 若被放行进入内核,涉及本地进程访问资源(如绑定端口、读写文件、访问套接字)时,SELinux依据策略进行第二道检查。
  • 任一环节拒绝,最终即被拒绝;只有两层都允许,访问才成功。

三、常见协同场景与配置要点

  • 放行 Web 服务(HTTP/HTTPS)
    1. 防火墙放行服务或端口:
      • 使用服务名:firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload
      • 使用端口:firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp && firewall-cmd --reload
    2. SELinux 允许进程使用对应端口类型:
      • 确认/添加端口类型:semanage port -a -t http_port_t -p tcp 8080(示例将 8080 加入 http_port_t)
      • 如为自定义服务,必要时调整进程的 SELinux 域或策略模块。
    3. 文件与目录上下文(如网站根目录):
      • chcon -R -t httpd_sys_content_t /var/www/html(示例将目录标记为 httpd 可读内容)
  • 变更建议:优先使用firewalld zones/服务/富规则进行编排,减少直接操作底层链表的复杂度与风险。

四、联合排查与日志定位

  • 启用并观察防火墙拒绝日志:
    • firewall-cmd --permanent --set-log-denied=all && firewall-cmd --reload
    • journalctl -u firewalld -f(实时查看拒绝事件)
  • 检查 SELinux 拒绝事件:
    • 查看审计日志:ausearch -m avc -ts recenttail -f /var/log/audit/audit.log
    • 分析并生成策略建议:audit2whyaudit2allow(审慎评估后再应用)
  • 定位思路:
    • 网络层被拒 → 先看 firewalld 日志与规则;
    • 权限被拒 → 再看 SELinux AVC 日志与上下文/端口类型。

五、最佳实践与常见误区

  • 保持 SELinux 为 Enforcing,仅对确有需要的服务做最小放宽;用 getenforce/setenforce/etc/selinux/config 管理状态与策略类型。
  • 新增端口或协议时,优先用 semanage port 将端口与正确类型关联(如 http_port_t),避免被 SELinux 拒绝。
  • fail2ban 联动时,推荐使用 firewallcmd-ipsetfirewallcmd-rich-rules 动作,实现高效封禁与与 SELinux 的并行防护。
  • 变更前备份规则,变更后在测试环境验证;对关键业务遵循最小暴露面原则

0