OPNsense 的别名是个非常强大的功能,在遇到一堆主机需要使用相同的隔离规则的时候,不肯能一个一个添加,这太麻烦了,这个时候 别名 就起到了大作用
首先我们先看看别名类型有哪些,有什么作用(以下来自OPNsense防火墙别名的使用)
1、主机别名 类型允许输入 IP 地址、本地主机名或完全限定域名 (FQDN) 。如果需要经常在规则中引用 IP 地址,则可以将其设为 主机别名 并在 规则 中使用该别名。由于 防火墙规则 仅允许 IP 或 网络地址,因此必须使用 别名 才能在规则中使用 主机名 或 FQDN 。
2、主机别名 还允许使用 ! 排除对象。例如,如果输入 !192.168.1.10,则表示排除 192.168.1.10。排除选项 只对 IP 地址 有效。
主机别名示例:
可以在别名中输入以 逗号分隔 的 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。允许排除网络别名,如 主机别名。
网络别名示例:
端口别名 允许指定 端口号。可以输入 0 到 65,535 之间的数字。要指定一系列 连续端口,请在端口号之间使用 冒号 (:)。
端口别名示例:
网址(IPs)别名 用于托管在网站上的 IP 地址列表。在 OPNsense 文档中没有提及 URL (IPs) 的 别名类型。将 URL (IPs) 与 URL Table (IPs) 进行比较时,主要区别在于 刷新频率,URL (IPs) 用于 IP 地址 的静态列表。网址(IPs)别名 可以使用 域名 、 主机名 、 IPV4地址 、 IPV6地址 、 IP 地址范围(CIDR 格式)
URL (IPs)别名示例:
URL Table (IPs)别名 用于 IP 地址列表,如 URL (IPs)别名。大多数用户最喜欢使用这个 URL 别名类型 ,它可以 定期刷新,对于阻止列表很有用。URL Table (IPs)别名 可以 指定更新间隔。URL Table (IPs)别名 可以使用 域名 、 主机名 、 IPV4地址 、 IPV6地址 、 IP 地址范围(CIDR 格式)
URL Table (IPs)别名 示例:
当需要阻止来自 其他国家/地区 的 IP/网络地址 时,可以使用 GeoIP别名。托管在云上的服务和通过 VPN、Tor 或 SSH 建立 隧道网络 连接,很容易绕过 GeoIP阻止。但是它仍然很有用,它可以 阻止 来自不熟练的攻击者 或来自其他国家的受感染机器的随机攻击。
要设置 GeoIP别名,必须注册 MaxMind 的 GeoIP 服务 以获取完全配置 GeoIP 别名 所需的 GeoIP 地址范围。具体设置可以看这里 MaxMind GeoIP’s Setup
网络组别名 可用于 对除 端口别名 和 外部(高级)别名 类型之外的 其他别名 类型进行分组。该别名类型仅允许对兼容的别名进行分组。使用 网络组别名 的主要好处是它可以防止对 不兼容 的别名进行分组。
网络组别名 示例:
MAC地址
MAC 地址别名 允许在 别名 中使用 MAC 地址。MAC 地址别名 无法 杜绝恶意用户 使用 欺骗MAC地址,这是该别名使用存在的缺陷。MAC 地址别名 更新是需要时间的,如果客户端一直不使用 IP 进行访问,则不会记录 MAC 地址 所使用的 IP
MAC 地址别名 示例:
当希望外部进程管理防火墙中别名的值时,可以使用 外部(高级)别名 类型。如果需要动态更改别名的值,这会非常方便。由于 OPNsense 具有 防火墙 API,可以更好的从外部进程更新/管理防火墙规则。
对于所有别名类型,可以在别名中 嵌套别名。如果希望将多个别名组合在一起,这会很有用。例如,如果有 server1 和 server2 的别名,可以创建一个名为 myservers 的第三个别名,其中包含 server1 和 server2 。这样做,可以在它们自己的特定防火墙规则中使用 server1 和 server2 别名,但随后有适用于两个服务器的更广泛的防火墙规则。
要删除嵌套在另一个别名中和/或防火墙规则当前正在使用的别名,将收到错误消息。这样的设置可以防止违反任何防火墙规则。
点击 防火墙: 别名 ,点击下方的 + 号,创建别名
相比 UPNP (通用随插即用) 端口转发手动控制转发安全性要好一点
注意: 组 在这一块不一定好用 |
对某个目标的端口进行重定向,这边就拿 DNS重定向 举例:
如果我们不需要对 某个IP 重定向,这边那上面的 DNS重定向 举例。假设内网的 DNS查询 重定向到 192.168.1.2 ,这个时候我们需要取消对 192.168.1.2 重定向
高可用 在 ESXI 上多少有点水土不服,端口组 和 虚拟交换机 的 混杂模式 选择 拒绝 ,这个时候就可以使用高可用了,但 OpenWrt 就无法连接 OPNsense ,所以推荐试试 PVE 高可用 在外网访问切换速度很快(大概5-10秒),内网主要看设备(大概1-2分钟) 如果发现跨网段无法访问,可以用 TRACERT (win)查看一下路由 |
参考接口设置如下:
主防火墙:
接口 | 标识符 | IP地址 |
---|---|---|
LAN | lan(也可能是opt1,请根据实际情况分配) | 192.168.1.254/24 |
WAN | wan | PPPOE |
HA | opt1(如果LAN是opt1,则这里是opt2) | 198.19.1.254/24 |
备防火墙:
接口 | 标识符 | IP地址 |
---|---|---|
LAN | lan(也可能是opt1,请根据实际情况分配) | 192.168.1.253/24 |
WAN | wan | PPPOE |
HA | opt1(如果LAN是opt1,则这里是opt2) | 198.19.1.253/24 |
1、在两台防火墙的 【HA接口】 添加 【any to any】 规则
2、在 【LAN】 添加允许 【CARP规则】 (如果 WAN口 需要 CARP 的也需要设置)
参考如下设置:
选项 | 参数 |
---|---|
操作 | 通过 |
禁用 | 不勾选 |
快速 | 勾选 |
接口 | LAN |
方向 | in |
TCP/IP版本 | IPV4(根据情况自行选择) |
协议 | CARP |
源 / 反转 | 不勾选 |
源 | LAN网络 |
源(高级) | 不更改 |
目标 / 反转 | 不勾选 |
目标 | any |
目标端口范围 | any |
日志 | 不勾选 |
类别 | (根据自己需要填写) |
描述 | 允许CARP协议访问(根据情况填写) |
不同步XMLRPC | 不勾选 |
计划 | none |
网关 | 默认 |
高级功能 | 不修改 |
如果是多网口,设置可以到【 防火墙: 规则: 浮动】 中设置 |
注意,如果有 IPV6路由通告 使用需要,需要设置 CARP 本地链路IPV6地址 |
在主防火墙上设置NAT(仅限设置了WAN的CARP,其他跳过即可)
点击 【防火墙: NAT: 出站】 ,在 【模式】 里选择 【手动生成出站NAT规则】 ,然后保存
在 【防火墙: NAT: 出站】 的 【手动规则】 里添加 两条规则 (一条是 IPV4 另一条 IPV6),如下设置:
接口 | 源 | 源端口 | 目标 | 目标端口 | NAT地址 | NAT端口 | 静态端口 | 描述 |
---|---|---|---|---|---|---|---|---|
WAN | LAN网络 | * | * | * | WAN口的CARP地址 | * | 是 | IPV4 NAT出站 |
WAN | LAN网络 | * | * | * | WAN口的CARP地址 | * | 是 | IPV6 NAT出站 |
IPV4设置,IPV6类似( TCP/IP版本 选项选择 IPV6 即可):
选项 | 选择 |
---|---|
禁用 | 不勾选 |
禁用NAT | 不勾选 |
接口 | WAN(一般选择出口) |
TCP/IP | IPV6 |
协议 | any |
源反转 | 不勾选 |
源地址 | LAN 网络 |
源端口 | any |
目标反转 | 不勾选 |
目标地址 | any |
转换/目标 | WAN口的CARP地址 |
日志 | 不勾选 |
转换/端口 | |
静态端口 | 勾选 |
注意:LAN口防火墙之间必须要能够互访,否则都会认为自己是 主设备 |
有关于 硬件卸载 是什么,可以看看这篇文章硬件加速与功能卸载。简单来说 硬件卸载 可以 接收侧针对VLAN进行包过滤 、 发包时VLAN Tag的插入 、IP TCP/UDP/SCTP checksum硬件卸载功能 、 TCP分片功能的硬件卸载 、 TCP组包功能的硬件卸载。推荐关闭 硬件卸载 功能(当然默认是关闭的)
PVE设置(ESXI没有,请跳过)
可调参数
点击 【系统: 设置: 可调参数】 进行设置。参照 FreeBSD网络性能调优指南
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 Gbit | 2097152 |
2 Gbit | 4194304 |
10 Gbit | 16777216 |
40 Gbit | 157286400 |
100 Gbit | 614400000 |
kern.ipc.maxsockbuf=16777216
注意: 组 在很多功能中是 无法正常使用 的,除 防火墙: 规则 、 防火墙: NAT: 出站 中以外,尽量 选择接口 OPNsense 的 组 功能可以节省很多重复配置在接口上,组规则 优先级高于 接口规则 ,同时可以创建 不同优先级 的 组 |
1、点击 防火墙: 规则:(组名称) ,点击红色 + 号
2、参考如下设置 (简单 any to any 规则):
选项 | 参数 |
---|---|
操作 | 通过 |
禁用 | 不勾选 |
快速 | 勾选 |
接口 | (组名称) |
方向 | in |
TCP/IP版本 | IPV4(根据情况自行选择) |
协议 | any |
源 / 反转 | 不勾选 |
源 | (组名称)网络(组一般是没有地址这个选项的) |
源(高级) | 不更改 |
目标 / 反转 | 不勾选 |
目标 | any |
目标端口范围 | any |
日志 | 不勾选 |
类别 | (根据自己需要填写) |
描述 | Default allow LAN to any rule(根据情况填写) |
不同步XMLRPC | 不勾选 |
计划 | none |
网关 | 默认 |
高级功能 | 不修改 |
3、保存,应用更改
4、点击 防火墙: 规则:(组成员) ,展开规则即可看到 组规则
网关组主要是用于负载均衡或者故障转移,本次主要介绍故障转移,起码需要两个 WAN口
WAN口:
协议 | 网关名称 |
---|---|
IPV4 | WAN_GW |
IPV6 | WAN_DHCP6 |
WAN2口:
协议 | 网关名称 |
---|---|
IPV4 | WAN2_DHCP |
IPV6 | WAN2_DHCP6 |
1、点击 系统: 网关: 配置 ,点击 WAN_GW 、 WAN_DHCP6 、 WAN2_DHCP 、 WAN2_DHCP6 右边的 编辑
2、参考如下设置
选项 | 参数 |
---|---|
禁用 | 不勾选 |
名称 | WAN_GW |
描述 | WAN Gateway |
接口 | WAN |
地址簇 | IPV4 |
IP地址 | 留空 |
上游网关 | 勾选 |
远程网关 | 不勾选 |
禁用网关监控 | 不勾选 |
禁用主机路由 | 不勾选 |
监控IP | 223.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、保存
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 |
高级功能 | 不修改 |
网关组防火墙设置注意事项 为了减少规则的重复设置,可以选择创建 防火墙: 组 |