|
|
本帖最后由 Harvey·Ho 于 2026-4-12 18:10 编辑
一直以来,在 OpenWrt 上使用 IDS/IPS 功能是一个很专业的需求,一般人根本不会用到它,但随着 snort3 的发布,让这项功能在 OpenWrt 上的部署方式更加灵活,既可以作为旁路只告警的入侵检测系统 (IDS),也可以作为串联在流量路径中直接阻断威胁的入侵防御系统 (IPS)。
📦 安装
在 OpenWrt 23.05+ 等较新版本上,可以通过软件包管理器直接安装 Snort 3 及其核心依赖:
- opkg update
- opkg install snort3 kmod-nft-queue ethtool
复制代码 ⚙️ 核心配置
OpenWrt 的 Snort 3 包采用了模块化的设计,将核心配置与用户自定义配置分离开来,方便升级和维护。你需要关注的主要是两个 Lua 配置文件:
1. 定义你的网络范围 (/etc/snort/homenet.lua)
这是第一步,你需要在这里定义你的“内部”可信网络,其余的都视为“外部”网络。
- # 示例:如果你的内网网段是 192.168.1.0/24
- HOME_NET = [[ 192.168.1.0/24 ]]
- EXTERNAL_NET = "!$HOME_NET"
复制代码
2. 配置 Snort 的工作模式 (/etc/snort/local.lua)
这里是配置的核心,决定了 Snort 是只“看”还是出手“拦”。
- 仅告警模式 (IDS - 推荐新手先从此模式开始)
此模式下,Snort 只分析并记录匹配规则的流量,不会造成网络中断。在 local.lua 中设置 mode = tap 即可。
此模式下,Snort 可以主动丢弃恶意数据包。你需要进行以下设置:
a. 启用 IPS 模式:在 local.lua 中,将 mode 从 tap 改为 inline,并取消 snort["-Q"] = true 的注释。
- # 编辑 /etc/snort/local.lua 文件
- snort["-Q"] = true -- 启用 inline 模式
- ips = {
- mode = inline, -- 将模式改为 inline
- -- ... 其他配置
- }
复制代码 b. 配置数据获取接口 (DAQ):在 local.lua 中配置 N购物 (NetFilter Queue) 模块,告诉 Snort 去哪个队列抓包。
- daq = {
- module_dirs = { '/usr/lib/daq' },
- inputs = { '0' }, -- 队列编号,需与后续 nftables 规则中的队列号匹配
- modules = {
- {
- name = 'n购物',
- mode = 'inline',
- variables = { 'device=eth1' } -- eth1 通常是你的 WAN 口,请根据实际情况修改
- }
- }
- }
复制代码 c. 配置 nftables 流量转发:创建 nftables 规则,将 WAN 口的流量“镜像”一份发送到 Snort 监听的队列中。
- # 创建一个名为 IPS 的链,在转发路径 (forward) 上处理流量
- nft 'add chain inet fw4 IPS { type filter hook forward priority filter; }'
- # 插入规则,将所有转发流量复制一份发送到队列 0 (bypass 参数确保即使 Snort 挂了也不断网)
- nft insert rule inet fw4 IPS counter queue num 0 bypass
复制代码 ⚠️ 重要提示:硬件卸载
在启用 IPS 模式前,强烈建议关闭 WAN 网卡的 通用接收卸载 (GRO) 功能,否则 Snort 可能无法正确分析数据包。
- # 假设你的 WAN 口是 eth1
- ethtool -K eth1 gro off
复制代码 📜 规则管理
没有规则的 Snort 就像一个没有杀毒软件的电脑。OpenWrt 社区提供了便捷的脚本来管理规则。
下载规则:
如果你有 Snort 的Oinkcode(订阅码,即使是免费的),可以使用 snort-rules --oinkcode <你的Oinkcode> 来下载官方规则集。
也可以手动下载免费的Snort Community Rules并解压到 /etc/snort/rules/ 目录。
测试安装:配置完成后,务必先进行测试,确保没有配置错误。
- snort -c /etc/snort/snort.lua -T
复制代码 如果看到 Snort successfully validated the configuration.,就代表成功了。
启用/重启服务:
- /etc/init.d/snort enable
- /etc/init.d/snort restart
复制代码 📊 其他有用信息
性能参考:有用户在 Intel N150 这样的现代 x86 平台上测试,Snort 3 可以轻松跑满 1000Mbps 的对称带宽而不至于让 CPU 完全饱和。对于性能较弱的嵌入式设备,建议先以 IDS 模式运行,评估负载情况。
查看告警:告警信息会记录在系统日志中,你可以通过 logread | grep snort 命令查看实时告警。
替代选择:如果你的设备性能实在有限,或者觉得 Snort 3 的配置仍然复杂,可以考虑 OpenWrt 上另一个轻量级的 IPS 方案 suricata。
💎 总结
在 OpenWrt 上配置 Snort 3 确实比普通软件复杂一些,特别是 IPS 模式涉及网络接口和防火墙的底层调整。所以建议先从 IDS (tap) 模式开始,确保能正常安装、配置规则并看到告警日志。对规则和网络环境熟悉后,再按步骤切换到 IPS (inline) 模式。
始终记得先 -T 测试配置,再 restart 服务。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|