版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

别名

OPNsense 的别名是个非常强大的功能,在遇到一堆主机需要使用相同的隔离规则的时候,不肯能一个一个添加,这太麻烦了,这个时候 别名 就起到了大作用

别名类型

首先我们先看看别名类型有哪些,有什么作用(以下来自OPNsense防火墙别名的使用)

主机

1、主机别名 类型允许输入 IP 地址、本地主机名或完全限定域名 (FQDN) 。如果需要经常在规则中引用 IP 地址,则可以将其设为 主机别名 并在 规则 中使用该别名。由于 防火墙规则 仅允许 IP 或 网络地址,因此必须使用 别名 才能在规则中使用 主机名 或 FQDN 。

2、主机别名 还允许使用 ! 排除对象。例如,如果输入 !192.168.1.10,则表示排除 192.168.1.10。排除选项 只对 IP 地址 有效。

主机别名示例:

  • IP 地址 : 192.168.1.10 或 !192.168.1.10(也允许 IPv6 地址)
  • 本地主机名(不带域名) : myserver 或 !myserver
  • FQDN : pfchina.org 或 !pfchina.org

可以在别名中输入以 逗号分隔 的 IP 地址 、 主机名 和 FQDN 的任意组合的多个值,例如:192.168.1.10 , 192.168.1.11, myserver1, pfchina.org

网络

1、网络别名 允许以 CIDR 格式 输入网络的 IP 地址范围。CIDR 表示法 是通过使用设置为 1 的位数来定义子网掩码的方法。其余设置为 0。在 192.168.1.0/24 的示例中,/24 是 CIDR 表示法 网络地址的 一部分,相当于 子网掩码 255.255.255.0。允许排除网络别名,如 主机别名。

网络别名示例:

  • 192.168.1.0/24 或 !192.168.1.0/24(也允许 IPv6 地址)
  • 可以输入 多个网络:192.168.1.0/24, 192.168.2.0/24

端口

端口别名 允许指定 端口号。可以输入 0 到 65,535 之间的数字。要指定一系列 连续端口,请在端口号之间使用 冒号 (:)。

端口别名示例:

  • 端口 : 8080
  • 端口范围 : 8000:8080
  • 可以输入 多个端口,包括 端口范围:22, 8000:8080

URL (IPs)

网址(IPs)别名 用于托管在网站上的 IP 地址列表。在 OPNsense 文档中没有提及 URL (IPs) 的 别名类型。将 URL (IPs) 与 URL Table (IPs) 进行比较时,主要区别在于 刷新频率,URL (IPs) 用于 IP 地址 的静态列表。网址(IPs)别名 可以使用 域名 、 主机名 、 IPV4地址 、 IPV6地址 、 IP 地址范围(CIDR 格式)

URL (IPs)别名示例:

URL Table (IPs)

URL Table (IPs)别名 用于 IP 地址列表,如 URL (IPs)别名。大多数用户最喜欢使用这个 URL 别名类型 ,它可以 定期刷新,对于阻止列表很有用。URL Table (IPs)别名 可以 指定更新间隔。URL Table (IPs)别名 可以使用 域名 、 主机名 、 IPV4地址 、 IPV6地址 、 IP 地址范围(CIDR 格式)

URL Table (IPs)别名 示例:

GeoIP

当需要阻止来自 其他国家/地区 的 IP/网络地址 时,可以使用 GeoIP别名。托管在云上的服务和通过 VPN、Tor 或 SSH 建立 隧道网络 连接,很容易绕过 GeoIP阻止。但是它仍然很有用,它可以 阻止 来自不熟练的攻击者 或来自其他国家的受感染机器的随机攻击。

要设置 GeoIP别名,必须注册 MaxMind 的 GeoIP 服务 以获取完全配置 GeoIP 别名 所需的 GeoIP 地址范围。具体设置可以看这里 MaxMind GeoIP’s Setup

网络组

网络组别名 可用于 对除 端口别名 和 外部(高级)别名 类型之外的 其他别名 类型进行分组。该别名类型仅允许对兼容的别名进行分组。使用 网络组别名 的主要好处是它可以防止对 不兼容 的别名进行分组。

网络组别名 示例:

  • hostalias1, hostalias2, urlalias(从下拉列表中选择)

