The interface is localized. Skill descriptions and documents are machine-translated by AI into your language; code, commands, paths and technical terms stay in the original, and the author's document governs.
Explore skills
Productivity · SKILL.md

configuring-pfsense-firewall-rules

configuring-pfsense-firewall-rules

配置 pfSense 防火墙规则、NAT 策略、VPN 隧道和流量整形,以强制实施网络分段(network segmentation)、 控制流量,并保护企业及中小型企业环境中的内部网络区域。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill documentation

GitHub

name: configuring-pfsense-firewall-rules description: > 配置 pfSense 防火墙规则、NAT 策略、VPN 隧道和流量整形,以强制实施网络分段(network segmentation)、 控制流量,并保护企业及中小型企业环境中的内部网络区域。 domain: cybersecurity subdomain: network-security tags: [network-security, pfsense, firewall, nat, network-segmentation] version: "1.0" author: mahipal license: Apache-2.0

配置 pfSense 防火墙规则

适用场景

  • 部署边界或内部防火墙(firewall)以分段和保护网络区域(DMZ、内部、访客、IoT)
  • 创建细粒度访问控制规则,限制 VLAN 和网络分段之间的流量
  • 配置 NAT 规则,将端口转发到暴露于互联网的内部服务
  • 使用 IPsec 或 OpenVPN 建立站点到站点或远程访问 VPN 隧道
  • 实施流量整形和带宽管理以满足服务质量(QoS)需求

不适用于:替代单个系统上的基于主机的防火墙、无专用硬件加速的 SSL/TLS 深度包检测,或作为不配合 IDS/IPS 的唯一安全控制。

