是一個基于 Apache 的輕量、持續、實時的 sFlow 子產品。

什麼是 sFlow
sFlow 是一種網絡流量分析的協定。通過流量分析,可以實作更有效地監控網絡的狀況。例如,最近爆出的
OpenSSL心髒出血漏洞,由于是通過 OpenSSL 漏洞直接讀取記憶體資訊,而不是直接入侵系統,是以伺服器日志上不會有相關的記錄,使用正常手段難以難以追查。但是,由于來回通信包的長度等特征非常明顯,是以利用sFlow之類的技術分析流量特征,就可以追溯攻擊流量和攻擊曆史。特别是,這次的 OpenSSL 漏洞可以無限制反複利用,這既友善了攻擊者,不用依靠精妙的技巧來操控讀取位址,反複讀取即可獲得大量記憶體片段,另一方面也使攻擊行為更容易被偵測到。
目前已有
大量裝置支援sFlow協定。sFlow協定的以下特性使其非常适合監測大流量傳輸的網絡:
- 使用内置在硬體中的專用晶片,減輕路由器或交換機的CPU、記憶體負擔。
- 通過分布在網絡不同位置的 sFlow agent 将資料傳送給中央 sFlow 采集器,由中央采集器進行分析。
- 使用采樣分析技術。大部分的包被丢棄,隻留下樣本被傳送給采集器。sFlow 協定也支援 1:1 的采樣,也就是收集每個包的資訊。隻不過具體的晶片實作的最大采樣率有所不同。
mod_sflow 就是一個開源的 sFlow 中央采集器,可以實時分析收到的 sFlow 資料。
安裝
編譯安裝此子產品于 Apache 的子產品目錄,同時在 apache
httpd.conf
目錄中添加此項:
rm -f `apxs -q LIBEXECDIR`/mod_sflow.so
apxs -c -i -a mod_sflow.c sflow_api.c
重新開機 Apache 服務:
apachectl restart
注意,
rm -f
那一步很重要。這是 Apache #47951 問題的臨時解決方案。
配置
mod_sflow 會讀取
/etc/hsflowd.auto
的資訊。這個檔案會在你運作
hsflowd
服務時自動生成。
你也可以在
httpd.conf
或
../httpd/conf.d/sflow.conf
中配置:
<IfModule mod_sflow.c>
<Location /sflow>
SetHandler sflow
</Location>
</IfModule>
重新開機 Apache 後,你可以通路
http://<server>/sflow/
來檢視狀态:
counter method_option_count 0
counter method_get_count 34
counter method_head_count 0
counter method_post_count 0
counter method_put_count 0
counter method_delete_count 0
counter method_trace_count 0
counter method_connect_count 0
counter method_other_count 0
counter status_1XX_count 0
counter status_2XX_count 17
counter status_3XX_count 0
counter status_4XX_count 17
counter status_5XX_count 0
counter status_other_count 0
string hostname 10.0.0.119
gauge sampling_n 400
輸出
mod_sflow 的會在 UDP 端口輸出内容。你可以使用支援 sFlow 協定的工具檢視,例如,免費軟體
sflowtool。
sflowtool的會輸出類似如下的内容:
startDatagram =================================
datagramSourceIP 10.0.0.150
datagramSize 192
unixSecondsUTC 1294168545
datagramVersion 5
agentSubId 32576
agent 10.0.0.150
packetSequenceNo 7
sysUpTime 25000
samplesInPacket 1
startSample ----------------------
sampleType_tag 0:1
sampleType FLOWSAMPLE
sampleSequenceNo 1
sourceId 3:65537
meanSkipCount 400
samplePool 124
dropEvents 0
inputPort 0
outputPort 1073741823
flowBlock_tag 0:2100
extendedType socket4
socket4_ip_protocol 6
socket4_local_ip 10.0.0.150
socket4_remote_ip 10.0.0.70
socket4_local_port 80