MAC地址

MAC 地址别名 允许在 别名 中使用 MAC 地址。MAC 地址别名 无法 杜绝恶意用户 使用 欺骗MAC地址,这是该别名使用存在的缺陷。MAC 地址别名 更新是需要时间的,如果客户端一直不使用 IP 进行访问,则不会记录 MAC 地址 所使用的 IP

MAC 地址别名 示例:

  • 3f:cf:3f:1f:7f:bf
  • 也可以输入多个 MAC 地址:3f:cf:3f:1f:7f:bf, 3e:ce:3e:1e:7e:be

外部(高级)

当希望外部进程管理防火墙中别名的值时,可以使用 外部(高级)别名 类型。如果需要动态更改别名的值,这会非常方便。由于 OPNsense 具有 防火墙 API,可以更好的从外部进程更新/管理防火墙规则。

别名嵌套

对于所有别名类型,可以在别名中 嵌套别名。如果希望将多个别名组合在一起,这会很有用。例如,如果有 server1 和 server2 的别名,可以创建一个名为 myservers 的第三个别名,其中包含 server1 和 server2 。这样做,可以在它们自己的特定防火墙规则中使用 server1 和 server2 别名,但随后有适用于两个服务器的更广泛的防火墙规则。

删除别名

要删除嵌套在另一个别名中和/或防火墙规则当前正在使用的别名,将收到错误消息。这样的设置可以防止违反任何防火墙规则。

创建别名

点击 防火墙: 别名 ,点击下方的 + 号,创建别名

  1. 输入别名名称(名称必须以 字母 或 单个下划线 开头,少于 32个字符,并且仅由 字母数字字符 或 下划线 组成。可以使用此名称嵌套别名。)
  2. 选择类型(参考本文这里)
  3. 输入内容
  4. 输入描述(看你心情填与否)
  5. 保存

端口转发

相比 UPNP (通用随插即用) 端口转发手动控制转发安全性要好一点

信息
注意: 组 在这一块不一定好用

普通转发

  1. 点击 防火墙: NAT: 转发 ,点击上方的 + 号,创建规则
  2. 接口 通常选择 WAN
  3. TCP/IP版本 看你需求
  4. 协议 一般选择 TCP/UDP
  5. 目标 一般为 WAN网络 或者 WAN地址
  6. 目标端口范围 如果只转发一个端口,则填一样,如果转发一段端口,从 填入 开始端口 到 填入 结束端口
  7. 重定向目标IP 可以填入 别名 和 单主机,别名 相关请看这里
  8. 重定向目标端口 填入想要 转发端口,如果是一段端口,则填入 开始端口(1:1对应)
  9. 保存,应用更改

目标重定向

对某个目标的端口进行重定向,这边就拿 DNS重定向 举例:

  1. 点击 防火墙: NAT: 转发 ,点击上方的 + 号,创建规则
  2. 接口 通常选择 LAN
  3. TCP/IP版本 看你需求
  4. 协议 一般选择 TCP/UDP
  5. 勾选 目标 / 反转
  6. 目标 一般为 LAN网络
  7. 目标端口范围 选择 DNS
  8. 重定向目标IP 填入 127.0.0.1 或者 DNS服务器
  9. 重定向目标端口 选择 DNS
  10. 保存,应用更改

禁止重定向

如果我们不需要对 某个IP 重定向,这边那上面的 DNS重定向 举例。假设内网的 DNS查询 重定向到 192.168.1.2 ,这个时候我们需要取消对 192.168.1.2 重定向

  1. 点击 防火墙: NAT: 转发 ,点击上方的 + 号,创建规则
  2. 勾选 禁用重定向
  3. 接口 通常选择 LAN
  4. TCP/IP版本 看你需求
  5. 协议 一般选择 TCP/UDP
  6. 勾选 目标 / 反转
  7. 目标 填入 192.168.1.2
  8. 目标端口范围 选择 DNS
  9. 保存,应用更改

高可用

高可用性 (HA) 是指IT系统、组件或应用程序在一定时间内以较高级别一致且不中断地运行的能力。高可用性 (HA) 旨在保证系统满足预先设定的运行性能水平,提供最佳性能并有效管理各种工作负载和故障,同时最大限度地减少或消除任何服务中断。

