防火墙配置与外网访问

文章目录

Windows防火墙基础

防火墙工作原理

**防火墙(Firewall)**是计算机网络安全的第一道防线,用于监控和控制网络流量。

工作流程

复制代码
网络流量
    ↓
防火墙规则检查
    ↓
┌─────────────┬─────────────┬─────────────┐
│   允许      │   阻止       │   静默丢弃   │
│  (Allow)    │  (Block)    │ (Drop)      │
└─────────────┴─────────────┴─────────────┘

三种动作

  • 允许(Allow):放行流量
  • 阻止(Block):拒绝并返回 RST
  • 静默丢弃(Drop):不响应,扫描器显示 Filtered

防火墙配置文件

Windows 防火墙有三种配置文件:

配置文件 适用场景 安全级别
域(Domain) 连接到公司域网络 中等
专用(Private) 家庭或可信网络 中等
公用(Public) 咖啡厅、机场等 最高

查看当前配置文件

powershell 复制代码
Get-NetFirewallProfile | Format-Table Name, Enabled

入站规则 vs 出站规则

规则类型 作用 默认策略
入站规则 控制进入电脑的流量 默认阻止
出站规则 控制离开电脑的流量 默认允许

为什么默认阻止入站?

  • 防止外部攻击者访问内部服务
  • 防止恶意软件开放后门
  • 最小权限原则

防火墙规则组成要素

powershell 复制代码
New-NetFirewallRule `
    -DisplayName "规则名称" `
    -Direction Inbound `
    -Action Allow `
    -Protocol TCP `
    -LocalPort 80 `
    -RemoteAddress 192.168.0.0/24 `
    -Profile Private `
    -Enabled True

关键参数

  • DisplayName:规则显示名称
  • Direction:Inbound(入站)/ Outbound(出站)
  • Action:Allow(允许)/ Block(阻止)
  • Protocol:TCP / UDP / ICMP
  • LocalPort:本地端口
  • RemoteAddress:远程 IP(可选)
  • Profile:应用的网络配置文件
  • Enabled:是否启用

防火墙配置实战

场景 1:允许特定端口

需求:允许 Web 服务器(端口 80)

powershell 复制代码
# 允许 80 端口入站
New-NetFirewallRule -DisplayName "Web Server" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80

# 同时允许 HTTP 和 HTTPS
New-NetFirewallRule -DisplayName "Web Services" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80,443

场景 2:限制来源 IP

需求:只允许特定 IP 访问 RDP

powershell 复制代码
# 仅允许 192.168.0.101 访问 3389
New-NetFirewallRule -DisplayName "RDP Limited" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.0.101

# 允许整个子网
New-NetFirewallRule -DisplayName "RDP Subnet" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.0.0/24

场景 3:阻止特定端口

需求:阻止 SMB 端口防止勒索病毒

powershell 复制代码
# 阻止 445 端口
New-NetFirewallRule -DisplayName "Block SMB" -Direction Inbound -Action Block -Protocol TCP -LocalPort 445

# 阻止多个端口
New-NetFirewallRule -DisplayName "Block Dangerous" -Direction Inbound -Action Block -Protocol TCP -LocalPort 135,139,445

场景 4:临时启用规则

需求:临时允许文件共享,用完即禁用

powershell 复制代码
# 启用规则
Enable-NetFirewallRule -DisplayName "文件和打印机共享 (SMB-In)"

# 使用完成后立即禁用
Disable-NetFirewallRule -DisplayName "文件和打印机共享 (SMB-In)"

场景 5:按程序放行

需求:只允许特定程序访问网络

powershell 复制代码
# 允许 Chrome 浏览器
New-NetFirewallRule -DisplayName "Chrome" -Direction Outbound -Action Allow -Program "C:\Program Files\Google\Chrome\Application\chrome.exe"

# 阻止可疑程序
New-NetFirewallRule -DisplayName "Block Malware" -Direction Outbound -Action Block -Program "C:\Users\Public\malware.exe"

查看和管理规则

powershell 复制代码
# 查看所有规则
Get-NetFirewallRule | Format-Table DisplayName, Enabled, Action, Direction

# 查看特定端口规则
Get-NetFirewallRule | Where-Object {$_.LocalPort -eq 3389} | Format-Table DisplayName, Enabled, Action

# 查看特定程序规则
Get-NetFirewallRule -Program "C:\path\to\program.exe" | Format-Table DisplayName, Enabled

# 删除规则
Remove-NetFirewallRule -DisplayName "规则名称"

# 导出规则
Export-NetFirewallRule -Path "C:\backup\firewall.xml"

# 导入规则
Import-NetFirewallRule -Path "C:\backup\firewall.xml"

NAT与端口转发

什么是 NAT?

NAT(Network Address Translation,网络地址转换)是将内网 IP 转换为公网 IP 的技术。

为什么需要 NAT?

  • IPv4 地址耗尽
  • 保护内网设备
  • 多个设备共享一个公网 IP

NAT 工作原理

复制代码
内网设备 (192.168.0.114:80)
    ↓
