天天看點

mod_sflow 輕量、實時的流量分析 Apache 子產品

mod_sflow

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

mod_sflow 輕量、實時的流量分析 Apache 子產品

什麼是 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