搜尋此網誌

2012年7月19日 星期四

[工具介紹] Splunk + Google Maps,讓你輕鬆掌握事件的來源。


logo_splunk_black_mini在前幾篇的分享當中,我們陸續利用了 Splunk 來即時呈現與分析系統登入與封鎖 (fail2ban) 的相關資訊。雖然這些資訊可以幫助我們快速掌握環境的狀況,但是仍有一些不足的地方。其中一個令人困擾的地方,就是很多事件發生的地點都是以 IP 位址來呈現,例如被封鎖的 IP 位址。在大多時候,看到 125.64.43.102 這樣的數據對我們來說並沒有太大的意義,而其中一種常見的轉換呈現方式,就是列出這個 IP 位址的所在地。
Splunk 可以透過應用程式的擴充來達到轉換 IP 位址為實體位置的功能,其中一個是 Google Maps 這個應用程式。在今天的分享中,我們就來按部就班將 fail2ban 的被封鎖 IP 位址資訊轉換成實體位置,並整合至我們之前建立的儀表板之中。
在開始今天的操作之前,我們至少必須有一個完整運作的 Indexer,並能夠蒐集 fail2ban 的相關訊息。如果你還沒有這樣的環境,請先參考這篇文章吧。
接下來同樣讓我們一步步完成今天的目標囉:
  1. 進入應用程式管理介面。
    "管理員" –> "應用程式" –> "應用程式"。4001
  2. 瀏覽線上應用程式。
    點選 "線上尋找更多應用程式"。4002
  3. 安裝 Google Maps 應用程式。
    找到 Google Maps 應用程式後點選 "安裝 Free 版本"。4003
  4. 開始安裝。
    點選 "安裝"。
    4004
  5. 等待安裝完畢。
     
    4005
  6. 重新啟動。
    安裝成功後必須重新啟動 Splunk 才能正常使用 Google Maps,點選 "重新啟動 Splunk"。4006
  7. 確認啟動。
    點選 "確定"。
    4007
  8. 等待重新啟動完成。
    4008
  9. 完成重新啟動。
    點選 "確定"。
    4009
  10. 重新登入 Splunk。
    輸入帳號/密碼後,點選 "登入"。4010
  11. 搜尋資料。
    "應用程式" –> "Search"。4011
  12. 測試 Google Maps 於搜尋功能下的作用。
    輸入搜尋指令
    sourcetype=fail2ban Ban | rex field=_raw "Ban (?<client_ip>.*)" | stats count BY client_ip | geoip client_ip
    眼尖的讀者可以發現我們將之前出現過的指令加上了 | geoip client_ip 這個命令。
    透過這個命令的作用,此時顯示結果多了許多關於地理位置的資訊,包含國家、城市、經緯度等等。
    4012
  13. Google Maps 應用程式。
    Google Maps 本身就是一個圖型化的應用,與 Splunk 的整合當然也不是僅僅多了一些文字描述而已。Google Maps 應用程式提供了圖型化的呈現方式。
    選取 "應用程式" –> "Google Maps"。
    4013
  14. 圖型化顯示。
    我們輸入與之前相同的指令
    sourcetype=fail2ban Ban | rex field=_raw "Ban (?<client_ip>.*)" | stats count BY client_ip | geoip client_ip
    此時呈現的方式變成了 Google Maps,圖中的圓圈與數字分別代表 client_ip 的所在地與數量。
    4014
  15. 整合 Google Maps 至儀表板中。
    前面針對 Google Maps 的操作雖然簡單易用,但是如果能夠整合至我們之前所建立的儀表板之中,就可以讓我們進一步加強對環境狀態的掌握。因此我們先回到搜尋介面。
    選取 "應用程式" –> "Search"。
    4015
  16. 選取我們之前建立的儀表板。
    我之前建立的儀表板名稱為 "fail2ban 歷史統計",此時需點選
    "儀表板和檢視" –> "fail2ban 歷史統計"。
    4016
  17. 顯示儀表板的 XML 設定代碼。
    想要將 Google Maps 加入儀表板之中,必須使用被稱為 Advanced XML 的設定方式,採用預設的設定方式是無法支援 Google Maps 的。雖然使用 Advanced XML 的設定方式可以讓我們引用更多方便的功能,但是卻也失去了圖型化設定的能力,所有的設定都必須透過直接修改 XML 來達成。而且這樣的轉換是單方向的,也就是我們無法從 Advanced XML 設定方式轉回一般的設定方式。 
    在儀表板網址的後方加上 ?showsource=1 ,其中最後的輸入方塊 XML source 就是我們所需要的資訊。將文字區塊內的 XML 字串複製出來。
    4017
  18. 回到儀表板並開始設定。
    將儀表板網址後面的 ?showsource=1 拿掉,我們回到原先的儀表板畫面。
    選取"編輯" –> "開"。
    4018
  19. 直接編輯 XML 檔。
    點選 "編輯 XML"。
    4019
  20. 這是預設的 XML 設定方式。
    4020
  21. 貼上 XML 字串。
    將剛剛複製好的 XML 字串原封不動的貼至輸入方塊當中,並覆蓋掉原先的 XML 字串。
    4021
  22. 貼上 Google Maps 的 XML 設定字串。
    在倒數第二行插上下列 XML 設定字串
      <module name="HiddenSearch" layoutPanel="panel_row5_col1" autoRun="true">       
        <param name="search">sourcetype=fail2ban Ban | rex field=_raw "Ban (?&lt;client_ip&gt;.*)" | stats count BY client_ip | geoip client_ip</param>       
        <param name="earliest">0</param>       
        <module name="GoogleMaps">       
        <param name="height">500px</param>       
        <param name="mapType">roadmap</param>       
        <param name="scrollwheel">on</param>       
        </module>       
      </module>
    輸入完成後點選 "儲存"。
    前述的 XML 設定字串有兩個需要特別注意的地方,其中 layoutPanel="panel_row5_col1" 的 5 與 1 分別代表第 5 列與第 1 行。你可以透過修改這個參數來調整 Google Maps 的所在位置。另外一個需要注意的地方是 search 這個參數其實就是我們之前所使用的查詢指令,不過 < 與 > 被分別用 &lt; 與 &tg; 所取代了,原因是 < 與 > 對 XML 來說是特殊字元,因此無法直接使用。
    4022
  23. 儀表板與 Google Maps 的結合。
    我們可以清楚看到儀表板之中出現了 Google Maps 的資訊,上面呈現了各個地區被封鎖 IP 的數量。
    4023
  24. 發揮你的想像力。
    Google Maps 的應用當然不僅於此,一切都將取決於你的應用與想像力。例如我將之前設定的系統即時登入資訊與 Google Maps 做一結合,只要有任何登入系統的行為發生,我就可以馬上知道登入來自何方。這樣的資訊是不是更加清楚,看起來也更專業了呢?
    4024

