服务器防火墙生产环境如何用

作者:袖梨 2026-08-14

生产环境防火墙核心是“管得清、控得住、出得去、查得明”,关键在区域分层、服务封装、永久生效、日志可溯四点:按网卡角色划分区域,服务优先于端口开放,所有变更须永久+重载+留痕,并与Fail2Ban、连接跟踪、SIEM联动。

生产环境用防火墙,核心不是“堵得严”,而是“管得清、控得住、出得去、查得明”。firewalld 是主流选择,关键在区域分层、服务封装、永久生效、日志可溯这四点。

按网络角色划分区域,不混用

不同网卡对应不同信任等级,不能全塞进 public:

  1. 对外服务网卡(如 eth0)设为 public 区域:只开必要端口(80/443/2222),禁用 DNS、SNMP 等非业务服务
  2. 内网管理网卡(如 eth1)设为 internaltrusted:允许 SSH、Ansible 端口、监控探针(如 9100)、配置同步端口
  3. 数据库专用网卡(如 eth2)绑定 internal 区域,并用富规则限制仅允许应用服务器 IP 访问 3306/5432
  4. DMZ 区 Web 服务器的外网接口用 dmz 区域,内网接口用 internal,禁止跨区直连

服务管理优先于端口开放

别直接开 8080/tcp,先确认是否已有对应服务定义:

  1. 查系统内置服务:firewall-cmd --get-services | grep -E 'http|https|redis|mongodb'
  2. 开标准服务(永久生效):firewall-cmd --zone=public --add-service=https --permanent
  3. 自定义服务(如 Node.js 后端):写 /etc/firewalld/services/api.xml,定义端口+协议+描述,再 reload
  4. 临时调试端口?用运行时命令(不加 --permanent),操作完立刻删掉,避免遗忘

所有变更必须永久+重载,且留痕

生产环境严禁只用运行时命令,否则重启即失效:

  1. 每条 --add-* 命令都必须带 --permanent
  2. 执行完批量操作后,统一执行 firewall-cmd --reload
  3. 把每次修改记录到配置管理工具(Ansible Playbook / Salt State)或运维日志中,包含时间、操作人、原因
  4. 定期校验:firewall-cmd --list-all-zones 对比预期,用 diff 检查 /etc/firewalld/zones/ 下文件变更

配合监控与防御闭环

防火墙不是孤岛,要和 Fail2Ban、conntrack、审计日志联动:

  1. 给 SSH 改非标端口(如 2222),并启用 Fail2Ban,bantime = 86400 防暴力破解
  2. 开启连接跟踪日志:firewall-cmd --set-log-denied=all,日志落进 /var/log/messages,供 SIEM 分析
  3. 限制并发连接数(用 rich rule):--add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" limit value="5/m" accept'
  4. 定期导出当前规则:firewall-cmd --list-all-zones > /backup/firewall-$(date +%F).log

相关文章

精彩推荐