指南 › TrapWatch
其他语言 English · 日本語 · 한국어 · 简体中文
TrapWatch
SNMP trap 接收,异常检测在本机运行 — 0.1.5
本版本的变化
- Linux:
.deb现包含面向无桌面服务器的 headless 模式 — 在浏览器中使用同样的界面,并附带 systemd unit。见第 5 节。 - 试用结束后现在会真正停止接收(此前仍在继续接收);主界面会如实显示,激活密钥后立即恢复。
- 删除数据文件夹不再会让 30 天试用重新开始。试用开始时间也记录在数据文件夹之外,并以最早的记录为准。检查只在本机进行。
- 即使保存了不匹配的密钥,只要试用期未结束就不会停止接收;settings.json 现在仅运行 TrapWatch 的账户可读。
- Windows 安装程序已进行 Authenticode 签名并带时间戳。
1. 安装
选择与安装机器相符的版本。下面都是当前版本;旧版本列在发布说明页面。
- Windows installer TrapWatch-0.1.5-x64.exe
- Linux · AppImage TrapWatch-0.1.5-x86_64.AppImage
- Linux · Debian/Ubuntu TrapWatch-0.1.5-amd64.deb
- macOS · Apple silicon TrapWatch-0.1.5-arm64.dmg
- macOS · Intel TrapWatch-0.1.5-x64.dmg
请校验下载的文件。公布的校验和在这里: TrapWatch-SHA256SUMS.txt
macOS 与 Linux:
shasum -a 256 TrapWatch-0.1.5-x64.exe
Windows:
Get-FileHash -Algorithm SHA256 TrapWatch-0.1.5-amd64.deb
macOS 版本已通过 Apple 公证,打开时不会有警告。Windows 安装程序已进行 Authenticode 签名并带有时间戳。由于证书是新的,在积累信誉之前 SmartScreen 仍可能弹出警告,如出现请选择更多信息 → 仍要运行。
2. 首次运行
- TrapWatch 默认监听 UDP 1162 端口。标准的 trap 端口是 162,但它低于 1024,需要管理员或 root 权限;1162 不需要,普通用户即可启动。
- 在要上报的设备 — 交换机、路由器、防火墙、UPS — 上,把 SNMP trap 目的地设为这台机器的 IP 和 1162 端口。如果某台设备无法改端口,就在 Settings → Receiving 里改成 162,并授予相应权限。
- trap 到达即显示。不需要先建设备清单:凡是到达端口的都会接收,你原本不知道的设备一开口就会出现。
- 如果什么都没收到,通常是防火墙(见下)。窗口顶部始终显示实际正在监听的端口;如果没能绑定,会用红色说明原因。
每次安装都以付费版的 30 天试用开始。事先不索取任何东西 — 不要银行卡,不要账户,不要邮箱地址。
3. 运维
Community 字符串
在 Settings → Receiving 里留空,则不检查 community,凡是到达端口的 trap 全部接收。填写后,不匹配的 trap 会计入拒绝数,而不是被悄悄丢掉 — 这样你能区分“什么都没来”和“全部被拒”。注意在 SNMP v1 和 v2c 中,community 字符串以明文传输;把它当作过滤手段,而不是安全机制。
SNMP 版本
支持 v1 和 v2c。不接收 v3 trap:v3 需要每台设备的 engine ID 和凭据,那正是本产品刻意不去维护的设备清单。
异常检测
在本应用内、这台机器上运行。不上传任何内容,也不下载模型。它报告三件事:反复起落的链路(统计方向变化次数,而不是 trap 数量)、某台设备发送某类 trap 的频率明显超出它自己的历史、以及首次出现的设备或 trap OID。在建立基线之前不会提示 — 大约半小时。因为首次运行时一切都是新的,而对什么都报警只会训练你忽略报警。
告警规则
规则负责你已经知道要找的东西,检测负责你还不知道的。规则按来源地址、trap 名称或 OID、以及最低严重程度匹配。重复抑制以规则和设备的组合为准,因此一台吵闹的交换机不会淹没另一台设备上的同类事件。
未知的 trap
厂商自定义的 trap 按收到的 OID 原样显示。TrapWatch 不会为不认识的 trap 编造描述 — 听起来合理的猜测会把你引向错误的方向。
保留
trap 写在这台机器上,每天一个文件,不会因为方案限制而被删除。Settings → Retention 由你决定,0 表示全部保留。任何内容都可以导出为 CSV。
语言
Settings → Interface language。英语、日语、韩语、简体中文,运行时即可切换。设备发来的内容 — 地址、trap OID、接口名 — 永远不翻译。
数据存放在哪里
TrapWatch 记录的一切都留在运行它的那台机器上。不会发给我们,不会发给分析服务商,也不会发给广告网络。
许可证密钥
密钥在付款后通过邮件发送,在你自己的计算机上校验,因此 TrapWatch 不会连接许可服务器 — 在无法访问外网的网络中同样可以激活。30 天试用结束后,已经收到的 trap 仍然可以查看,只是不再接收新的。停止期间不会发出告警,也不会向 Central 报告;输入密钥后立即恢复接收。
4. 防火墙
- Windows — 首次询问时在 Defender 防火墙中为专用网络放行 UDP 1162。若已关闭该提示:Windows 安全中心 → 防火墙和网络保护 → 允许应用通过防火墙。在 Windows Server 上通常需要手动添加:
New-NetFirewallRule -DisplayName "TrapWatch" -Direction Inbound -Protocol UDP -LocalPort 1162 -Action Allow - Linux — 放行入站 UDP 1162。使用 ufw:
sudo ufw allow 1162/udp。若要在不以 root 运行的情况下使用 162 端口:sudo setcap 'cap_net_bind_service=+ep' /path/to/trapwatch - macOS — macOS 询问时允许传入连接。无需出站规则。
5. 在没有桌面的服务器上运行(headless)
桌面应用需要图形会话。在没有图形会话的 Linux 服务器上,它无法启动并显示 Missing X server or $DISPLAY。为此,Linux 的 .deb 还包含 headless 模式:以同样的方式接收、解码、保存 trap 并发出告警,同样的界面显示在浏览器中,而不是窗口中。AppImage 不包含该模式。
先在前台试运行
安装 .deb(所需的库由 apt 一并安装),然后启动安装在应用旁边的包装脚本:
sudo apt install ./TrapWatch-*-amd64.deb
/opt/TrapWatch/trapwatch-headless
它会打印带一次性令牌的 Web 界面地址 — http://127.0.0.1:8162/?token=…。打开一次即可,Cookie 会记住你,之后用 http://127.0.0.1:8162/ 就行。地址丢了,trapwatch-headless --show-url 会再次打印。从同一台机器发送一个测试 trap(snmptrap 属于 net-snmp 工具:apt-get install snmp 或 dnf install net-snmp-utils):
snmptrap -v 2c -c public 127.0.0.1:1162 '' 1.3.6.1.6.3.1.1.5.3 \
1.3.6.1.2.1.2.2.1.1.1 i 1 1.3.6.1.2.1.2.2.1.2.1 s "eth0"
这是接口 1 的 linkDown,会在 eth0 上显示为“Link down”。
从自己的电脑打开界面
Web 界面只监听 127.0.0.1。先建立 SSH 隧道,再在自己的浏览器中打开带令牌的地址:
ssh -L 8162:127.0.0.1:8162 user@server
或者在前面放一个 HTTPS 反向代理(nginx、Caddy)。不要把明文 HTTP 端口暴露给不可信的网络:trap 内容、community 字符串和 Central 令牌都会经过它。
作为服务运行
包装脚本旁边装有 systemd unit。创建服务用户,复制 unit 并启动:
sudo useradd --system --home /var/lib/trapwatch --create-home --shell /usr/sbin/nologin trapwatch
sudo cp /opt/TrapWatch/trapwatch-headless.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now trapwatch-headless
带令牌的 Web 界面地址会打印在日志中:sudo journalctl -u trapwatch-headless。
162 端口
TrapWatch 默认监听 UDP 1162,任何用户都可以打开这个端口。如果设备只能发往 162,请在 Settings 中把端口改为 162,取消 /etc/systemd/system/trapwatch-headless.service 中 AmbientCapabilities=CAP_NET_BIND_SERVICE 一行的注释,然后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart trapwatch-headless
如果无法打开端口,原因会同时显示在日志和界面顶部。
数据位置
作为服务运行时,trap、设置、许可证和界面令牌位于 /var/lib/trapwatch/TrapWatch。手动运行时,它与该用户的桌面应用使用同一个文件夹(~/.config/TrapWatch),因此在一边激活的许可证在另一边同样有效。服务以自己的用户运行,所以请在它的 Web 界面中输入一次许可证密钥。
服务器上没有密钥环,因此许可证密钥、告警规则和 Central 令牌以仅服务用户可读的文件(权限 0600)保存;包含 community 字符串的 settings.json 同样以 0600 写入。没有可通知的桌面:本应弹出桌面通知的规则会改为在日志中写一行。MeshWatch Central 与桌面版一样工作,在服务器上告警就经由它发出。
详见包装脚本旁的 README-headless.txt;选项见 trapwatch-headless --help。
6. 连接 MeshWatch Central
可选。Central 把多个产品的告警汇入一个收件箱,并按设备进行关联。 发送到 Central 的只有严重程度、来源地址和一行摘要。不发送 varbind — 设备可以在里面放任何东西 — 也不发送 community 字符串,那实际上就是口令。
需要 Central 1.3.4 及以上。更早的 Central 在 Agents 中没有 TrapWatch,无法为其签发令牌。
- 在 Central 打开 Agents,选择 TrapWatch,填写一个标签,然后按 Issue token。标签不是从别处取来的值,而是你自己起的名字,用来区分不同的安装。令牌只显示一次。
- 在 TrapWatch 中打开 MeshWatch Central 设置,把 Central 的地址按
http://<central-server>:8443的形式填入,并填入令牌。除非 Central 就运行在同一台机器上,否则请使用服务器地址而不是localhost。 - 勾选把告警发送到 Central 的选项,保存,然后按 Test connection,应当显示成功。
此后产生的告警会出现在 Central 中。过去的告警不会补录。完整步骤见 MeshWatch Central 指南.
7. 排查问题
什么都收不到
通常是防火墙(第 4 节)。若仍然收不到,请确认设备指向的是这台计算机当前的局域网 IP;DHCP 续租可能让地址变了。
连接 Central 的 Test connection 失败
bad-token 表示令牌错误或已吊销 — 请重新签发。unreachable 表示地址不对或被防火墙挡住;Central 服务器上的 8443 端口必须开放。除非在 Central 前面放了反向代理,否则是 http:// 而不是 https://。当前版本中,这些结果以句子形式显示 — Central 拒绝的令牌会说明它可能已被吊销或由另一个 Central 签发;代码本身在鼠标悬停于消息上时显示。
在 Linux 服务器上显示 Missing X server or $DISPLAY
这是桌面应用在寻找屏幕,安装本身没有问题。请在桌面会话中运行它;若是没有桌面的服务器,请使用 headless 模式 — 见第 5 节。
所有产品共通的问题
升级后窗口空白、Ubuntu 24.04 无法启动、没有 keyring 的 Linux 上凭据以明文保存、告警邮件没有送达 — 这些在各产品上是一样的,集中放在支持页面。
仍然没有解决
请把版本号和你预期发生的情况发到 support@meshwatch.app。我们在工作日两个营业日内首次回复。