路由器 NAT 转换
    ↓
公网 IP (123.45.67.89:54321)
    ↓
互联网

NAT 转换表

内网地址 公网地址 说明
192.168.0.114:80 123.45.67.89:54321 Web 服务
192.168.0.101:443 123.45.67.89:54322 HTTPS 服务

为什么外网扫描不到内网端口?

问题描述

  • 电脑开放了 80 端口
  • 路由器公网 IP 是 123.45.67.89
  • 外网扫描 123.45.67.89:80Filtered

原因

复制代码
互联网扫描器 → 路由器公网 IP:80
                    ↓
                NAT转换表
                    ↓
            没有80端口的转发规则
                    ↓
                丢弃数据包
                    ↓
          扫描器显示:Filtered

配置端口转发

需求:让外网可以访问内网 Web 服务器

步骤 1:登录路由器管理界面

  • 浏览器访问:http://192.168.0.1http://192.168.1.1
  • 输入管理员账号密码

步骤 2:找到端口转发设置

  • 常见名称:
    • 端口转发(Port Forwarding)
    • 虚拟服务器(Virtual Server)
    • NAT 设置
    • 高级路由

步骤 3:添加转发规则

字段 说明
服务名称 Web Server 自定义名称
外部端口 80 公网访问的端口
内部 IP 192.168.0.114 内网服务器 IP
内部端口 80 内网服务端口
协议 TCP 或 TCP/UDP
状态 启用 启用规则

步骤 4:配置 Windows 防火墙

powershell 复制代码
# 允许 80 端口入站
New-NetFirewallRule -DisplayName "Web Server" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80

步骤 5:验证配置

bash 复制代码
# 从外网扫描(使用手机 4G 网络)
nmap -p 80 123.45.67.89

# 应该显示 Open

DMZ 主机(不推荐)

**DMZ(Demilitarized Zone)**是将一台内网设备完全暴露到公网。

配置方法

  • 路由器设置 → DMZ 主机
  • 输入内网 IP:192.168.0.114
  • 启用 DMZ

警告

  • 所有端口都暴露
  • 没有任何保护
  • 极易被攻击
  • 仅用于测试环境

Web 反向代理与端口隐藏

反向代理的工作原理

Web 反向代理(如 Nginx、CDN 等)同样会导致你无法通过外网扫描直接探测到内网真实的后端端口。

反向代理不仅会"扫不到",而且它本身就是为了解决"如何安全地让外网访问内网服务"而设计的。它的存在相当于在你的内网服务器前加了一个极其智能的"前台接待员"。

复制代码
外网请求
    ↓
反向代理服务器(前台)
    ↓
内部转发
    ↓
内网真实服务(后台)

隐藏了真实的后端端口(端口隔离)

反向代理的核心工作机制是"代劳"。

对外表现

  • 反向代理服务器(前台)通常只对外开放最标准的 Web 端口
  • 80 (HTTP)443 (HTTPS)
  • 外网扫描器扫描你的域名或公网 IP 时,只能看到这两个端口是开放的

对内转发

  • 当反向代理收到外部的请求后,它会在内部(服务器本机或内网环境)将请求转发给真正的后端服务
  • 你的后端服务可能运行在 8080、3000、9001 等任意非标准端口上

结果

  • 外网扫描器根本接触不到你内网的 8080 或 3000 端口
  • 因为这些端口从未直接暴露给公网
  • 扫描结果会显示除 80/443 外的其他端口全部为 filtered (被过滤)或 closed(关闭)

后端服务绑定本地回环地址(127.0.0.1)

为了达到极致的安全,使用反向代理时,运维人员通常会配合一个关键操作:将后端应用程序只绑定在 127.0.0.1(本地回环地址)上

这意味着

  • 你的 Web 服务(比如一个 Python Flask 或 Node.js 应用)只监听来自服务器内部的请求
  • 即使有人奇迹般地绕过了防火墙,试图从外部直接攻击你的真实后端端口
  • 操作系统也会直接拒绝,因为该端口压根就没有绑定在对外网卡上

CDN 的层层掩护

如果你的反向代理前端还套了一层 CDN(内容分发网络,如 Cloudflare、阿里云 CDN 等),情况会更加彻底:

IP 隐藏

  • 外网扫描器扫描到的 IP 地址,实际上是 CDN 在全球各地的边缘节点 IP
  • 根本不是你的源站服务器 IP

流量清洗

  • CDN 节点会拦截所有非标准的 HTTP/HTTPS 请求
  • 如果你试图用 Nmap 去扫描 CDN IP 的其他端口(比如 SSH 的 22 端口或数据库的 3306 端口)
  • CDN 的防御机制会直接丢弃这些探测包,导致扫描结果全是 filtered

反向代理 vs 普通端口转发

特性 普通端口转发 Web 反向代理
端口暴露 外网能看到转发的端口 只暴露 80/443
后端可见性 外网可探测到内网端口 后端端口完全隐藏
安全性 中等
灵活性 一对一映射 可基于域名、路径转发
额外功能 SSL 终止、负载均衡、缓存