OPNsense采用通用地址冗余协议 (CARP) 来实现硬件故障转移,通过配置两个或多个防火墙来创建,如果主防火墙上的一个接口出现故障或主防火墙完全关闭,则辅助防火墙将变为活动状态。

利用这一强大的功能,可以建立一个完全冗余的防火墙系统,并具有自动且完美的故障转移功能。在过渡到备份网络期间,网络将保持正常连接,对用户造成的干扰基本可以忽略。

在深入研究OPNsense上的HA设置之前,我们先了解与建立集群系统相关的术语。

CARP

CARP(通用地址冗余协议 ) 支持在多个主机之间共享单个IP地址和虚拟主机 ID (VHID),从而确保一项或多项服务的高可用性。如果一台或多台主机发生故障,其余主机将无缝接管控制权,确保用户不会遇到任何服务中断。

除了共享IP地址之外,每个主机还分配有一个唯一的IP地址用于管理和配置。共享IP地址的所有计算机都拥有相同的VHID。网络接口广播域中的每个虚拟IP地址都必须具有唯一的虚拟主机标识符 (VHID)。

通用地址冗余协议 (CARP) 使用IP协议112,基于OpenBSD,并使用多播数据包将其状态传达给相邻设备。确保每个接口都能接收CARP报文。每个虚拟接口都需要拥有一个不同的虚拟主机ID (vhid),该ID在物理计算机之间共享。规定的偏差用于确定具有较高优先级的物理机。偏度的降低对应于分数的增加。CARP采用IP协议112(0x70)来确定传输通告时的优先级,它通过224.0.0.18或 来实现FF02::12。

pfSync

pfsync是一种通讯协议,用于在运行数据包过滤器 (PF) 的计算机之间同步防火墙状态,以实现高可用性。它与CARP结合使用,以确保备份防火墙维护与主防火墙相同的信息。如果防火墙集群中的主系统发生故障,辅助计算机能够无缝处理正在进行的连接,而不会造成任何损失。建议使用专用接口在主机之间传输pfSync数据包,以增强安全性(防止状态注入)并提高速度。为了使状态信息准确地跨两个防火墙应用,它们必须使用相同的接口名称来访问相同的网络。举例来说,如果防火墙A 的内部网络 (LAN) 通过igb0接口链接,则防火墙B也必须将igb0分配给该LAN。

XMLRPC

OPNsense的一项功能XMLRPC同步可以确保备份服务器的配置与主服务器的配置保持一致。每次配置发生变化后,选中同步区域的配置都会从主节点复制到辅助节点,并在启用XMLRPC同步时激活。XMLRPC同步不是必需的,但它可以大大减少集群维护所需的工作量。

信息
高可用 在 ESXI 上多少有点水土不服,端口组 和 虚拟交换机 的 混杂模式 选择 拒绝 ,这个时候就可以使用高可用了,但 OpenWrt 就无法连接 OPNsense ,所以推荐试试 PVE
高可用 在外网访问切换速度很快(大概5-10秒),内网主要看设备(大概1-2分钟)
如果发现跨网段无法访问,可以用 TRACERT (win)查看一下路由

准备

  • 首先需要先安装 两个 OPNsense
  • 其次两个 OPNsense 之间 接口分配 一定要一样( 接口 和 标识符 匹配, MAC地址 不能冲突)
  • 给各个接口添加 静态IP地址(请勿分配 一样 的 IP地址 ,如果是 PPPOE拨号 则不用)
  • 添加一个 HA接口(用于防火墙之间通信)

参考接口设置如下:

主防火墙:

接口标识符IP地址
LANlan(也可能是opt1,请根据实际情况分配)192.168.1.254/24
WANwanPPPOE
HAopt1(如果LAN是opt1,则这里是opt2)198.19.1.254/24

备防火墙:

接口标识符IP地址
LANlan(也可能是opt1,请根据实际情况分配)192.168.1.253/24
WANwanPPPOE
HAopt1(如果LAN是opt1,则这里是opt2)198.19.1.253/24

设置防火墙规则

1、在两台防火墙的 【HA接口】 添加 【any to any】 规则

  • 点击【 防火墙: 规则: HA】

