nightflyza/OphanimFlow

GitHub: nightflyza/OphanimFlow

OphanimFlow 是一个 NetFlow/IPFIX/sFlow 流量采集、分类与可视化工具包,用于按主机进行带宽监控和流量记账。

Stars: 3 | Forks: 0

# OphanimFlow NetFlow、IPFIX 和 sFlow 聚合与图形工具包。 基本理念是在一个解决方案中替代 bandwidthd 和 Stargazer 的 cap_nf 模块。它在某个专用主机上执行 NetFlow、IPFIX 和 sFlow 数据的收集、分类、预处理,并为网络中的每个主机渲染网络带宽利用率图表以及进行基本的流量记账。 # FreeBSD 13.5/14.3/14.4/15.0 批量安装 ninja 方式 ``` # fetch https://raw.githubusercontent.com/nightflyza/OphanimFlow/main/dist/batchfreebsd.sh && sh batchfreebsd.sh ``` # Debian 13.0 trixie 批量安装 ``` $ su - # wget https://raw.githubusercontent.com/nightflyza/OphanimFlow/main/dist/batchdebian.sh && sh batchdebian.sh ``` 之后,您可以通过类似 http://yourhost/of/ 的链接访问一个简单的 Web 界面。该界面允许您进行最基本的必要设置(例如指定您的网络),并开始使用 OphanimFlow。默认登录名是 "admin",默认密码是 "demo"。不要忘记在用户配置文件设置中更改它。 ![ofdashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0f85505620232031.png) # 将 OphanimFlow 升级到最新版本 只需运行该脚本 ``` # /bin/autoofupdate.sh ``` 然后拭目以待! ;) # Flow collector 使用示例 OphanimFlow 同时支持 NetFlow/IPFIX 和 sFlow collector。两个 collector 使用相同的网络配置、pretag map,并将数据写入相同的数据库表中,以进行统一处理。 ## NetFlow 软件传感器 默认的 NetFlow collector UDP 端口是 42112,默认采样率为 100。Flow 数据每 5 分钟转储到数据库,并每 5 分钟为图表进行预处理,每 10 分钟为总流量计数器进行预处理,因此 ``` # softflowd -i bridge0 -s 100 -t udp=60 -t tcp=60 -t icmp=60 -t general=60 -t maxlife=60 -t tcp.rst=60 -t tcp.fin=60 -n 192.168.0.220:42112 ``` ## sFlow 配置 默认的 sFlow collector UDP 端口是 6343(标准 sFlow 端口)。sFlow collector 与 NetFlow collector 共享相同的采样率配置,并写入相同的数据库表。配置您的网络设备以将 sFlow 数据发送到 collector 主机的 6343 端口。 # REST API REST API 有多个 endpoint,用于获取预处理数据以及图表。因此,您可以在您的外部应用中使用 OphanimFlow 数据,如下所示: ![opharchabstract](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a6162a0300232043.png) payload 和 endpoint 的详细信息如下。 所有 API 请求均作为 GET 请求执行,带有一些参数发送至基础 URL,例如 http://yourhost/of/ ## graph 此 API 调用返回流量图,以 PNG 图像的形式显示指定 IP 地址按流量类别的分布情况。参数 "ip" 是必填的。其他所有参数均为可选。 所有 endpoint 参数: - ip - 格式为 x.x.x.x 的 IP 地址 - dir - 流量方向。可能的值为:R、S,分别代表 "received"(接收)和 "sent"(发送)。默认:R。 - period - 可能的值为:hour、day、week、month、year、24h、48h、explict。默认:day。 - w - 图表图像的宽度(以像素为单位)。默认:1540。 - h - 图表图像的高度(以像素为单位)。默认:400。 最小示例: ``` ?module=graph&ip=172.30.73.247 ``` 对于当前一天,返回类似这样的内容 ![day](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/fe15f0b80c232055.png) 或者 ``` ?module=graph&ip=172.30.73.247&period=week ``` 对于一周,类似这样 ![week](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a965030584232108.png) 或者 ``` ?module=graph&ip=172.30.73.247&period=hour ``` 对于过去一小时,类似这样 ![hour](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c3da19afa5232113.png) explicit 周期需要设置两个 UNIX 时间戳 GET 变量:"from" 和 "to" explicit 周期使用: ``` ?module=graph&dir=R&ip=0.0.0.0&period=explict&from=1115779033&to=1715782633 ``` 自定义尺寸的完整示例: ``` ?module=graph&dir=R&period=week&ip=172.16.68.173&w=1300&h=400 ``` IP 0.0.0.0 返回所有受监控主机的总带宽图表。 数据调试:需要 "dumpdata" GET 参数。 ``` ?module=graph&dir=R&period=hour&ip=0.0.0.0&dumpdata=true ``` 返回类似这样的内容而不是图表: ``` ==== original data ==== [stat] data keys count: 10 Array ( [15:30] => Array ( [0] => 0.071194966634115 [1] => 0 [2] => 0 [3] => 0.071194966634115 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 ) [15:35] => Array ( [0] => 0.067311604817708 [1] => 0 [2] => 0 [3] => 0.067311604817708 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 ) ..... ==== mixed with timeline ==== [stat] data keys count: 14 Array ( [15:25] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 ) [15:30] => Array ( [0] => 0.071194966634115 [1] => 0 [2] => 0 [3] => 0.071194966634115 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 ) ``` ## gettraff 此 API 调用返回 JSON 数组,包含所有或指定 IP 地址在某个时间段内收集的所有流量摘要。 可选 endpoint 参数: - year - 摘要的年份。 - month - 返回流量摘要的月份数字,不带前导零。 - ip - 格式为 x.x.x.x 的 IP 地址 最小示例: ``` ?module=gettraff ``` 返回类似这样的内容 ``` { "172.16.1.175":{ "dl":"66912063800", "ul":"2691439300" }, "172.16.25.75":{ "dl":"145398529200", "ul":"10223157100" }, "172.16.60.149":{ "dl":"49337740100", "ul":"7548407400" }, .... ``` 其中包含当月数据 "dl" - 下载的字节数,ul - 上传的字节数。 完整示例: ``` ?module=gettraff&year=2023&month=12&ip=172.16.1.33 ``` 返回: ``` { "172.16.1.33":{ "dl":"190673220400", "ul":"9911547100" } } ``` 这正是指定 IP 172.16.1.33 在 2023 年 12 月的数据。 # 更多配置 虽然 API endpoint 目前无需任何授权即可访问,但您可能希望限制可以从它们接收数据的主机 IP 列表。这可以通过 of/config/alter.ini 配置文件中的 ENDPOINTS_HOSTS 选项来完成。类似这样: ``` ENDPOINTS_HOSTS="192.168.0.8,192.168.42.56" ``` 此外,您可能希望更改 NetFlow 或 sFlow collector 的端口或采样率,您也可以在同一个 alter.ini 配置文件中使用以下选项来完成此操作: ``` ;NetFlow collector default options COLLECTOR_PORT=42112 SAMPLING_RATE=100 ;sFlow collector default options SFLOW_PORT=6343 ``` 两个 collector 都使用相同的网络配置并写入相同的数据库表。更改这些选项后,不要忘记重新生成配置并重启 collector。 此外,自 0.0.5 版本发布起,OphanimFlow 会自动轮换并清除旧数据,以预留部分存储空间并防止其耗尽。默认设置为总存储大小的 10%。此行为由以下选项控制: ``` ;Reserved storage free space percent STORAGE_RESERVED_SPACE=10 ;write data rotator debug log into exports/rotator.log? ROTATOR_DEBUG=0 ```
标签:Docker 部署, NetFlow, 安全研究社区, 流量监控, 网络计费, 网络运维, 进程监控