以管理主機群來說,一個很重要的監測項目就是我們必須確保沒有多餘的服務在有意或無意下被開啟了,也必須確保沒有不必要的設備被接上了主機群所在的網路。後者對於一個實體管理嚴格的機房來說,或許是很難發生的狀況。但是以現今虛擬化的資訊環境來看,接上一台不被允許的"設備",卻再也不需要"出現在現場"才有可能達成了。今天要跟各位分享的這個工具 – OpenNMS,支援 SNMP 協定,可以用來抓取各項重要的資訊 (如網路介面流量數據) 並繪製為圖表。除了這個功能外,更重要的是 OpenNMS 可以定期掃描網路上 IP 的使用狀況,以及這些設備上所開啟的 (網路) 服務。一旦發現 IP 位址或 (網路) 服務情況有所變動,就可以透過各式各樣的通知機制通知管理者,以做出必要的因應之策。
OpenNMS 的監測機制,除了透過主動掃描以發現任何異動外,還支援 L2/L3 對應的能力。我們都知道,在常見的網路中,每個網路介面都具備兩種位址,一種是所謂的 MAC 位址,另外一種則是 IP 位址。MAC 與 IP 的對應關係,通常記錄於設備 (主機、交換器等) 的 ARP 快取表當中。而對於交換器而言,通常還會另外維護一份稱之為 CAM 表的資料。在 CAM 表當中,記載了 MAC 位址與交換器埠的對應關係,以達到封包交換的目的。CAM 表的存在,讓交換器不需要像集線器般使用廣播方式來傳送封包。OpenNMS 可以透過 SNMP 協定查詢網路設備的 ARP 快取表與 CAM 表,並記錄之間的關係,也就是說我們可以利用 OpenNMS 了解某個交換器上的某個埠接了哪些設備及其使用的 IP 位址。這些資料不只對於管理主機群時很重要,對於管理用戶端來說更是重要。因為用戶端通常處於開放且動態的實體環境,再加上用戶端系統的安全管理通常不如主機群般嚴謹,所以監控用戶端的網路連結情形絕對馬虎不得。事實上,這類資料就是屬於新版個資法中定義的軌跡資料,對於日後舉證需求將有莫大的助益。
不過可惜的是,OpenNMS 預設並沒有開啟 L2/L3 對應的功能,所以我們需要修改設定檔才能獲得這樣的資訊。這個設定檔的位置是
$OPENNMS_HOME$/etc/service-configuration.xml
對以 rpm 方式安裝的 OpenNMS 而言,這個檔案的實際位置是/opt/opennms/etc/service-configuration.xml
將下列這段文字取消註解即可:
<service>
<name>OpenNMS:Name=Linkd</name>
<class-name>org.opennms.netmgt.linkd.jmx.Linkd</class-name>
<invoke at="start" pass="0" method="init"/>
<invoke at="start" pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
記得要重新啟動 opennms 服務才會使修改後的設定生效。服務重新啟動後,我們可以透過指令
service opennms –v status
來查看服務的執行狀態。如果看到下列訊息,表示 L2/L3 對應的功能已經正常啟動了。
...
OpenNMS.Statsd : running
OpenNMS.Provisiond : running
OpenNMS.Reportd : running
OpenNMS.Alarmd : running
OpenNMS.AsteriskGateway: running
OpenNMS.Ackd : running
OpenNMS.JettyServer : running
OpenNMS.Linkd : running
opennms is running
一旦啟動 L2/L3 對應功能後,我們就可以在交換器節點 (Node) 的畫面看到如下的連結 (註一): 點下連結 View Node Link Detailed Info 就可以看到詳細的交換器埠使用狀況:
除了用表列的呈現方式,OpenNMS 也提供網路拓撲圖的呈現方式。透過網路拓撲圖,我們不但可以看到設備的連結關係,更可以即時看到各連結關係的狀態,方便管理者隨時掌握網路的狀態。OpenNMS 讓管理者可以確實掌握網路環境中 IP/MAC/Switch Port 的使用狀況,不管是任何未經授權的使用或變更,都將無所遁形。
註一:重新啟動服務後,需要很長的一段時間才會看到相關的資訊。我一直到隔天才看到資訊出現。