網管人員如果能夠即時發現設備發生異常狀態,就可提早一步進行前置處理,從而減少許多潛在的威脅。Cacti是一款常見的網路管理工具,為了讓它更利於使用,可以善用網路服務平台IFTTT,來增加它原本不具備的LINE訊息告警機制,讓網路管理更即時。
由於Cacti是較早發展的網路管理工具,因此有許多功能在當初設計的時候並未提供,本文將示範如何在變動Cacti原始碼最小的狀況下新增LINE告警的功能。
操作環境說明
在開始之前,先說明將會使用到的軟體工具Cacti和IFTTT。關於Cacti,在此假設目前已自行將Cacti安裝完成,並能正常使用Thold功能(可透過Thold發送告警信),只須簡單地加入幾行的程式,就可以達到使用LINE傳訊的功能。
IFTTT(命名源由是if this, then that)是一個網路服務平台,可透過其他不同平台的條件來決定是否執行下一條命令,這裡會使用到的是Webhook,它在接到Web Request之後可以讓LINE執行Send Message功能。
簡單來說,IFTTT就是一個中介平台,可以把兩個不同的平台加以串接與結合來滿足使用的需求。
在此例中,將使用LINE發訊息,同樣地也可以替換為用Facebook貼文或用IG貼圖。
實際操作示範
首先,連上IFTTT的官方網址(https://ifttt.com/)。在使用IFTTT之前,必須先註冊帳號。註冊後登入網站,再點選左上角的「My Applets」,如圖1所示。
接著,按一下右上角的〔New Applet〕,如圖2所示。
如圖3所示,接著點選網頁中「if + this then that」裡的「+」號,以新增一個來源條件。
在搜尋視窗中輸入「webhooks」,如圖4所示。下方的圖示也會自動變成Webhooks的圖示,立即點選該圖示。
接著,按一下〔Connect〕進行連結,如圖5所示。
然後是Choose trigger,設定觸發條件,點選畫面左方的「Receive a web request」,如圖6所示。
接著,設定Event的名稱。如圖7所示,先輸入「cacti」,再按一下〔Create trigger〕按鈕。
接下來,設定Trigger被觸發後要執行的工作。在建立Trigger後,IFTTT會回到建立Applet的頁面,此時點選then後面的「+」號,如圖8所示。
緊接著,選擇要執行的程式,在Choose action service部分,輸入「line」,然後點選LINE圖示,如圖9所示。
隨後需要建立與LINE的連結,按一下圖10中的〔Connect〕按鈕。
如圖11所示,LINE會開啟一個新網頁,要求使用者輸入帳號和密碼驗證身分。
成功登入之後,LINE會自動帶出連動的確認頁面,在此點選〔同意並連動〕,如圖12所示。
接下來,要選擇想執行的動作,這裡能夠選擇的只有「Send message」,如圖13所示。
然後,就可以設定要收訊息的對象(Recipient欄位)以及訊息的格式(Message),如圖14所示。
在此必須注意,LINE亦可設定發訊息給群組,點選「Recipient」可看到其他群組名稱。此時若加以點選,就可以設定將訊息發給該群組,如圖15所示。
另外,在訊息的部分,也可以按照實際的需求做調整。例如將Value2和Value3移除,並加上「OccuredAt」欄位,如此一來,LINE就可以將傳訊的時間也加在訊息裡,如圖16所示。
設定完成後,再點選圖14最下方的〔Create action〕,完成此動作的建立。
接著會看到如圖17的頁面,然後再按一下〔Finish〕按鈕,完成此項操作。
最後要取出Key,以便Webhooks接受Request時可進行身分驗證。在上方的搜尋列輸入「webhook」並按下右側的Enter圖示,如圖18所示。
接下來,先點選切換至Services畫面,再選擇下方的Webhooks圖示,如圖19所示。
然後,如圖20所示,點選右方的「Settings」以取得相關設定。
最後,在「URL」的部分就會看到「https://maker.ifttt.com/use/thisisyourkey」,如圖21所示,thisisyourkey就是在發送Web Request需要帶的Key。請將這串Key備份下來,之後將會使用到。這串Key是由英文大小寫及數字符號所組成的,此處只是用簡單的字串取代,請在使用時按照實際情形進行調整。
加入LINE Notify
在LINE的部分,必須加入LINE Notify此官方帳號才能收到訊息。要將「LINE Notify」加入好友,這部分的操作請參考LINE官方網頁的說明,該網頁連結如下所示:
https://help2.line.me/line_notify/web/?lang=zh_TW
以下內容節錄自LINE官網:只要於ID搜尋欄位中輸入「@linenotify」並進行搜尋,即可將「LINE Notify」官方帳號加入好友。
首先,在LINE應用程式內依序點選「加入好友」→「ID/電話號碼」後,輸入「@linenotify」並進行搜尋。然後,點選「加入」即可。加入好友的畫面,如圖22所示。
在此要提醒一下,如果要發訊息到群組,該群組需要邀請LINE Notify這個使用者加入群組成員。
到Cacti Server做設定
首先要記得安裝php-curl套件,在此以Ubuntu 18.04為例:
sudo apt-get install php-curl
接著,下載所需程式,筆者已經放在github上,相關網址如下:
https://github.com/tiserle/cacti_thold_line
下載line.php和ifttt-php.class.php這兩支程式,並放在Cacti的「plugins/thold」目錄中。
如果有資安疑慮的話,建議先看一下程式碼,內容相當淺顯易懂。請將line.php中的putyourkeyhere替換成之前所備份的Key。
需修改的部分,在cacti 0.8x及1.x均相同。編緝thold_functions.php,接著找到「function thold_mail」這一行,在這個Function最後的「return '';」上方加入以下程式碼:
require_once('line.php'); list($a,$b,$c) = explode("Mes sage:",$text['text']); line($b,”null”,”null”);
新增程式碼之後,記得先存檔再離開。如果之前已經設定Thold發送告郵件,此時便會一併發送LINE的告警訊息,如圖23所示。
結語
在本文中,利用IFTTT平台,可讓原本無法做到LINE訊息告警的Cacti也能提供此項功能。
讀者亦可自行結合其他套件以觸發所需的告警至各平台軟體或App,對於設備狀態的掌握將更具時效性,更能提早一步發現設備的異常而進行前置處理,從而減少潛在的威脅。
<本文作者:丁光立,在ISP工作多年。對於Cisco設備較熟悉,除此之外也研究Linux,這幾年慢慢把觸角伸到資安的領域,並會在自己的blog(http://tiserle.blogspot.com/)分享一些實務上的經驗和測試心得。>