2、在 【LAN】 添加允许 【CARP规则】 (如果 WAN口 需要 CARP 的也需要设置)

  • 点击 防火墙: 规则: LAN ,添加规则

参考如下设置:

选项参数
操作通过
禁用不勾选
快速勾选
接口LAN
方向in
TCP/IP版本IPV4(根据情况自行选择)
协议CARP
源 / 反转不勾选
LAN网络
源(高级)不更改
目标 / 反转不勾选
目标any
目标端口范围any
日志不勾选
类别(根据自己需要填写)
描述允许CARP协议访问(根据情况填写)
不同步XMLRPC不勾选
计划none
网关默认
高级功能不修改
信息

如果是多网口,设置可以到【 防火墙: 规则: 浮动】 中设置

在主防火墙上设置CARP

信息
注意,如果有 IPV6路由通告 使用需要,需要设置 CARP 本地链路IPV6地址
  1. 点击 【接口: 虚拟IP: 设置、 ,点击最底下的 橘色加号
  2. 模式 选择 CARP
  3. 接口 选择 LAN (如果要设置 WAN口,请选择 WAN)
  4. 网络/地址 输入 192.168.1.1/24
  5. 拒绝服务绑定 勾选 (这个选项最明显的会影响DHCP,如果是IPV6,不勾选时路由通告时会通告IP,至于会不会有其他影响,我暂时不清楚)
  6. 密码 随便输入就行
  7. VHID组 点击 选择一个未分配的VHID 或者 自己填一个
  8. 基本值 默认即可

在主防火墙上设置NAT(仅限设置了WAN的CARP,其他跳过即可)

点击 【防火墙: NAT: 出站】 ,在 【模式】 里选择 【手动生成出站NAT规则】 ,然后保存

在 【防火墙: NAT: 出站】 的 【手动规则】 里添加 两条规则 (一条是 IPV4 另一条 IPV6),如下设置:

接口源端口目标目标端口NAT地址NAT端口静态端口描述
WANLAN网络***WAN口的CARP地址*IPV4 NAT出站
WANLAN网络***WAN口的CARP地址*IPV6 NAT出站

IPV4设置,IPV6类似( TCP/IP版本 选项选择 IPV6 即可):

选项选择
禁用不勾选
禁用NAT不勾选
接口WAN(一般选择出口)
TCP/IPIPV6
协议any
源反转不勾选
源地址LAN 网络
源端口any
目标反转不勾选
目标地址any
转换/目标WAN口的CARP地址
日志不勾选
转换/端口
静态端口勾选

 在主防火墙上 高可用设置

  1. 点击【 系统: 高可用: 设置】
  2. 勾选 【同步状态】
  3. 同步接口 选择 HA
  4. 同步对端IP 填入 198.19.1.253
  5. 同步配置对端IP 填入 https://198.19.1.253
  6. 远程系统用户名 填入 root
  7. 远程系统密码 填入 root密码
  8. 选择需要 同步模块
  9. 保存,并点击 系统: 高可用: 状态 ,出现信息后即为 防火墙状态 获取成功
  10. 点击 上传的小图标 ,同步配置
  11. 点击 接口: 概况 ,可以看到 LAN接口 IPV4 一栏中,在 192.168.1.1/24 旁会有个绿色图标,这表示当前为 主设备 ,如果在 备防火墙 看到是灰色,表示配置成功
信息
注意:LAN口防火墙之间必须要能够互访,否则都会认为自己是 主设备

在备防火墙上 高可用设置

  1. 点击 【系统: 高可用: 设置
  2. 勾选【 禁用抢占】
  3. 勾选 断开拨号接口
  4. 勾选 同步状态
  5. 同步对端IP 填入 198.19.1.254
  6. 保存即可

参考:高可用测试

OPNsense性能优化

硬件卸载

有关于 硬件卸载 是什么,可以看看这篇文章硬件加速与功能卸载。简单来说 硬件卸载 可以 接收侧针对VLAN进行包过滤 、 发包时VLAN Tag的插入 、IP TCP/UDP/SCTP checksum硬件卸载功能 、 TCP分片功能的硬件卸载 、 TCP组包功能的硬件卸载。推荐关闭 硬件卸载 功能(当然默认是关闭的)

