OPNsense Suricata IDS/IPS:接口选择、规则下载与告警验证
启用 Suricata 只是入侵检测的起点。规则是否安装、流量在哪个接口被捕获、哪些地址属于内网,以及规则最终执行 alert 还是 drop,都会改变实际结果。没有规则的运行中服务,不能提供预期的检测能力;错误的捕获位置和过宽的阻断策略,也可能让告警失去定位价值或中断业务。
本文合并翻译整理 OPNsense / Deciso 的 IPS SSLBlacklists & Feodo Tracker 与 Intrusion Prevention System 全文,核对日期为 2026 年 10 月 05 日。快速教程仍含 16.1.1 时代的说明,以下按现行文档的捕获模式、Policies 和日志流程组织;历史界面和威胁背景均明确标注。旧页还建议通过 System → Firmware → Fetch updates 更新当时版本,截图显示的是该历史固件页的 Fetch updates 按钮;这是版本特定导航,固件更新与规则更新是两项不同维护操作,应按已安装版本的当前发布说明安排并准备回退。本文不指导无版本审查的升级。本次仅静态审查,没有部署、扫描、连接恶意站点或验证吞吐量。

先区分检测与阻断
IDS 观察流量,将可疑模式与已知行为规则匹配,命中后向管理员告警。IPS 则处在数据包经过的路径上,可以在规则匹配时丢弃数据包。Suricata 同时支持两种用途。OPNsense 的相关实现使用 Netmap,也在当前文档中提供 Divert 模式。
官方介绍使用了“线速”等性能表述,但它不是对任意 CPU、网卡、虚拟化环境和规则规模的保证。开启流量检查前,应为日志留足空间,并评估资源。旧快速教程建议至少 2 GB 内存、日志可用磁盘大于 10 GB;这些是旧版建议,不能当作当代生产环境容量计算。
接口选错,会丢失最关键的上下文
IPv4 NAT 是接口选择的关键。在 WAN 侧捕获经过源地址转换的出站流量时,Suricata 看到的来源通常是防火墙,无法直接确定是哪台内网终端发起连接。许多规则依赖内外网方向,NAT 后的信息损失会影响匹配与定位。
规则中的 $HOME_NET 描述受保护的内部网络。默认通常对应 RFC 1918 私有地址,需要时可在高级设置中明确指定实际网段。$EXTERNAL_NET 在本文文档语境中为“不是 HOME_NET 的地址”。因此,不能为了“覆盖所有流量”而把所有地址都设为 HOME_NET,否则许多面向外部的规则反而不匹配。
官方给出的一个历史 ET Open 示例针对从内网发往外部、已建立连接中的 TLS SNI,匹配一段已知恶意域名。下列原规则用于解释方向和字段,域名仅是静态威胁指标,不应访问:
alert tls $HOME_NET any -> $EXTERNAL_NET any (msg:"ET TROJAN Observed Glupteba CnC Domain in TLS SNI"; flow:established,to_server; tls_sni; content:"myinfoart.xyz"; depth:13; isdataat:!1,relative; metadata: former_category MALWARE; reference:md5,4cc43c345aa4d6e8fd2d0b6747c3d996; classtype:trojan-activity; sid:2029751; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, deployment Perimeter, signature_severity Major, created_at 2020_03_30, updated_at 2020_03_30;)
如果必须在 NAT 后的 WAN 侧工作,可以把固定外部地址或网段定义为本地网络,但仍不能恢复真实终端身份。防火墙本就会按策略丢弃不允许的入站包,因此在 WAN 上重复检查这些包未必增加有效保护。快速教程选择 WAN 只是它的案例选择,不能替代对业务流向的分析。
IDS 的适用接口类型较广;Netmap IPS 需要相应网卡和驱动支持。在 VLAN 场景中,当前文档要求在父物理接口启用 Netmap IPS。若网卡缺乏完整原生支持,文档介绍了 dev.netmap.admode=2 的模拟模式,可在 System → Settings → Tunables 配置;这不是兼容性或性能保证,应结合 FreeBSD 支持列表验证。
启用服务与捕获模式
在 Services → Intrusion Detection 中启用服务,选择合适接口,并理解每个捕获模式的条件。原教程的历史截图中,enabled 和 IPS mode 均为已勾选,interfaces 选择了 wan;这是当时示例状态,不是对所有拓扑的 WAN 推荐:
| 设置 | 含义与核对点 |
|---|---|
| PCAP live mode(IDS) | 用于观察与告警,不承担在线丢弃。 |
| Netmap(IPS) | 通过 Netmap 捕获和阻断;网卡、父接口及卸载设置须适配。 |
| Divert(IPS) | 通过防火墙规则将包引流;须在 Firewall → Rules [new] 中配置 Divert-to,仅选择模式还不够。 |
| Listeners | Divert 模式的监听器数量,文档称通常与 CPU 数相同;仍应据实际负载调整。 |
| Promiscuous mode | 以混杂模式监听,使捕获不只限于发给该接口的包。 |
| Pattern matcher | 文档默认 Aho–Corasick;支持的平台可用 Hyperscan。若硬件不支持 Hyperscan,文档建议考虑 Aho–Corasick Ken Steele 变体。 |
| Rotate log / Save logs | 控制日志轮换频率与保留数量,也影响 Alerts 使用的内部事件日志。 |
即使已选择 IPS 模式,规则动作仍须为 drop 才会丢弃匹配流量。接口设置中应依文档关闭硬件 offloading;原图列出的三项是 Disable hardware checksum offload、Disable hardware TCP segmentation offload 和 Disable hardware large receive offload。快速教程还明确提示应用后重启 OPNsense,否则卸载功能可能未完全关闭。文档提醒 20.7 以前的 VLAN Hardware Filtering 处理不同。此类重启和接口调整应安排维护窗口,并保留独立控制台与回退途径。
高级设置允许调整 Home networks 与默认包大小。较大的实际包仍可能被引擎处理,但可能影响性能。不要为了试图获得“更高性能”,盲目改变包大小、捕获范围或绕过检查。
下载规则,之后才谈动作
首次启用 IDS/IPS 时,服务可以已经运行,但尚无规则检测或阻断流量。进入 Download 页,启用需要的规则集,然后点击 Download & Update Rules。页面也会显示规则提供方和上次下载时间;插件可扩展可用规则集。
快速教程的旧版规则集界面截图列出 abuse.ch/Dyre SSL IPBL、abuse.ch/Feodo Tracker、abuse.ch/SSL Fingerprint Blacklist 与 abuse.ch/SSL IP Blacklist,这四行的 Enabled 状态均显示勾选。原文一处把 Feodo 写成“Dodo Tracker”,本文统一使用 Feodo Tracker 名称;这些是来源截图中的历史标签,实际勾选项应以本机当前提供的规则集为准,不据旧界面名称推断订阅仍然存在或有效。
21.1 之前,下载页可通过 filter 将默认 alert 改成 block;从 21.1 起,该功能由独立的 Policies 页承担,旧 filter 会在迁移时转换为策略。对于现行配置,优先使用 Policies 管理批量动作,避免大量逐条覆盖使界面变慢,也避免更新后难以理解规则来源。
Policies:匹配条件与新动作分开看
一条策略包含描述、启用状态和优先级;规则集与原动作的匹配条件;以及来源规则携带的元数据,如受影响产品和部署位置。最终再选择新动作:禁用规则、仅告警或匹配时丢弃。
多条策略重叠时,按优先级数值从小到大处理,最先匹配的策略生效。不是数值越大越优先。元数据由供应商提供;原规则没有的元数据,OPNsense 也无法凭空用于筛选。
按原快速教程,阻断 abuse.ch 已知恶意证书或追踪项的做法是:选中相关规则集、匹配原动作 Alert,将新动作改为 Drop,应用设置,再执行 Download & Update Rules。实际实施前,应先以 alert 模式观察业务流量,检查误报、方向、资产归属和规则有效性,再对已核验范围启用 drop。
Installed rules 页可以按同样的元数据筛选规则,确认启用状态与最终动作。用 matched_policy 筛选可查看规则匹配的策略;手动修改单条规则会标记为 __manual__。这一步能避免“策略已保存”却没有按预期改变目标规则的误判。
自定义规则、绕过与高级模板
User defined 页用于少量自定义规则,包括基于 SSL 证书指纹的规则。Bypass 开关则让符合条件的流量跳过引擎检查,可用于明确的局部场景,但它同时形成检测盲区,应记录理由、范围和复查时间。
更复杂的 Suricata 选项可通过 /usr/local/opnsense/service/templates/OPNsense/IDS/custom.yaml 模板配置。该文件支持 Jinja2 模板语言,而不只是普通 YAML。不要直接粘贴不可信模板或把外部文本当成配置指令;先审查 YAML 结构、模板表达式、规则范围及升级兼容性。本文没有创建该文件或执行任何模板。
日志能证明什么
Alerts 页的 info 按钮提供事件细节。原教程截图是历史样例,时间为 2016-02-01T14:37:33.827572+0100,Action=blocked,Destination=172.18.0.183;Alert 栏以 “SSL Fingerprint Blacklist: Malicious SSL certificate…” 开头,来源地址在截图中被遮挡。这些是旧截图可见字段,不是当前设备的验证结果。启用 syslog alerts 会发送 fast log 格式;启用 EVE syslog output 会以 info 级别发送 EVE 格式,同时保留产品自己的告警记录。按当前官方文档的限制,drop 日志只发送到内部记录器,不能因为外部 syslog 没有 drop 条目就断定未发生阻断。
如果需要把 EVE 转发给外部分析系统,可在 System → Settings → Logging / Targets 添加目标,筛选应用 suricata、级别 info。日志可能包含内部地址、域名和业务行为,应限制访问及保留期限。
快速教程正文把历史计划描述为每日 11:12,但同页截图的字段是 Enabled=checked、Minutes=12、Hours=11、Day of the month=*、Months=*、Days of the week=0,Command=update IDS rules,Description=ids rule updates。OPNsense Cron 字段直接采用 cron 语法;FreeBSD crontab 将星期日记为 0,且日字段只有在“月内日期”和“星期”都受限时才作 OR 匹配。因此截图中的配置实际按设备时区每周日 11:12 触发,与原页文字不一致。当前 OPNsense 文档将该任务列为“Update and reload intrusion detection rules”,底层命令为 configctl ids update。应按本机版本核对当前 UI 标签、系统时区和运行窗口,观察最近下载时间、更新错误和规则动作。规则更新不等同于系统升级,两者都需要独立维护。参考 OPNsense Cron 文档 与 FreeBSD crontab(5)。
验证应覆盖服务运行、捕获接口、规则已加载、告警字段和实际动作。只在授权隔离环境使用明确安全的测试流量或离线样本验证,不以访问恶意域名、下载恶意软件或探测第三方目标验证规则。原快速页明确称当时没有可用的在线阻断测试服务,其“完成”和示例告警不是本次环境的验证结果。
规则来源与覆盖边界
- ET Open:免费、BSD 许可的规则集,官方特别提示它并非完整覆盖,不能据此声称满足所有受监管环境要求。OPNsense 已集成支持。
- ETPro Telemetry:文档列出 Proofpoint 提供的遥测版本入口。启用前核对当时的供应条款、遥测行为和资格,不把旧页描述视为当前承诺。
- ETPro 商业版:持有 oink code 时,可安装
os-intrusion-detection-content-et-pro插件,在 Intrusion Detection → Administration / Download 的etpro.oinkcode中配置。授权码属于秘密,不应进入截图或文章。 - abuse.ch SSL Blacklist:以已知恶意 SSL 证书的 SHA-1 指纹等情报识别恶意软件或僵尸网络关联证书。它检查的是规则可见的证书/协议特征,不等于解密和理解任意 TLS 内容。
- Feodo Tracker:用于追踪相关恶意基础设施。官方页保留 A/B/C/D 变体说明:A 曾使用被入侵的 nginx 代理与 TCP 8080,B 曾使用犯罪者租用服务器、域名及 TCP 80,C 又称 Geodo/Emotet,使用类似 A 的基础设施及不同 URL,D 又称 Dridex。这些是历史背景,不能据此断定当前活动模式或完整检测覆盖。
- URLHaus:文档记载 18.1.7 引入相关列表,收集传播恶意软件的受害站点。
- 应用检测规则:文档记载 18.1.11 引入,面向 Web 服务及 URL。原文“约 80% 流量为 Web 应用”的说法没有在本次独立测量,不能作为当前网络比例或容量依据。贡献入口为 OPNsense rules 仓库。
规则集只是防护体系的一部分。持续观察捕获和匹配是否符合预期、控制误报范围,并保留业务允许规则和回退方案,比一次性把所有规则改成 drop 更有助于建立可维护的检测流程。
作者、修订及许可
原文未署个人作者,维护和发布方为 OPNsense 项目 / Deciso B.V.。本文合并两篇官方文档,保留技术字段与历史版本信息;增加安全审查注释,统一 Feodo 拼写,未复用第三方界面图或 Logo。官方 Documentation Copyright 使用 BSD 2-Clause,以下保留版权、条件及免责声明:
Copyright 2016-2026, Deciso B.V.
Deciso B.V. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPNSENSE DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
许可与署名文件:BSD 2-Clause 完整许可文本。











暂无评论内容