2012年7月18日 星期三

[工具介紹] 利用 Splunk 即時監測登入帳號

logo_splunk_black_mini
之前的這篇文章中,我分享了如何透過 syslog 與自行開發的腳本進行即時監測登入系統的行為。雖然腳本運作起來確實能夠發揮預期的功效,但是原本使用 FIFO 的方式,卻有幾個明顯的缺點。其中一個是 FIFO 並不是實際的檔案,因此當系統重開後這些 FIFO 檔案就會消失不見。這個問題還算小,比較大的問題在於 FIFO 並不保證資料的到達。如果讀取程式在資料寫入的當時沒有讀取到資料的話,該筆資料就將永遠消失不見了。為了避免這些問題,我們可以修改腳本,讓它持續監測 /var/log/secure 這個檔案。除了檔案的問題,原有的腳本也不具備集中管理與歷史紀錄追蹤的功能,因此造成管理上力有未逮的情形。等等,持續監測某個日誌檔、集中管理、歷史紀錄追蹤,不正是 Splunk 所內建的能力嗎?在這篇分享中,我將利用 Splunk 的儀表板功能來即時呈現環境中所有的登入狀態。
為了進行下列設定,我們需要一個能夠正常運作的 Indexer 與 Forwarder。關於 Indexer 與 Forwarder 的設定,請參考前一篇文章
首先,我們必須設定 Forwarder 將登入相關訊息遞送到 Indexer。
  1. 修改資料輸入來源的設定檔,檔案名稱是 /opt/splunkforwarder/etc/system/local/inputs.conf 。
    加上下列設定:
    [monitor:///var/log/secure]
    disabled = false
    followTail = 0 
  2. 重新啟動 Splunk Forwarder。
    指令是
    /opt/splunkforwarder/bin/splunk restart
Forwarder 的設定就是這麼簡單,接下來我們就開始利用 Splunk Web 介面來設定 Indexer 囉。
  1. 自定事件類型。
    因為 /var/log/secure 內包含許多不同的資料,其中有許多並非我們所感到興趣的資料,所以我們必須先將這些不需要的資料加以過濾。我們可以在每次查詢時利用查詢參數過濾掉我們不需要的資料,但是 Splunk 支援更方便的作法,其中一種就是自行定義事件類型。我們可以把過濾後的資訊定義為新的事件類型,如此一來之後的查詢只要針對這個新的事件類型就可以自動過濾掉我們所不需要的資料了。
    點選 "管理員" –> "知識" –> "事件類型"。3001
  2. 點選 "新增類型"。
    3002
  3. 新增事件類型。
    依序輸入下列設定:
    "目的地應用程式" 選取為 "search"。
    "名稱" 輸入為 "sshd_authentication_accepted_whitelisted"。
    "搜尋字串" 設定為 eventtype=sshd_authentication source='/var/log/secure' Accepted
    通常我們會有一些專門用來管理用的 IP 位址,如果我們想要過濾來自這些位址的登入事件,可以將 "搜尋字串" 調整為 eventtype=sshd_authentication source='/var/log/secure' Accepted NOT src_ip=192.168.0.1,其中 192.168.0.1 請修改為你用來進行管理的 IP 位址。如果有多個s管理用的 IP 位址,只要重複 NOT src_ip=aaa.bbb.ccc.ddd 即可。
    設定完畢後請點選 "儲存"。3003
  4. 回到搜尋功能。
    點選右上方 "應用程式" –> "Search"。

  5. 建立查詢條件。
    "搜尋" 輸入 eventtype=sshd_authentication_accepted_whitelisted | fields + dest, src_ip, user | fields - _raw | rename dest AS '目的主機', user AS '帳號', src_ip AS '來源IP'
    眼尖的讀者應該已經發現我們指定的事件類型 (eventtype) 正是我們之前所自定的類型 – sshd_authentication_accepted_whitelisted。

  6. 選擇時間。
    選取 "所有時間" –> "即時" –> "30分鐘間隔"。 
    3005
  7. 儲存查詢指令。
    點選 "儲存" –> "儲存搜尋"。3006
  8. 完成查詢指令的儲存。
    "搜尋名稱" 填入 "登入資訊(三十分鐘即時)" 後按下 "完成" 即可。3008 
  9. 建立儀表板。
    選點 "儀表板和檢視" –> "建立儀表板..."。 3004
  10. 完成儀表板的新增。
    "ID (唯一識別碼,無空白特殊字元)" 填入 "login_realtime_information"。
    "名稱 (顯示於功能表中)" 填入 "即時登入相關資訊"。
    輸入完成後按下 "建立"。3007
  11. 開始編輯儀表板內容。
    選取 "編輯: 開"。

  12. 新增資訊面板。
    點選 "+ 新面板" 開始添加資訊到我們剛剛新增的儀表板。3010
  13. 完成即時登入資訊面板的新增。
    "標題" 填入 "登入資訊(三十分鐘即時)"。
    "搜尋命令" 選擇為 "儲存的搜尋"。
    在下拉式選單中選取 "登入資訊(三十分鐘即時)"。
    設定完成後按下 "儲存"。 3011
  14. 新增其他面板。
    我們可以新增其他資訊面板,例如之前我們分享的即時封鎖資訊。3012
  15. 完成儀表板的設定。 選取 "編輯: 關"。

  16. 產生事件。
    我們可以嘗試產生正常的登入事件或封鎖事件,而這些事件就會即時的呈現在我們剛剛設定完成的儀表板上。
    3009
透過簡單的設定,我們就可以利用 Splunk 來即時監看系統內的登入行為 (正常或非正常)。除了即時呈現之外,還可以透過 Splunk 的分析功能了解這些事件的歷史軌跡。這部份在之前的文章已經分享過,相信各位讀者並不陌生才是。

2012年7月17日 星期二

[工具介紹] 利用 Splunk 收集與分析 fail2ban 的相關數據 (下)


logo_splunk_black_mini
上一篇文章中,我分享了如何利用 Splunk 來收集本機的 fail2ban 相關訊息。我想除非是很特殊的環境,不然絕對不會只有一台提供服務的主機。如果我們有多台需要管理的主機,在每台主機上安裝 Splunk 並分別管理聽起來絕不是一件會令人感到愉快的事情。好在 Splunk 支援許多彈性的佈署方式,而我們今天要介紹的是其中最單純的一種方式,一個 Indexer 加上一個(或多個) Forwarder。
Indexer,就是我們在前一篇文章中所安裝的系統。它會分析收集進來的資料,並透過 Splunk Web 提供使用者操作。Indexer 除了可以收集本機檔案內的資料外,也可以透過其他方式收集遠端的資料。像是我們之前介紹過的 syslog,也是 Splunk 所支援的一種收集方式。除了 syslog 之外,Splunk 還支援自己原生的網路協定,用以收集更多樣化的資訊。為了讓 Indexer 能夠接收到使用原生網路協定遞送的資料,就必須有對應的程式從遠端丟資料到 Indexer,而這個遠端的程式就稱之為 Forwarder。Forwarder 的資料可能來自於本機上的檔案 (或其他本機資源,如機碼),也可能來自於其他的 Forwarder,形成一個資料傳遞的多點路徑。更甚者,Forwarder 也可以將資料丟往多個 Indexer,達到分散處理的效果。
在今天的分享中,我們將會完成下列目標:
  • 安裝一個 Forwarder,並將資訊傳到之前已經安裝完畢的 Indexer。
  • 利用設定檔指定 Forwarder 收集 fail2ban 的訊息。
  • 透過查詢條件過濾非封鎖的相關訊息。
  • 利用查詢時間的限制,即時顯示被封鎖的 IP。
  • 完成儀表板。
在開始今天的步驟前,請先完成上一篇文章中 Indexer 的安裝。除了之前的設定之外,我們還必須進行額外的設定以便讓 Indexer 接受來自 Forwarder 的資料:
  1. 點選 "管理員" –> "資料" –> "轉送與接收"。
    1001
  2. 點選 "新增"。
    1002
  3. 在 "在此連接埠上監聽" 填入你希望 Splunk 使用的 TCP 埠號,我在此使用的是 9997。輸入完成後點選 "儲存"。
    1003
  4. 確認接收程式正確執行
    在 shell 下執行下列指令
    netstat -nlp|grep splunkd
    應該看到下列資訊
    tcp        0      0 0.0.0.0:9997                0.0.0.0:*                   LISTEN      4565/splunkd 
    tcp        0      0 0.0.0.0:8089                0.0.0.0:*                   LISTEN      4565/splunkd 
    tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      4565/splunkd 
    udp        0      0 0.0.0.0:514                 0.0.0.0:*                               4565/splunkd
    其中 9997 是我們剛剛設定使用的 TCP Port。

  5. 設定防火牆。
    為了讓 Forwarder 可以傳送資料到 Indexer,我們必須解除網路的存取限制。以我們的例子而言,就是要讓 Forwarder 可以連接到 Indexer 的 TCP Port 9997。
Indexer 的設定到此告一段落,接下來就輪到 Forwarder 了。Forwarder 需要與 Indexer 安裝在不同的機器上,所以我們需要準備另外一台機器 (我選擇安裝了 CentOS 6.2  的機器),並進行下列設定:
  1. 安裝 fail2ban,並將訊息的輸出方式設定為 /var/log/fail2ban.log。
    這部份可以參考上一篇文章中有關 Indexer 的 fail2ban 安裝說明。

  2. 下載 Splunk Forwarder 安裝程式。
    Splunk Forwarder 安裝程式與 Splunk 不同,必須另外下載。同樣有不同的格式可供下載,請選擇適合你的格式。下載網址是
    http://www.splunk.com/download/universalforwarder/

  3. 安裝 RPM 套件。
    指令是
    rpm –ivh splunkforwarder-4.3.3-128297-linux-2.6-x86_64.rpm
    請把 splunkforwarder-4.3.3-128297-linux-2.6-x86_64.rpm 替換成你實際下載的檔案名稱。預設安裝路徑為 /opt/splunkforwarder。

  4. 修改資料輸入來源的設定檔,檔案名稱是 /opt/splunkforwarder/etc/system/local/inputs.conf。
    加上下列設定
    [monitor:///var/log/fail2ban.log] 
    disabled = false 
    followTail = 0 
    sourcetype = fail2ban 

  5. 修改資料輸出的設定檔,檔案名稱是  /opt/splunkforwarder/etc/system/local/outputs.conf 。
    加上下列設定
    [tcpout] 
    defaultGroup=default_group 
    
    [tcpout:default_group] 
    compressed=false 
    server=192.168.0.100:9997
    其中 192.168.0.100 請改為 Indexer 的 IP 位址。

  6. 啟動 Splunk Forwarder 程式。
    指令為
    /opt/splunkforwarder/bin/splunk start
    第一次執行時請選擇接受授權。

  7. 確認 Forwarder 與 Indexer 已經正確地連接。
    我們可以查看 Splunk Forwarder 的日誌檔,檔案位置是 /opt/splunkforwarder/var/log/splunkd.log。
    如果看到類似下列的訊息,表示 Forwarder 已經正確地連接上 Indexer。
    07-12-2012 13:22:25.816 +0800 INFO  TailingProcessor - Parsing configuration stanza: batch://$SPLUNK_HOME/var/spool/splunk/...stash_new. 
    07-12-2012 13:22:25.816 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/etc/splunk.version. 
    07-12-2012 13:22:25.816 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/var/log/splunk. 
    07-12-2012 13:22:25.816 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/var/log/splunk/splunkd.log. 
    07-12-2012 13:22:25.817 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor:///var/log/fail2ban.log. 
    07-12-2012 13:22:25.817 +0800 INFO  BatchReader - State transitioning from 2 to 0 (initOrResume). 
    07-12-2012 13:22:25.818 +0800 INFO  WatchedFile - Will begin reading at offset=806 for file='/var/log/fail2ban.log'. 
    07-12-2012 13:22:25.831 +0800 INFO  TcpOutputProc - Connected to idx=192.168.0.100:9997
    但是如果看到類似下列訊息,則表示連接失敗。通常比較有可能的原因是防火牆的設定錯誤,請仔細檢查後修改相關設定。
    07-12-2012 13:03:14.453 +0800 INFO  TailingProcessor - Parsing configuration stanza: batch://$SPLUNK_HOME/var/spool/splunk/...stash_new. 
    07-12-2012 13:03:14.453 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/etc/splunk.version. 
    07-12-2012 13:03:14.453 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/var/log/splunk. 
    07-12-2012 13:03:14.453 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor://$SPLUNK_HOME/var/log/splunk/splunkd.log. 
    07-12-2012 13:03:14.453 +0800 INFO  TailingProcessor - Parsing configuration stanza: monitor:///var/log/fail2ban.log. 
    07-12-2012 13:03:14.453 +0800 INFO  BatchReader - State transitioning from 2 to 0 (initOrResume). 
    07-12-2012 13:03:14.467 +0800 INFO  TcpOutputProc - Connected to idx=192.168.0.100:9997 
    07-12-2012 13:03:14.467 +0800 INFO  TcpOutputProc - Connection to 192.168.0.100:9997 closed. Connection closed by server. 
    07-12-2012 13:03:14.541 +0800 INFO  TcpOutputProc - Connected to idx=192.168.0.100:9997 
    07-12-2012 13:03:14.541 +0800 INFO  TcpOutputProc - Connected to idx=192.168.0.100:9997 
    07-12-2012 13:03:14.543 +0800 WARN  TcpOutputProc - Write to 192.168.0.100:9997 failed. Write failed. Broken pipe 
    07-12-2012 13:03:14.543 +0800 WARN  TcpOutputProc - Applying quarantine to idx=192.168.0.100:9997 numberOfFailures=2 
    07-12-2012 13:03:44.375 +0800 INFO  TcpOutputProc - Removing quarantine from idx=192.168.0.100:9997

  8. 尋找另外一台機器,並嘗試錯誤登入 Forwarder 一直到被 fail2ban 封鎖為止。
    請勿從 Indexer 嘗試登入錯誤,否則 Indexer 的 IP 會被封鎖掉,資料也就送不過去了。

Forwarder 至此已經設定完畢,我們回到安裝於 Indexer 的 Splunk Web 上進行後續的操作。例如當我們下了 sourcetype="fail2ban" 的查詢條件後,應該就可以看到剛剛 fail2ban 封鎖的相關訊息了。在實務的應用上,我們可以在所有需要管理的主機上安裝 Forwarder,並將這些 Forwarder 的資訊通通丟向 Indexer。除非你有大量的數據需要分析,否則一個 Indexer 就可以滿足需求了。

fail2ban 的日誌內容除了封鎖的訊息之外,還包含了解除封鎖以及運作時的狀態訊息。後面這些資料並不是我們目前感到興趣的,我們可以利用查詢條件過濾掉這些不感興趣的資訊:
sourcetype="fail2ban" Ban | rex field=_raw "Ban (?<client_ip>.*)" | rename client_ip as ClientIP
透過這些條件,我們可以過濾出封鎖的訊息,並取出被封鎖 IP 的資訊 (client_ip)。

除了取出被封鎖的 IP,我們還可以進一步針對個別 IP 被封鎖的次數做個排名:
sourcetype="fail2ban" Ban | rex field=_raw "Ban (?<client_ip>.*)" | stats count BY client_ip | sort -count | rename client_ip AS '遠端IP', count AS '數量'

如果我們要列出封鎖次數的趨勢,也可以透過下列查詢指令:
sourcetype="fail2ban" Ban | timechart count | rename count AS '數量'

不管我們輸入的條件為何,我們都可以透過查詢欄位後方的時間選擇器來指定我們想要查詢的時間區段。除了可以用來指定過去某段時間之外,更可以用來指定 "即時" 的時間區段 (例如 "即時1分鐘間隔")。透過這樣的指定,Splunk 將會隨時更新符合條件的資訊,並立即顯示於查詢結果當中。

透過這些查詢條件的應用,我們可以產生極具使用價值的 fail2ban 儀表板 (儀表板的設定並不複雜,但是步驟較多,所以我在此就先略過了)。在第一個範例中,包含了總共發生封鎖的次數、封鎖事件趨勢圖、主機觸發封鎖次數的排行榜、以及被封鎖 IP 的排行榜等資訊。
1004

在第二個儀表板的範例中,列出的資訊類型與第一個儀表板大同小異,只是把資料的時間限定於當日之內,並把排行榜用其他方式(如長條圖與圓餅圖)的方式加以呈現。只要透過簡單的設定,Splunk 就可以將查詢到的資料就不同的方式加以呈現,在製作儀表板時確實相當的方便。在第二個儀表板範例中,最值得注意的是我們加入了兩個 "即時" 資訊,一個是 "即時" 封鎖的資訊,一個是 "即時" 的日誌記錄。透過這個儀表板,我們就可以隨時掌握環境中有關 fail2ban 的最新狀況,不再發生對環境毫無掌握的窘境。
2006

透過 Splunk 的儀表板,我們不但可以即時掌握最新的攻擊狀態,還可以了解過去的趨勢。這些數據對於建置一個完整且主動的防禦機制,都將是不可或缺的寶貴資訊。

2012年7月16日 星期一

[工具介紹] 利用 Splunk 收集與分析 fail2ban 的相關數據 (上)


logo_splunk_black_mini在之前的文章中,我提到可以利用 fail2ban 這個套件來避免系統遭受暴力嘗試登入的攻擊。只要設定無誤,當你佈署 fail2ban 一段時間之後就會發現原來真的有這麼多人很"無聊",沒事就到處敲門,想要當個便宜的駭客。對一般的管理者而言,其實這樣做也就夠了。但是如果你是一個好奇的管理員,或者你同時管理了許多的系統,你可能就需要更多的資訊來幫助你做好管理的工作。我們可以透過日誌管理系統或是功能更為強大的知識管理系統來收集並分析相關數據,而我今天要跟各位分享的就是這麼一份收集與分析資訊的好工具 – Splunk。
Splunk 簡單來說,就是幫助使用者收集各式各樣的 IT 相關資料,並加以彙整後從中取得有用的資訊。別看說明這麼簡單就以為 Splunk 只是個小玩意,Splunk 本身可是一個很複雜的系統。除了強大的分析能力與眾多的外掛模組,Splunk 並支援相當彈性的佈署方式,以因應數量龐大的 IT 資料。這麼好的工具,當然是所費不貲,好在 Splunk 有提供免費使用的版權,比較大的限制就是每天只能收集 500MB 的資料。別看 500 MB 數字很大,對於多系統的環境,500 MB 實在是不夠塞牙縫。不過如果是有特定的目的,500 MB 還是有可能給予我們不少的幫助。除了 500 MB 的限制之外,免費版權的 Splunk 也不支援認證功能。因此想要使用的人,可得好好限制可以存取 Splunk 介面 (Web 形式,預設採用 TCP Port 8000) 的 IP 了,免得變成 IT 資料全都露。
在接下來的兩篇文章中,我會跟各位分享如何將 fail2ban 的資訊整合到 Splunk 當中,以提供更具價值的即時資訊與歷史分析能力。在第一篇文章中,我會採用較為簡單的單機作業模式。而第二篇文章則著重在同時管理多個系統的佈署方式以及報表功能。
廢話不多說,同樣來一步步完成今天的任務吧。今天我準備的環境是 CentOS 6.2 64 位元的版本,步驟完成後我們就可以利用 Splunk 來找出所有過去曾被本系統上的 fail2ban 套件所封鎖的 IP 了。
  1. 下載 Splunk 安裝程式。
    Splunk 提供多種安裝格式,其中包含 RPM 的套件,所以我們直接選擇 64 位元的 RPM 檔案即可。下載網址是
    http://www.splunk.com/download
  2. 安裝 RPM 套件。
    指令是
    rpm –ivh  splunk-4.3.3-128297-linux-2.6-x86_64.rpm
    請把 splunk-4.3.3-128297-linux-2.6-x86_64.rpm 替換成你實際下載的檔案名稱。預設的安裝路徑為 /opt/splunk。
  3. 設定防火牆。
    通常我們會透過瀏覽器來操作稱之為 Splunk Web 的使用者介面,而 Splunk Web 預設使用 TCP Port 8000。如果我們想要從遠端操作系統上的 Splunk Web,就必須設定防火牆並取消相關的存取限制。
  4. 啟動 Splunk。
    指令為
    /opt/splunk/bin/splunk start
  5. 設定 splunk 開機後自動啟動。
    修改 /etc/rc.local,加上下列設定:
    /opt/splunk/bin/splunk start
  6. 連結 Splunk Web 並登入 Splunk。
    開啟瀏覽器並連結 Splunk Web,Splunk Web 預設透過 TCP Port 8000 提供服務。雖然免費授權的 Splunk 不支援帳號認證的功能,但是 Splunk 預設提供 60 天的試用授權,因此在這段期間還是必須使用帳號/密碼進行登入。預設的帳號/密碼是 admin/changeme,登入後請記得馬上改掉預設的密碼。
  7. 安裝 fail2ban。
    如果你的系統還沒有安裝 fail2ban 這個套件,請先參考我之前的另外一篇文章並完成 fail2ban 的安裝。
  8. 修改 fail2ban 的設定。
    在預設的情況下,fail2ban 會將相關訊息透過 syslog 機制寫入系統的日誌檔之中。以 CentOS 的環境來說,這些訊息會被寫入 /var/log/messages。為了讓 Splunk 能夠抓取到 fail2ban 的相關訊息,我們有下列幾種選擇:
    1. 修改 syslog 的設定,將 fail2ban 的相關訊息寫入獨立的日誌檔。
    2. 設定 Splunk 直接抓取 /var/log/messages 內的資訊,並過濾掉不相關的訊息。
    3. 直接設定 fail2ban 將相關訊息寫入獨立的日誌檔。
    在此我採用第 3 個做法,在設定檔 /etc/fail2ban/fail2ban.local 內加入下列設定
    [Definition]
    logtarget = /var/log/fail2ban.log
  9. 重新啟動 fail2ban。
    指令是
    service fail2ban restart
  10. 設定 Splunk 的資料來源。
    接下來的幾個步驟,就是這篇分享的重點,也就是設定 Splunk 取得並分析 fail2ban 的相關訊息。首先點選 "管理員" –> "資料" –> "資料輸入"。0001

  11. 點選 "檔案與目錄"。
    0002

  12. 點選 "新增"。
    0003

  13. 選取 "Skip preview" 後點選 "Continue"。0004

  14. 依據完成下列設定。
    "指令來源" 選取 "從此 Splunk 執行個體可存取的檔案或目錄持續檢索資料"。
    "您資料的完整路性" 設定為 "/var/log/fail2ban.log"。
    勾選 "更多設定"。
    "設定來源類型" 選取為 "手動設定"。
    "來源類型" 設定為 "fail2ban"。
    設定完成後點選 "儲存"。0005

  15. 尋找另外一台機器,並嘗試錯誤登入這個系統一直到被 fail2ban 封鎖為止。

  16. 選取右上角選單的 "應用程式" –> "Search"。
    在"搜尋"欄位輸入下列字串:
    sourcetype="fail2ban"
    按下 Enter 後就可以看到剛剛 fail2ban 封鎖的相關訊息了。 0006
透過幾個簡單的設定,我們就可以在 Splunk Web 中看到 fail2ban 套件運作的所有相關訊息。這樣的用途看起來確實還不夠有趣,也尚未發揮到任何 Splunk 的特色。別急,下一篇的分享絕對會讓你對 Splunk 有完全不一樣的看法。

About