Linux防火墙实现内网服务器安全隔离的核心是“默认拒绝、按需放行”,通过firewalld区域划分(如internal绑定内网网卡并仅放行3306端口)、iptables链式控制(INPUT/FORWARD链限制源IP与跨网段转发)及系统级加固(禁IP转发、服务绑定内网IP)协同构建分层防御。

Linux 通过防火墙策略实现内网服务器安全隔离,核心是“默认拒绝、按需放行”,结合区域划分、链式规则和网络拓扑控制流量走向。关键不在于开多少端口,而在于明确谁可以访问、从哪来、到哪去、走什么协议和端口。
明确隔离目标与网络角色
先理清内网服务器在整体架构中的定位:它是纯内网服务(如数据库、内部API),还是需要被有限外部访问(如管理后台)?常见角色包括:
- 内网服务器:仅允许特定内网IP(如192.168.10.0/24)访问,禁止任何外网直连
- 网关/跳板机:承担SNAT/DNAT、路由转发、访问代理职责,本身防火墙应严格限制入站
- DMZ区服务器(如Web前端):可对外暴露80/443,但禁止反向访问内网段
用 firewalld 设置区域化策略
firewalld 的 zone 机制天然适配隔离需求。以 CentOS/RHEL 为例:
- 将内网服务器的网卡(如 ens33)绑定到 internal 区域:
firewall-cmd --permanent --zone=internal --change-interface=ens33 - 设置 internal 区域为默认信任内网段:
firewall-cmd --permanent --zone=internal --add-source=192.168.10.0/24 - 关闭该区域所有默认服务(如ssh、http),只手动添加必要端口:
firewall-cmd --permanent --zone=internal --remove-service=ssh,再按需加:firewall-cmd --permanent --zone=internal --add-port=3306/tcp(仅开放MySQL) - 确保其他区域(如 public)对内网IP无放行规则,避免规则冲突
用 iptables 强化链级控制
当需要更细粒度控制(如限制连接数、封禁IP段),直接操作 iptables 规则链:
- 在 INPUT 链中优先拒绝非信任源:
iptables -A INPUT -s ! 192.168.10.0/24 -p tcp --dport 3306 -j DROP - 在 FORWARD 链中阻止跨网段转发(除非是网关):
iptables -A FORWARD -i ens33 -o ens37 -j REJECT(ens33为内网口,ens37为外网口) - 启用状态跟踪,只允许已建立连接的响应返回:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT - 保存规则:
iptables-save > /etc/sysconfig/iptables(CentOS)或使用netfilter-persistent(Debian/Ubuntu)
配合系统级加固提升隔离效果
防火墙只是第一道门,需与系统配置协同:
- 关闭内网服务器的 IP 转发(除非它本身就是网关):
echo 0 > /proc/sys/net/ipv4/ip_forward,并写入/etc/sysctl.conf - 禁用不必要的网络服务监听(如 rpcbind、avahi):
systemctl disable --now rpcbind avahi-daemon - 绑定服务到内网IP而非 0.0.0.0:
bind-address = 192.168.10.100(MySQL 配置示例) - 用
hosts.deny和hosts.allow做第二层白名单(适用于 ssh、vsftpd 等支持 TCP Wrappers 的服务)


















