隨時掌握處理程序、對外連線狀態、系統記憶體、使用者資訊、歷史指令等系統資源,是系統管理者最重要的工作內容。本文將介紹一套開源碼系統管理工具osquery,讓管理者可以透過關連式資料庫的SQL語法來隨時查看所需的系統資源相關資訊。
查看系統記憶體相關資訊
在系統內,記憶體的重要性是無庸置疑的,因此通常都會注意記憶體的使用狀況,在系統內可利用free指令來查看系統內的記憶體相關資訊,free指令常用的組態選項如下:
-b:輸出資訊以位元組(Bytes)為單位。
-k:輸出資訊以Kilobytes為單位。
-m:輸出資訊以Megabytes為單位。
-g:輸出資訊以Gigabytes為單位。
--tera:輸出資訊以Terabytes為單位。
-h:輸出易於閱讀的資訊。
可利用「free -h」指令來取得記憶體目前的使用狀況,執行結果如圖6所示。在osquery中,可利用memory_info資料庫表格來顯示系統內記憶體的使用資訊,可執行「select * from memory_info;」指令取得相關資訊,如圖7所示,相關欄位說明如表3所示。
|
▲圖6 取得記憶體目前的使用狀況。 |
|
▲圖7 顯示系統內記憶體的使用資訊。 |
表3 欄位名稱說明
運用Netfilter/Iptables機制
Netfilter/Iptables是Linux系統最有名的防火牆軟體,其中Netfilter為核心模組機制。利用各式的核心模組以掛?(Hook)的方式,將模組掛?於核心處理封包的流程中,並利用檢查點(Hook Point)機制,針對通過的封包實施檢查及過濾。Netfilter提供以下五個檢查點,其系統架構如圖8所示。
|
▲圖8 系統架構示意圖。 |
1. PREROUTING:當外來封包進入至本機時,便會經過PREROUTING檢查點,這也是封包進入後所遇到的第一個檢查點。接下來,檢查封包是否已到達目的主機,如果確定已到達主機,則會進入INPUT檢查點,否則將進入FORWARD檢查點,轉發至其他主機。
2. INPUT:當外來封包發現已到達目標主機時,就會進入本機並經過INPUT檢查點,否則便進入FORWARD檢查點,轉發至其他主機,並繼續往下個目標主機前進。
3. OUTPUT:當外來封包經由本機發出,便會經過OUTPUT檢查點。
4. FORWARD:如果外來封包發現並非到達目標主機,就會經過FORWARD檢查點。
5. POSTROUTING:當外來封包要離開系統主機時,便會經過POSTROUTING檢查點,這也是外來封包進入後所遇到的最後一個檢查點。
而iptables則是用來操控Netfilter機制設定防火牆規則的使用者應用程式。其設定規則是以表格(Table)及規則鏈(Chain)的概念來設定,Netfilter總共提供以下三個表格及五個規則鏈。
Filter:主要提供封包過濾,可過濾TCP、UDP、MAC、ICMP等類型封包,包含INPUT、forward、output等規則鏈。
NAT:提供SNAT和DNAT等功能,可用來IP偽裝,讓網域內的多台電腦可共用一個公共IP上網。本表格包含prerouting、postrouting、out等規則鏈。
mangle:此表格主要用來修改封包內容,其中包含PREROUTING、POSTROUTING、FORWARD、INPUT、OUTPUT等規則鏈。
接著,簡單講解iptables的語法結構,各項參數說明如下:
iptables [-t table] command
[match][-j target/jump]
[-t table]:用來指定要設定那個表格的規則,如未指定,即預設為filter。
Command:命令,通常後會接規則鏈名稱。常用的命令包括:-A(在指定的規則鏈之後新增一個規則)、-D(在指定的規則鏈之後刪除一個規則)、-F(清除規則)、-L(顯示規則)。
[match]:比對條件。常用的比對條件包括:-d(指定套用規則的目的主機或IP位址)、-I(指定當封包進入FORWARD OUTPUT或POSTROUTING所通過的網路介面名稱,如eth0)。