PVE设置(ESXI没有,请跳过)

  1. 常规 选项卡请根据自己情况填写
  2. 操作系统 选项卡请根据自己情况填写(LINUX就行拉)
  3. 系统 选项卡
    • Qemu代理 选择 开启(一般会安装的,类似 ESXI agent,用于与 虚拟机通信 获取 虚拟机信息)
    • BIOS 选择 OVMF(UEFI) ,并选择 EFI存储 (务必不要选择 预制秘钥)
  4. 磁盘 选项卡请根据自己情况填写
  5. CPU 选项卡
    • 类别 推荐选择 kvm64
    • Extra CPU Flags: 中选择 aes 旁的 + 旁的 圆圈 (这样就打开了 aes )
  6. 网络 选项卡请根据自己情况填写
    • 模型 选择 ViriIO
    • 取消勾选 防火墙
    • Multiqueue 设置为 8
  7. 确认

可调参数

点击 【系统: 设置: 可调参数】 进行设置。参照​ ​FreeBSD网络性能调优​​指南

代码块
languageplain
1、这是一个与 CPU相关 的可调参数,用于 缓解Spectre V2漏洞 。禁用它对性能有非常大的提升(一个漏洞干掉几代性能提升( ̄y▽ ̄)╭ )。无需添加新条目
hw.ibrs_disable=1

2、取消可用于 netisr处理 的 CPU数量 。默认情况下,FreeBSD网络堆栈 是 单线程 的。设置为 -1 可以使用全部8个CPU线程。需要创建新条目
net.isr.maxthreads=-1

3、将每个 ISR线程 绑定到1个 CPU核心 ,为 每个核心 启动一个线程。需要创建新条目
net.isr.bindthreads=1

