当前位置: 首页 > news >正文

防火墙配置与外网访问

文章目录

    • Windows防火墙基础
      • 防火墙工作原理
      • 防火墙配置文件
      • 入站规则 vs 出站规则
      • 防火墙规则组成要素
    • 防火墙配置实战
      • 场景 1:允许特定端口
      • 场景 2:限制来源 IP
      • 场景 3:阻止特定端口
      • 场景 4:临时启用规则
      • 场景 5:按程序放行
      • 查看和管理规则
    • NAT与端口转发
      • 什么是 NAT?
      • NAT 工作原理
      • 为什么外网扫描不到内网端口?
      • 配置端口转发
      • DMZ 主机(不推荐)
    • Web 反向代理与端口隐藏
      • 反向代理的工作原理
      • 隐藏了真实的后端端口(端口隔离)
      • 后端服务绑定本地回环地址(127.0.0.1)
      • CDN 的层层掩护
      • 反向代理 vs 普通端口转发
      • 总结
    • 外网访问排查
      • 三层关卡模型
      • 第一关:NAT(路由器拦截)
      • 第二关:Windows防火墙
      • 第三关:运营商级NAT
      • 完整排查流程

Windows防火墙基础

防火墙工作原理

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

工作流程

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

三种动作

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

防火墙配置文件

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

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

查看当前配置文件

Get-NetFirewallProfile|Format-TableName,Enabled

入站规则 vs 出站规则

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

为什么默认阻止入站?

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

防火墙规则组成要素

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)

# 允许 80 端口入站New-NetFirewallRule-DisplayName"Web Server"-Direction Inbound-Action Allow-Protocol TCP-LocalPort 80# 同时允许 HTTP 和 HTTPSNew-NetFirewallRule-DisplayName"Web Services"-Direction Inbound-Action Allow-Protocol TCP-LocalPort 80,443

场景 2:限制来源 IP

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

# 仅允许 192.168.0.101 访问 3389New-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 端口防止勒索病毒

# 阻止 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:临时启用规则

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

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

场景 5:按程序放行

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

# 允许 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"

查看和管理规则

# 查看所有规则Get-NetFirewallRule|Format-TableDisplayName,Enabled,Action,Direction# 查看特定端口规则Get-NetFirewallRule|Where-Object{$_.LocalPort-eq3389}|Format-TableDisplayName,Enabled,Action# 查看特定程序规则Get-NetFirewallRule-Program"C:\path\to\program.exe"|Format-TableDisplayName,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:80123.45.67.89:54321Web 服务
192.168.0.101:443123.45.67.89:54322HTTPS 服务

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

问题描述

  • 电脑开放了 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公网访问的端口
内部 IP192.168.0.114内网服务器 IP
内部端口80内网服务端口
协议TCP或 TCP/UDP
状态启用启用规则

步骤 4:配置 Windows 防火墙

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

步骤 5:验证配置

# 从外网扫描(使用手机 4G 网络)nmap-p80123.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

检查方法

# 查看防火墙规则Get-NetFirewallRule|Where-Object{$_.LocalPort-eq80}|Format-TableDisplayName,Enabled,Action# 检查端口监听netstat-ano|findstr :80# 测试本地连接Test-NetConnection-ComputerName localhost-Port 80

解决方法

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

第三关:运营商级NAT

现象

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

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

检查方法

# 1. 查看路由器 WAN 口 IP# 登录路由器管理界面 → 查看 WAN 口状态# 假设看到:100.64.1.234# 2. 查询实际公网 IPcurlifconfig.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/8A 类私有地址
172.16.0.0/12B 类私有地址
192.168.0.0/16C 类私有地址

完整排查流程

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

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

http://www.zskr.cn/news/1425174.html

相关文章:

  • QTableView 简单使用(笔记)
  • 别再为投稿PDF乱码发愁了!Pattern Recognition Letters投稿文件类型选择全解析
  • 从《原神》血条到VR菜单:拆解Unity Canvas三种渲染模式在真实项目里的应用
  • 别再硬编码了!SAP MB51报表增强的优雅解法:利用隐式增强与自定义表动态扩展ALV
  • 从‘感觉’到‘算法’:智能家居中的模糊控制实战(以空调温控为例)
  • Unity 2020.3 实战:从零到一打造你的第一个记忆翻牌游戏(附完整源码)
  • Jetson Orin Nano 修复 JetPack MISSING 与 OpenCV CUDA
  • UE5 GAS实战:手把手教你为RPG角色创建生命值与法力值AttributeSet(含网络同步与预测配置)
  • 防锈后生锈原因 工序间防锈 操作偏差 过程管控
  • TypeScript 编程中的模块系统:ESM 与 CommonJS 互操作
  • 别再死记硬背了!用“3-8译码器”和“数据选择器”的例子,彻底搞懂CPU地址总线和存储寻址
  • 178软文网:全流程软文营销推广服务对企业品牌运营的价值提升
  • 【文字三国志:第四篇】天命重构,后端 API 设计文档
  • 别再纠结驱动了!Java直连网络打印机(IP+端口9100)打印PDF保姆级教程
  • 游戏开发实战:用SAT算法搞定Unity/Unreal中复杂3D模型的碰撞检测(附C++/C#代码)
  • TVA 对 CV 的代际超越逻辑(10)
  • 手把手教你逆向拼多多H5/Temu的anti_content参数(附完整JavaScript代码)
  • 告别复杂参数!用Fooocus的‘Style’和‘Negative Prompt’快速生成高质量AI图片
  • UE5.1+ControlRig避坑实录:从创建控制器到驱动骨骼,新手最常遇到的3个报错及解决方法
  • 从依赖报错到完美汉化:在Ubuntu 20.04/22.04上安装配置Beyond Compare 4的完整避坑记录
  • 用Python+遗传算法搞定物流配送路线规划:一个外卖小哥的实战代码分享
  • 2026年4月加注装置品牌找哪家,移动式加油站/LNG撬装加气装置/撬装加油装置/船舶甲醇燃料加注站,加注装置厂家选哪家 - 品牌推荐师
  • 用STM32CubeMx和DMA搞定WS2812B灯带:从单灯测试到彩虹流水灯实战(附完整代码)
  • 告别蓝屏!手把手教你给NVMe固态硬盘装Win7(附驱动整合U盘制作)
  • 从FPU到SSE:x86汇编浮点计算演进与性能调优浅谈
  • 告别护眼APP:手把手教你为Android系统(AOSP 11)添加原生全局色温调节功能
  • 从Demo到集成:手把手教你用Vue项目测试OnlyOffice 7.4破解后的协作编辑功能
  • ESP32-C3安全启动与Flash加密实战:绕过自动重启,一步到位配置Secure Boot V2
  • ESP32-C3的Secure Boot与Flash加密避坑指南:从menuconfig配置到efuse烧录的完整排错记录
  • 华为海思HI3798MV310芯片盒子刷机避坑指南:TTL接线、HiTool设置与固件选择