
企业在构建跨地域的云基础设施时,网络安全与服务可用性往往是部署初期最容易被忽视却又至关重要的两个维度。在海外如香港等网络节点的实地部署中,系统默认安全策略与本地化运维习惯之间的差异,极易引发隐蔽的故障。本文将围绕一次典型的实战案例——香港机房部署初期由于防火墙默认策略设置不当导致的服务异常,详细记录问题的产生、定位与解决全过程。通过还原现场、分析技术细节、分享排查思路,帮助读者在未来的机房部署中提前预判、精准避坑,提高系统上线的稳定性与效率。
公司业务全球化战略的推进,我们在香港租用了一批物理服务器,计划部署边缘计算节点并承载部分API流量,以优化亚洲区域的访问性能。初期部署采用如下架构:
香港服务器硬件平台:Supermicro 2U 服务器,配置如下:
- CPU:Intel Xeon Silver 4310 × 2
- 内存:256GB DDR4 ECC
- 硬盘:NVMe SSD 2TB × 2(RAID1)
- 网卡:Intel X710-DA2 10G SFP+ × 2
- 系统环境:CentOS 8 Stream
- 虚拟化平台:KVM(使用 libvirt 管理)
- 网络结构:单臂VLAN架构,通过交换机划分多个业务网段
- 防火墙方案:基于 firewalld 配合 nftables 管理
一、故障表现与初步排查
部署完成后,在进行压力测试时发现以下问题:
- 内部虚拟机(VM)间通信正常,但对外提供服务(如HTTPS API、SSH管理口)连接频繁超时;
- ICMP Ping 丢包率达到 30% 左右;
- curl 测试部分 HTTPS 服务时提示 Connection reset by peer。
初步怀疑网络链路不稳定或ISP限制,于是进行了以下测试:
- 使用 iperf3 测试上下行带宽,无明显瓶颈;
- 交换机及上联链路未丢包;
- 关闭服务主机防火墙后,服务恢复正常。
结论:初步判断问题源于防火墙配置。
二、防火墙配置分析与问题定位
1. 默认策略误区
CentOS 8 默认启用了 firewalld,其背后使用 nftables 管理规则。默认 zone 为 public,而该 zone 的默认入站策略是:
firewall-cmd --get-default-zone
# 输出:public
firewall-cmd --zone=public --list-all
# 输出:
# target: default
# interfaces:
# services: ssh dhcpv6-client
# ports:
# masquerade: no
# forward-ports:
# icmp-blocks:
# rich rules:
可以看出,只有 SSH 和 DHCPv6 被允许,其余所有入站端口均被拒绝,包括常用的 80、443、8080 等端口。
2. 检查具体规则
通过 nft list ruleset 查看规则,发现类似如下条目:
table inet firewalld {
chain input {
type filter hook input priority 0; policy drop;
...
ip protocol icmp accept
tcp dport 22 accept
counter drop
}
}
规则逻辑非常清晰:除了明确放行的端口,其余一律丢弃。也就是说,所有未显式允许的服务即使正常监听,也会被默认拒绝。
三、解决方案与实践建议
1. 修正方式一:添加必要服务端口
最直接的方式是手动放行需要开放的端口:
# 开放 HTTP 和 HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 或按端口添加
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
这种方式适用于少量端口开放,适合控制精细粒度访问。
2. 修正方式二:创建专属 zone
为了更清晰的管理网络区域,可以为不同接口或子网定义独立 zone:
# 创建名为 internal 的新 zone
firewall-cmd --permanent --new-zone=internal
# 允许所有流量
firewall-cmd --permanent --zone=internal --set-target=ACCEPT
# 指定接口归属 internal zone
firewall-cmd --permanent --zone=internal --add-interface=br0
firewall-cmd --reload
这种方式适合内部网段无需访问控制的场景。
3. 修正方式三:直接禁用 firewalld(不推荐)
虽然直接关闭防火墙也可解决问题,但从安全角度不推荐:
systemctl stop firewalld
systemctl disable firewalld
如有特殊安全需求,应使用更严密的 nftables 或 iptables 自定义规则,而不是完全关闭。
四、经验教训
本次香港机房部署的问题本质是忽略了操作系统防火墙的默认策略,尤其是在海外部署环境中,防火墙策略的默认阻断行为比国内更加严格。以下几点经验可供参考:
部署前务必审查防火墙默认策略,尤其是新版本的系统(如 RHEL8/CentOS8 引入 nftables);
- 使用 firewall-cmd 明确管理端口与服务规则,不依赖默认配置;
- 分区(zone)管理策略更清晰,有助于环境隔离与权限控制;
- 部署完成后应进行端到端链路测试(ICMP/TCP)确认服务可达性;
- 建议通过 Ansible 等自动化工具将防火墙规则纳入基础设施代码统一管理。
通过这次“踩坑”,我们深刻认识到系统默认行为与业务需求之间往往存在差距。只有具备完善的预检流程与系统认知,才能避免因配置细节导致的服务中断。