4、参考​​这个Github ISSUE(https://github.com/opnsense/core/issues/5415)​​,似乎需要将此可调参数更改为 deferred 或 hybrid 才能使其他 net.isr可调参数 生效。需要创建新条目
net.isr.dispatch=deferred

5、启用 接收方缩放 ,RSS 是另一个可以改进 多核系统网络流量并行处理 的参数。需要创建新条目
net.inet.rss.enabled=1

6、这是来自同一论坛​的接收端缩放可调参数。将其设置为2,是因为最佳值是CPU内核数除以4。CPU有8个内核,所以8/4=2。您的值应基于 OPNsense虚拟机 上的 CPU内核数。需要创建新条目
net.inet.rss.bits=2

7、这些TCP缓冲区 设置取自​FreeBSD网络性能调优​​指南​,没有深入研究它们,但它们都给 OPNsense 提供了缓冲区相当或更大,所以采用了它。该指南详细说明了这些值如何帮助提高性能。需要创建新条目
net.inet.tcp.recvbuf_max=4194304
net.inet.tcp.recvspace=65536    (无需添加新条目)
net.inet.tcp.sendbuf_inc=65536
net.inet.tcp.sendbuf_max=4194304
net.inet.tcp.sendspace=65536    (无需添加新条目)

8、该参数启用了 优化的内核套接字接口 ,可以显著降低快速 TCP流对CPU的影响。需要创建新条目
net.inet.tcp.soreceive_stream=1

9、该值增加 PF防火墙哈希表的大小,以便在性能下降之前允许表中有更多的连接。需要创建新条目
net.pf.source_nodes_hashsize=1048576

10、这些参数值 提高处理IP片段 时的效率。您也可以在此处设置更激进的值,但似乎这些值更安全,所以我选择了它们。需要创建新条目
net.inet.tcp.mssdflt=1240
net.inet.tcp.abc_l_var=52

11、该参数配置了 最小段大小,或 单个IPv4 TCP段同意传输 的 最小数据负载,旨在提高效率。需要创建新条目
net.inet.tcp.minmss=536

12、这与网络完全无关,这是用于 改善RNG熵池 的值。因为防火墙系统上有 VPN,认为 RNG 越多越好。需要创建新条目
kern.random.fortuna.minpoolsize=128

13、参考​Reddit(https://www.reddit.com/r/OPNsenseFirewall/comments/m80s91/opnsense_slower_than_pfsense/)​,它在最后一批可调参数中被添加,最终将吞吐量提升到了极值。需要创建新条目
net.isr.defaultqlimit=2048

14、从​​FreeBSD网络性能调优​​指南​中发现了这个。需要创建新条目。参考如下 网卡与参数 对应关系:

网卡速率参数值
1 Gbit2097152
2 Gbit4194304
10 Gbit16777216
40 Gbit157286400
100 Gbit614400000

kern.ipc.maxsockbuf=16777216

信息
注意: 组 在很多功能中是 无法正常使用 的,除 防火墙: 规则 、 防火墙: NAT: 出站 中以外,尽量 选择接口
OPNsense 的 组 功能可以节省很多重复配置在接口上,组规则 优先级高于 接口规则 ,同时可以创建 不同优先级 的 组

创建组

  1. 点击 防火墙: 组,点击红色 + 号
  2. 输入 组 的 名称
  3. 选择 组 的 成员
  4. (no)GUI组 选项勾选时,接口 则不会 按照 组——>接口 方式显示
  5. 顺序默认为 0 ,数字 越大 优先级 越低
  6. 描述看心情填写

创建组规则

1、点击 防火墙: 规则:(组名称) ,点击红色 + 号

2、参考如下设置 (简单 any to any 规则):

选项参数
操作通过
禁用不勾选
快速勾选
接口(组名称)
方向in
TCP/IP版本IPV4(根据情况自行选择)
协议any
源 / 反转不勾选
(组名称)网络(组一般是没有地址这个选项的)
源(高级)不更改
目标 / 反转不勾选
目标any
目标端口范围any
日志不勾选
类别(根据自己需要填写)
描述Default allow LAN to any rule(根据情况填写)
不同步XMLRPC不勾选
计划none
网关默认
高级功能不修改

3、保存,应用更改

4、点击 防火墙: 规则:(组成员) ,展开规则即可看到 组规则

网关组

网关组主要是用于负载均衡或者故障转移,本次主要介绍故障转移,起码需要两个 WAN口

WAN口:

协议网关名称
IPV4WAN_GW
IPV6WAN_DHCP6

WAN2口:

协议网关名称
IPV4WAN2_DHCP
IPV6WAN2_DHCP6

配置网关

1、点击 系统: 网关: 配置 ,点击 WAN_GW 、 WAN_DHCP6 、 WAN2_DHCP 、 WAN2_DHCP6 右边的 编辑

2、参考如下设置

选项参数
禁用不勾选
名称WAN_GW
描述WAN Gateway
接口WAN
地址簇IPV4
IP地址留空
上游网关勾选
远程网关不勾选
禁用网关监控不勾选
禁用主机路由不勾选
监控IP223.5.5.5 (IPV6则使用2400:3200::1,注意:一个网关一个地址,不可以复用)
将网关标记为关闭不勾选
优先级254

3、应用,检查各个 网关状态 是否是 正常(online)

创建网关组

1、点击 系统: 网关: 组 ,点击 红色加号 创建网格组

2、参考如下设置

选项参数
组名WAN_Group_V4 (v4和v6要分别创建)
网关优先级(故障转移) WAN_GW层级1
WAN2_DHCP层级2
————————————————————
网关优先级(负载均衡) WAN_GW层级1
WAN2_DHCP层级1
触发条件丢包
池选项默认
描述IPV4网关组

3、保存

防火墙LAN口规则设置

1、修改或者创建 any to any 规则在 LAN网口

2、参考如下设置:

选项参数
操作通过
禁用不勾选
快速勾选
接口LAN
方向in
TCP/IP版本IPV4(根据情况自行选择)
协议any
源 / 反转不勾选
LAN网络
源(高级)不更改
目标 / 反转不勾选
目标any
目标端口范围any
日志不勾选
类别(根据自己需要填写)
描述Default allow LAN to any rule(根据情况填写)
不同步XMLRPC不勾选
计划none
网关WAN_Group_V4
高级功能不修改
信息

网关组防火墙设置注意事项

为了减少规则的重复设置,可以选择创建 防火墙: 组
但是可能存在 数据包被丢弃 的问题,所以个人建议除了 防火墙规则 以外 不使用组
请勿在流控中使用 防火墙: 组 ,规则将不起作用

目录