前置条件

  • pfSense 2.7+ 安装在专用硬件或虚拟机上,至少有两个网络接口
  • 访问 pfSense WebConfigurator(默认:https://192.168.1.1)
  • 显示所有接口、VLAN 和期望流量流向的网络拓扑图
  • 为每个网络区域规划好 DNS 和 DHCP 配置
  • 了解 TCP/IP、NAT 和有状态防火墙概念

工作流程

步骤 1:配置网络接口和 VLAN

访问 pfSense WebConfigurator 并定义接口:

导航:Interfaces > Assignments

WAN 接口(igb0):
  - 类型:来自 ISP 的 DHCP 或静态 IP
  - 阻止私有网络:启用
  - 阻止 bogon 网络:启用

LAN 接口(igb1):
  - IPv4:10.10.1.1/24
  - 描述:CORPORATE_LAN

创建 VLAN:
  导航:Interfaces > VLANs > Add
  - igb1 上的 VLAN 10:DMZ(10.10.10.1/24)
  - igb1 上的 VLAN 20:SERVERS(10.10.20.1/24)
  - igb1 上的 VLAN 30:GUEST(10.10.30.1/24)
  - igb1 上的 VLAN 40:IOT(10.10.40.1/24)

分配 VLAN:
  导航:Interfaces > Assignments > 为每个 VLAN 添加
  启用每个接口并分配网关 IP

步骤 2:为每个区域配置 DHCP 和 DNS

导航:Services > DHCP Server

CORPORATE_LAN(10.10.1.0/24):
  范围:10.10.1.100 - 10.10.1.200
  DNS:10.10.20.10(内部 DNS 服务器)
  网关:10.10.1.1

DMZ(10.10.10.0/24):
  范围:10.10.10.100 - 10.10.10.200
  DNS:10.10.20.10
  网关:10.10.10.1

GUEST(10.10.30.0/24):
  范围:10.10.30.100 - 10.10.30.200
  DNS:1.1.1.1, 8.8.8.8(仅公共 DNS)
  网关:10.10.30.1

导航:Services > DNS Resolver
  在除 GUEST 外的所有接口上启用 DNS Resolver
  启用 DNSSEC
  配置向上游 DNS 服务器转发

步骤 3:创建防火墙规则别名

导航:Firewall > Aliases

RFC1918_Networks:
  类型:网络
  值:10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

WebPorts:
  类型:端口
  值:80, 443

ManagementPorts:
  类型:端口
  值:22, 3389, 5900

CriticalServers:
  类型:主机
  值:10.10.20.10, 10.10.20.11, 10.10.20.12

BlockedCountries:
  类型:URL 表
  URL: https://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone
  更新:每 24 小时

步骤 4:按区域实施防火墙规则

导航:Firewall > Rules

=== WAN 规则 ===
# 默认阻止所有入站(隐式拒绝)
# 允许已建立/相关流量(pfSense 有状态模式下自动处理)

# 允许入站到 DMZ Web 服务器(通过 NAT)
动作:Pass | 接口:WAN | 协议:TCP
来源:任意 | 目标:WAN 地址 | 端口:80, 443
描述:允许 HTTP/HTTPS 到 DMZ Web 服务器

=== LAN 规则 ===
# 允许 LAN 访问内部服务器
动作:Pass | 接口:LAN | 协议:TCP
来源:LAN net | 目标:SERVERS net | 端口:WebPorts, 3306, 5432
描述:允许 LAN 访问内部 Web 和数据库服务器

# 允许 LAN 访问互联网
动作:Pass | 接口:LAN | 协议:任意
来源:LAN net | 目标:! RFC1918_Networks
描述:允许 LAN 访问互联网(通过 RFC1918 排除阻止 VLAN 间流量)

# 阻止 LAN 到 IoT(在隐式允许前明确拒绝)
动作:Block | 接口:LAN | 协议:任意
来源:LAN net | 目标:IOT net
描述:阻止 LAN 到 IoT 的直接通信

=== DMZ 规则 ===
# 允许 DMZ Web 服务器查询内部 DNS
动作:Pass | 接口:DMZ | 协议:TCP/UDP
来源:DMZ net | 目标:10.10.20.10 | 端口:53
描述:允许 DMZ DNS 查询到内部解析器

# 仅允许 DMZ 访问互联网进行更新
动作:Pass | 接口:DMZ | 协议:TCP
来源:DMZ net | 目标:任意 | 端口:80, 443
描述:允许 DMZ 出站 HTTP/HTTPS 进行更新

# 阻止所有其他 DMZ 流量
动作:Block | 接口:DMZ | 协议:任意
来源:DMZ net | 目标:任意
描述:DMZ 默认拒绝

=== GUEST 规则 ===
# 仅允许访客访问互联网(DNS 和 Web)
动作:Pass | 接口:GUEST | 协议:TCP/UDP
来源:GUEST net | 目标:! RFC1918_Networks | 端口:53, 80, 443
描述:仅允许访客访问互联网

# 阻止所有访客到内部的流量
动作:Block | 接口:GUEST | 协议:任意
来源:GUEST net | 目标:RFC1918_Networks
描述:阻止访客访问所有内部网络

=== IOT 规则 ===
# 允许 IoT 访问特定云端点
动作:Pass | 接口:IOT | 协议:TCP
来源:IOT net | 目标:! RFC1918_Networks | 端口:443, 8883
描述:允许 IoT HTTPS 和 MQTT 到云端

# 阻止 IoT 设备间通信
动作:Block | 接口:IOT | 协议:任意
来源:IOT net | 目标:IOT net
描述:防止 IoT 横向移动

# 阻止 IoT 到所有内部网络
动作:Block | 接口:IOT | 协议:任意
来源:IOT net | 目标:RFC1918_Networks
描述:阻止 IoT 访问内部

步骤 5:配置 NAT 规则

导航:Firewall > NAT > Port Forward

# DMZ 中的 Web 服务器
接口:WAN | 协议:TCP
目标:WAN 地址 | 端口:443
重定向目标 IP:10.10.10.50 | 端口:443
NAT 反射:启用
描述:HTTPS 到 DMZ Web 服务器

# SSH 跳板机(非标准端口)
接口:WAN | 协议:TCP
目标:WAN 地址 | 端口:2222
重定向目标 IP:10.10.20.11 | 端口:22
描述:通过端口 2222 SSH 到内部跳板机

导航:Firewall > NAT > Outbound
模式:混合出站 NAT
# 添加规则使 DMZ 服务器使用专用公网 IP
接口:WAN | 来源:10.10.10.0/24
转换地址:<dedicated_public_ip>
描述:DMZ 通过专用 IP 出站 NAT

步骤 6:启用日志记录和监控

导航:Status > System Logs > Settings
  远程日志:启用
  远程日志服务器:10.10.20.15:514(Syslog/SIEM)
  记录防火墙默认阻止:启用

导航:Firewall > Rules
  在关键规则上启用日志记录:
  - 所有 BLOCK 规则
  - WAN 入站 PASS 规则
  - VLAN 间 PASS 规则

导航:Diagnostics > pfTop
  监控实时连接状态和带宽使用

安装 pfBlockerNG 包:
  导航:System > Package Manager > Available Packages
  安装 pfBlockerNG-devel
  配置 IP 黑名单(Spamhaus DROP、Emerging Threats)
  配置 DNSBL 进行恶意软件域名阻断

步骤 7:备份和测试配置

# 导出配置备份
导航:Diagnostics > Backup & Restore
下载 XML 配置文件

# 从每个区域测试规则
# 从 LAN:
curl -I https://10.10.20.10  # 应成功(LAN 到 SERVERS)
curl -I https://10.10.40.5   # 应失败(LAN 到 IOT 被阻止)

# 从 GUEST:
curl -I https://www.google.com  # 应成功(互联网访问)
curl -I https://10.10.20.10     # 应失败(访客到内部被阻止)

# 从 DMZ:
nslookup google.com 10.10.20.10  # 应成功(允许 DNS)
ssh 10.10.1.50                    # 应失败(DMZ 到 LAN 被阻止)

# 验证日志记录
导航:Status > System Logs > Firewall
检查被阻止和通过的流量是否正确记录

# 计划自动配置备份
导航:Diagnostics > AutoConfigBackup
启用自动备份到 Netgate 云或本地存储

核心概念

术语定义
有状态防火墙(Stateful Firewall)跟踪网络连接状态的防火墙,自动允许已建立会话的返回流量,无需明确规则
别名(Alias)pfSense 中 IP 地址、网络或端口的命名组,简化规则管理并提高可读性
NAT(网络地址转换)内部和外部网络之间的 IP 地址转换,包括入站访问内部服务的端口转发
浮动规则(Floating Rules)同时跨多个接口应用的 pfSense 规则,在每接口规则之前处理
pfBlockerNG集成 IP 信誉黑名单和基于 DNS 的黑名单进行自动威胁阻断的 pfSense 包
规则处理顺序pfSense 在每个接口标签内从上到下评估规则;第一个匹配优先,未匹配的流量默认被阻止

工具与系统

  • pfSense 2.7+:基于 FreeBSD 的开源防火墙和路由器平台,具有 Web 管理和丰富的包生态系统
  • pfBlockerNG:用于自动化威胁情报集成的 IP 和 DNS 黑名单包
  • Snort/Suricata 包:作为 pfSense 包提供的 IDS/IPS 集成,用于内联流量检查
  • OpenVPN/IPsec:内置 VPN 实现,用于站点到站点和远程访问连接
  • Netgate AutoConfigBackup:pfSense 灾难恢复的基于云的配置备份服务

常见场景

场景:使用 pfSense 为小型企业网络分段

场景背景:一家医疗实践机构需要对其网络进行分段以满足 HIPAA 要求。他们有一个互联网连接、一台电子健康记录(EHR)服务器、员工工作站、访客 WiFi 网络和医疗 IoT 设备(生命体征监护仪、影像设备)。预算限制要求使用开源解决方案。

方法:

  1. 在 Netgate 4100 设备上部署 pfSense,配备四个物理接口(WAN、LAN、DMZ、MGMT)
  2. 为员工(VLAN 10)、EHR 服务器(VLAN 20)、访客 WiFi(VLAN 30)和医疗设备(VLAN 40)创建 VLAN
  3. 配置严格规则:员工 VLAN 只能通过 HTTPS 访问 EHR 服务器;医疗设备只能通过特定端口与 EHR 服务器通信;访客 WiFi 获得仅互联网访问权限,无内部路由
  4. 使用医疗行业特定威胁源和恶意软件域名阻断启用 pfBlockerNG
  5. 配置出站 NAT,防止内部 IP 地址泄露到互联网
  6. 启用全面日志记录,通过 syslog 将所有防火墙日志转发到 SIEM
  7. 设置自动配置备份并记录规则库以供审计合规

常见陷阱:

  • 创建过于宽松的规则("allow any any")而非基于特定端口的规则
  • 忘记规则处理顺序——将宽泛的 PASS 规则放在特定 BLOCK 规则之上
  • 关键规则未启用日志记录,导致事件调查无法进行
  • 允许 IoT 设备不受限制地访问互联网,创造潜在的数据外泄路径

输出格式

## pfSense 防火墙配置报告

**设备**: pfSense 2.7.2(Netgate 4100)
**接口**: WAN (igb0), LAN (igb1), DMZ (igb2), MGMT (igb3)
**VLAN**: 已配置 4 个(员工、服务器、访客、IoT)
**总规则数**: 所有接口共 28 条活跃规则

### 各接口规则摘要

| 接口 | Pass 规则 | Block 规则 | 已启用日志 |
|-----------|-----------|-------------|-----------------|
| WAN | 2 | 1(默认) | 是 |
| LAN | 4 | 2 | 是(阻止) |
| DMZ | 3 | 1(默认) | 是 |
| GUEST | 1 | 2 | 是 |
| IOT | 1 | 3 | 是 |

### 安全控制
- pfBlockerNG:12 个 IP 黑名单 + 已启用 DNSBL
- Snort IDS:在 WAN 和 LAN 接口上运行
- VPN:已配置带 MFA 的 OpenVPN 远程访问
- 日志:所有流量转发至 SIEM(10.10.20.15)
Saved skills