普通端口转发

  • 只是把外网的 80 端口映射到内网的 8080
  • 外网依然能探测到 80 端口有东西

反向代理

  • 外网只能看到反向代理(前台)开放的 80/443 端口
  • 至于内网真实的后端到底开了什么端口、跑在哪个 IP 上
  • 对外界来说是完全黑盒

总结

Web 反向代理 = 高级版的端口转发 + 端口隐藏

如果你配置了 Web 反向代理,外网扫描不到你的内网真实业务端口,这不仅是正常现象 ,更是反向代理发挥作用、保护你源站安全的最佳证明。

外网访问排查

三层关卡模型

复制代码
外网访问内网
    ↓
┌─────────────────────┐
│ 第一关:NAT          │ ← 路由器拦截
└─────────────────────┘
    ↓
┌─────────────────────┐
│ 第二关:防火墙        │ ← 电脑拦截
└─────────────────────┘
    ↓
┌─────────────────────┐
│ 第三关:运营商 NA    │ ← 无公网 IP
└─────────────────────┘

第一关:NAT(路由器拦截)

现象

  • 电脑 IP:192.168.0.114
  • 路由器公网 IP:123.45.67.89
  • 外网扫描 123.45.67.89:80Filtered

检查方法

  1. 登录路由器管理界面
  2. 查看端口转发规则
  3. 确认规则已启用

解决方法

  • 添加端口转发规则(见上文)
  • 确保规则指向正确的内网 IP
  • 检查路由器防火墙设置

第二关:Windows防火墙

现象

  • 路由器已配置端口转发
  • 外网扫描仍然 Filtered

检查方法

powershell 复制代码
# 查看防火墙规则
Get-NetFirewallRule | Where-Object {$_.LocalPort -eq 80} | Format-Table DisplayName, Enabled, Action

# 检查端口监听
netstat -ano | findstr :80

# 测试本地连接
Test-NetConnection -ComputerName localhost -Port 80

解决方法

  • 添加入站规则允许端口
  • 确保规则应用于正确的配置文件(公用/专用)
  • 检查是否有阻止规则优先级更高

第三关:运营商级NAT

现象

  • 端口转发已配置
  • Windows 防火墙已放行
  • 外网扫描仍然 FilteredClosed

原因:你没有真正的公网 IP

检查方法

bash 复制代码
# 1. 查看路由器 WAN 口 IP
# 登录路由器管理界面 → 查看 WAN 口状态
# 假设看到:100.64.1.234

# 2. 查询实际公网 IP
curl ifconfig.me
# 假设看到:123.45.67.89

# 3. 对比两个 IP
# 100.64.1.234 ≠ 123.45.67.89
# 说明你在运营商大内网中

常见内网 IP 段

IP 段 说明
100.64.0.0/10 运营商 NAT 专用
10.0.0.0/8 A 类私有地址
172.16.0.0/12 B 类私有地址
192.168.0.0/16 C 类私有地址

完整排查流程

复制代码
外网扫描不到端口
       ↓
1. 检查是否有公网 IP
   ├─ 路由器 WAN 口 IP = 公网 IP?→ 继续
   └─ 不一致 → 申请公网 IP或使用内网穿透
       ↓
2. 检查端口转发配置
   ├─ 路由器已配置转发 → 继续
   └─ 未配置 → 添加端口转发规则
       ↓
3. 检查 Windows 防火墙
   ├─ 已添加入站规则 → 继续
   └─ 未添加 → 创建允许规则
       ↓
4. 检查服务是否运行
   ├─ 端口有程序监听 → 成功
   └─ 无程序 → 启动服务

免责声明:本文档仅供学习和合法网络配置使用。未经授权访问他人网络可能违反法律法规。

相关推荐
梧六柒3 小时前
Upload-labs 搭建细节及其通关攻略
网络安全
treesforest19 小时前
IP地理位置精准查询:从城市级到街道级的定位技术深度解析
大数据·网络·网络协议·tcp/ip·安全·网络安全·ip
合兴软件@1 天前
合兴软件重磅推出高性能HSM固件 国密算法赋能汽车信息安全新防线
网络·算法·网络安全·汽车·信息与通信
其实防守也摸鱼1 天前
全新安装 SQL Server 并直接设置数据目录到 E 盘 完整步骤
数据库·sql·网络安全·sqlserver·教程·工具
探索宇宙真理.1 天前
Geeky Bot 授权缺失导致RCE | CVE-2026-5294复现&研究
经验分享·网络安全·安全漏洞·geeky bot
Bruce_Liuxiaowei1 天前
2026年5月第2周网络安全形势周报
人工智能·安全·网络安全·系统安全
小冷爱学习!1 天前
Apache Shiro 1.2.4 反序列化漏洞Shiro-550(CVE-2016-4437)
服务器·网络·python·安全·网络安全·apache
世界尽头与你1 天前
Ollama 内存泄漏漏洞(CVE-2026-7482)
安全·网络安全·渗透测试
m0_738120722 天前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全