定位 :网络基础与协议安全篇 · 理解 NAT 才能看懂「内网为何能上网」与「服务为何被意外暴露」
合规声明 :本文实验均在自有隔离虚拟机 完成;不得将端口映射、隧道工具用于未授权内网暴露或规避单位网络安全策略。
一、NAT 不是防火墙,但深刻影响安全
多数家庭与办公网络使用 私有地址 (10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),访问互联网需经 网络地址转换(NAT)。
text
内网主机 192.168.1.100:54321 → 路由器 NAT → 公网 203.0.113.5:60001 → 目标服务器
常见误解:
| 误解 | 事实 |
|---|---|
| NAT = 安全防火墙 | NAT 主要解决地址短缺;隐藏内网是副作用,不能替代 ACL |
| 有 NAT 就不会被攻击 | 出站恶意软件、钓鱼、供应链照样成立 |
| 端口映射「开小缝」无害 | 一条 DNAT 可能让全网扫描直达内网脆弱服务 |
本文讲清 SNAT/DNAT 、打洞原理 、内网暴露风险 与 蓝队防护 ,并在靶场用 iptables 复现基础 NAT。
二、NAT 类型速览
2.1 源 NAT(SNAT / MASQUERADE)
text
内网多台主机共享一个公网 IP 出网
源地址替换为路由器公网地址,源端口重新分配(NAPT/PAT)
场景:家庭宽带、公司出口网关。
bash
# Linux 典型(实验用)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
2.2 目的 NAT(DNAT / 端口转发)
text
公网 IP:端口 → 映射到 内网 IP:端口
外部访问 203.0.113.5:443 实际到 192.168.1.10:8443
场景 :发布内网 Web、游戏主机、也是最常见的误暴露入口。
bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:8443
2.3 对照表
| 类型 | 改什么 | 谁发起连接 | 安全关注点 |
|---|---|---|---|
| SNAT | 源 IP/端口 | 内网→外网 | 出站审计、恶意 C2 |
| DNAT | 目的 IP/端口 | 外网→内网 | 暴露面、扫描、爆破 |
| 双向 NAT | 两边都改 | 复杂拓扑 | 日志难追踪 |
三、NAT 动画:一次出站与一次入站
3.1 出站(SNAT)
text
[192.168.1.100:50000] ──► 路由器 NAT 表记录 ──► [203.0.113.5:60001] ──► 8.8.8.8:53
60001 ↔ 50000
回程包按表还原到 192.168.1.100:50000
3.2 入站(DNAT)
text
互联网客户端 ──► 203.0.113.5:8080
↓ DNAT
192.168.1.20:80(内网 Web,可能无认证)
安全结论 :DNAT 等于在公网与内网之间凿洞;每多一条映射,攻击面 +1。
四、「打洞」是什么?(原理科普)
4.1 为何需要打洞?
两端都在 NAT 后面时,无法直接 TCP 握手------双方看到的都是公网地址,会话状态不一致。
text
用户 A(NAT-A 后) ←?→ 用户 B(NAT-B 后)
双方只能先主动连公网服务器
打洞(Hole Punching) :在协调服务器(STUN/信令)帮助下,双方几乎同时 向对方公网映射地址发包,使 NAT 设备建立允许回程的会话表项,从而建立 P2P 直连。
4.2 相关术语
| 术语 | 作用 |
|---|---|
| STUN | 获知本机在 NAT 后的公网地址:端口 |
| TURN | P2P 失败时经中继转发(更耗带宽) |
| ICE | WebRTC 等使用的候选路径收集与择优 |
| 信令服务器 | 交换 SDP/候选地址(须自身安全) |
4.3 合法 vs 高风险用途
| 合法场景 | 高风险滥用 |
|---|---|
| 视频会议 WebRTC | 未授权 P2P 隧道传数据 |
| 授权 VoIP / 游戏 | 绕过企业出口审计 |
| 经审批的远程协助 | 木马利用 UPnP 自动打洞 |
蓝队视角 :打洞本身是中立技术;风险在于 绕过集中审计 与 未知 P2P 连接。
五、内网暴露:三类常见路径
5.1 路由器端口映射 / UPnP
text
家用路由器:虚拟服务器、DMZ 主机
UPnP IGD:应用可自动添加 DNAT 规则(风险极高)
案例:挖矿木马、勒索软件请求 UPnP 映射 RDP 3389 到公网。
加固:
text
□ 关闭 UPnP(除非明确需要且懂风险)
□ 禁用 DMZ「整机暴露」
□ 端口映射最小化,非业务必关
5.2 反向隧道工具(frp、ngrok、花生壳等)
text
内网主动连公网中继服务器
公网用户访问中继域名 → 流量被转发到内网服务
| 风险 | 说明 |
|---|---|
| 绕过防火墙 | 从内网出站建立,传统「仅拦入站」策略失效 |
| 弱口令/token 泄露 | 整个内网服务暴露 |
| 无审计 | 个人私自搭建,安全部门不可见 |
企业政策 :原则上 禁止私自部署 ;确需调试须 工单审批、限时 token、强认证、日志对接 SIEM。
5.3 SSH 远程转发(-R)
专栏前篇提过:
bash
ssh -R 公网端口:内网主机:内网端口 user@公网跳板
跳板机上监听端口对外服务 = 内网映射到公网。临时调试后必须关闭。
六、CGNAT 与双重 NAT
运营商 运营商级 NAT(CGNAT) 下,家庭路由器后再经一层 NAT:
text
内网设备 → 家用路由 NAT → 运营商 CGNAT → 互联网
影响:
text
· 家用公网 IP 变为共享,入站 DNAT 更难
· 打洞成功率与行为更复杂
· 溯源需运营商配合
安全 :更不应依赖「我家有公网 IP」做长期服务暴露;应用应走 合规托管或企业网关。
七、实验环境(纯虚拟化)
text
「公网侧」模拟 192.168.56.0/24
NAT 网关 Ubuntu 192.168.56.1(eth1)+ 10.10.10.1(eth0)
内网服务器 10.10.10.100:80(nginx 默认页)
内网客户端 10.10.10.50
公网侧客户端 192.168.56.10
Host-Only:56 网段模拟 Internet,10 网段模拟内网
禁止将实验端口映射到物理机公网。
八、实战一:SNAT 让内网上网
网关(56.1 + 10.10.10.1):
bash
sudo sysctl -w net.ipv4.ip_forward=1
# 内网出网 SNAT
sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
内网客户端 10.10.10.50:
bash
ip route add default via 10.10.10.1
ping 192.168.56.10 # 应通
网关查看 NAT 表:
bash
sudo conntrack -L | grep 10.10.10.50
九、实战二:DNAT 端口映射与风险演示
在网关添加 DNAT(模拟家用「虚拟服务器」):
bash
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.100:80
sudo iptables -A FORWARD -p tcp -d 10.10.10.100 --dport 80 -j ACCEPT
公网侧 192.168.56.10:
bash
curl http://192.168.56.1:8080
# 实际访问到内网 10.10.10.100 的 Web
安全讨论:
text
若 10.10.10.100 是未补丁的管理后台 → 全网可达
实验后务必:sudo iptables -t nat -F && sudo iptables -F
十、实战三:观察「打洞」失败与成功(概念)
在 不连接真实公网 STUN 的前提下,用对话理解:
text
1. 10.10.10.50 无法直接被 192.168.56.10 主动 TCP 连接(无 DNAT 时)
2. 添加 DNAT 后,56.10 可连入 ------ 这是「有公网入口」,不是 P2P 打洞
3. WebRTC 等打洞无需 DNAT,靠双方同时发包 ------ 企业防火墙应限制未知 UDP 高发行为
可用 tcpdump 在网关观察:
bash
sudo tcpdump -i any host 10.10.10.100 and port 80 -n
十一、蓝队:如何发现私自暴露
11.1 网络侧
text
□ 出口防火墙:异常长连接至 ngrok/frp 等域名或 IP(维护威胁情报列表)
□ NetFlow:内网主机对外固定 TLS 隧道流量
□ 定期外部扫描**公司备案 IP**,发现非预期开放端口
□ 禁用 UPnP、审计路由器配置备份
11.2 主机侧
text
□ 进程:frpc、ngrok、cloudflared、ssh -R
□ 计划任务与 systemd 用户服务
□ 监听 0.0.0.0 的未知端口
bash
ss -tlnp
ps aux | grep -E 'frp|ngrok|ssh'
11.3 制度侧
text
□ 开发调试走统一**堡垒机 + 审批临时映射**
□ 禁止生产数据库、ESXi、NAS 管理口任何形式的公网映射
□ 工单记录:谁、何时、映射何端口、何时回收
十二、合规替代方案
| 需求 | 不推荐 | 推荐 |
|---|---|---|
| 远程办公 | 私自 frp 到工位 PC | 企业加密隧道 / 零信任接入 |
| 临时给客户演示 | ngrok 免费隧道 | 审批过的企业演示环境 |
| 运维调试 | SSH -R 到个人 VPS | 堡垒机 + 会话录像 |
| 发布业务 | 家用路由 443 映射 | 云 WAF + 负载均衡 |
十三、NAT 与安全策略对照
| 安全目标 | NAT 是否足够 | 还应做什么 |
|---|---|---|
| 隐藏内网结构 | 部分 | 分段、防火墙、最小暴露 |
| 防扫描 | 不足 | 关闭多余映射、WAF、IPS |
| 审计 | 不足 | 代理日志、NetFlow、SIEM |
| 合规 | 不足 | 等保、数据出境评估 |
十四、完整实验清单(90 分钟)
text
□ 1. 搭建双网卡网关与内网 10.10.10.0/24
□ 2. 配置 MASQUERADE,内网客户端 ping 通 56.10
□ 3. conntrack 查看 NAT 会话
□ 4. 添加 DNAT 8080→内网 80,公网侧 curl 验证
□ 5. 讨论:若内网是 Redis 无密码会怎样
□ 6. 删除 DNAT/FORWARD 规则
□ 7. 主机侧演练:ss -tlnp 找监听服务
□ 8. 撰写「企业禁止私自隧道」短制度 5 条
□ 9. 恢复快照
十五、常见踩坑
| 问题 | 原因 | 解决 |
|---|---|---|
| 内网不通外网 | 未开 forward 或缺 MASQUERADE | sysctl + iptables |
| DNAT 不通 | 缺 FORWARD ACCEPT | 补 FORWARD 链 |
| 回程不通 | 缺 ESTABLISHED 规则 | 补反向 FORWARD |
| 规则重启丢失 | 未持久化 | iptables-save / nft 持久化 |
| 误以为 NAT 防 DDoS | 概念混淆 | 靠上游清洗与限速 |
十六、法律与伦理
text
✅ 学习 NAT 原理、企业网关配置、安全审计
❌ 私自将内网 RDP/数据库映射到公网
❌ 利用隧道隐匿攻击、传播非法信息
❌ 利用 UPnP 在他人网络私自开口
《网络安全法》要求采取监测、记录网络运行状态、网络安全事件的技术措施;私自内网暴露往往构成重大隐患与违规。
十七、本篇小结
text
┌─────────────────────────────────────────────────────────────┐
│ NAT 与安全 核心记忆 │
├─────────────────────────────────────────────────────────────┤
│ SNAT:内网出网;DNAT:外网访问内网 = 暴露面 │
│ NAT ≠ 防火墙,不能替代 ACL 与审计 │
│ 打洞:NAT 后 P2P 协调技术,企业须防未知 UDP/绕过审计 │
│ 高危:UPnP、私自 frp/ngrok、SSH -R 长期开放 │
│ 替代:堡垒机、审批隧道、企业网关与云 WAF │
└─────────────────────────────────────────────────────────────┘
下一篇预告:《VLAN 与安全隔离:从配置错误到 VLAN Hopping 攻击》------从三层 NAT 回到二层隔离。
附录 A:iptables NAT 命令速查(实验)
bash
# SNAT/MASQUERADE
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
# DNAT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.100:80
# 清理
iptables -t nat -F
iptables -F
附录 B:家用路由器安全检查
text
□ 关闭 UPnP
□ 关闭 DMZ
□ 检查端口映射列表是否业务必需
□ 管理口改强密码,禁用 WAN 侧管理
□ 固件升级
附录 C:与专栏前篇关联
| 前篇 | 关联 |
|---|---|
| 代理与隧道 | SSH -R、反向隧道与 DNAT 类似「凿洞」 |
| 加密隧道 | 合规远程接入,替代私自映射 |
| TCP/IP | conntrack 与五元组 |