linux防火墙是web服务安全策略的第一道执行者,需按场景分层管控:dmz区仅开放http/https并禁ping,trusted区内网允许ssh等管理服务,external区仅放行必要入口;应使用service抽象而非硬编码端口,配合rich rule实现ip限速、黑名单等细粒度控制,并与web服务自身加固协同。

Linux 防火墙不是 Web 服务的“旁观者”,而是其安全策略的第一道执行者。正确联动二者,能精准控制访问来源、阻断异常流量、降低攻击面,同时不影响合法业务。关键不在于开几个端口,而在于按场景分层管控——比如内网可管理 SSH,外网只许 HTTP/HTTPS,且禁止 ICMP 探测。
明确区域划分,隔离不同网络角色
firewalld 的 zone(区域)机制是联动 Web 服务的基础。不要把所有网卡塞进 public 区域,应按实际拓扑分配:
- dmz:专用于对外提供 Web 服务的服务器(如 Nginx/Apache),只开放 http 和 https 服务,禁用 echo-request(即禁 ping);
- trusted:内网管理网段(如 192.168.100.0/24),允许 ssh、http、https,甚至自定义端口(如 12345/tcp);
- external:外网接口,仅放行必要入口(如 443/tcp),默认拒绝所有入向连接;
- 确保网卡绑定正确:
firewall-cmd --change-interface=ens33 --zone=trusted,避免规则错配。
服务级配置优先于端口硬编码
用 service 抽象代替直接写端口号,既清晰又便于维护:
- 添加 Web 服务:
firewall-cmd --permanent --add-service=http和--add-service=https; - 若需自定义 Web 端口(如 8080),先复制标准服务模板:
cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/myweb.xml,修改端口后重载:firewall-cmd --reload; - 禁用默认 ssh 服务(端口 22),改用非标端口管理:
firewall-cmd --remove-service=ssh,再开放--add-port=12345/tcp; - 所有变更务必加
--permanent,再执行firewall-cmd --reload生效。
细粒度控制:富规则补足服务级盲区
当需要更精确的访问控制(如限制某 IP 段访问后台、阻止高频请求),用 rich rule:
- 仅允许特定子网访问管理端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.50.0/24" port port="12345" protocol="tcp" accept'; - 限制单 IP 每分钟最多 10 次 HTTP 请求(防爬虫/爆破):
firewall-cmd --permanent --add-rich-rule='rule service name="http" limit value="10/m" accept'; - 拒绝已知恶意 IP:
firewall-cmd --permanent --add-rich-rule='rule source address="203.0.113.42" reject'; - 富规则支持日志记录:
log prefix="blocked-http-attack" level="info",便于后续分析。
Web 服务与防火墙协同加固要点
防火墙只是纵深防御的一环,需与 Web 服务本身配合:
- Web 服务器(Nginx/Apache)关闭目录浏览、隐藏版本号、限制上传路径,避免防火墙放行后仍暴露弱点;
- 启用 HTTPS 后,在防火墙中只放行 443,主动屏蔽 80 端口重定向以外的 80 流量,防止降级攻击;
- 若使用反向代理或 CDN,防火墙应信任真实客户端 IP(通过 X-Forwarded-For 或 PROXY 协议),否则富规则可能误判;
- 定期导出规则备份:
firewall-cmd --list-all > /root/firewall-backup-$(date +%F).txt,避免误操作失联。











