本文章內容:
設定Linux異常登錄告警。
參考資料:https://www.twblogs.net/a/5b9579d32b717750bda469d4
利用zabbix的日志监控功能监控Linux的secure日志(/var/log/secure),当有用户登录失败或者用户在非常规时间登录成功时发出告警。
1. 創建item
1.1 在要被監控的主機創建新item
1.2 設定item
Key生成說明:
.a. 點Select
b. 選擇"log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>]"
- file:日誌文件的全路徑。
- regexp:過濾日誌的正則表達式。
- encoding:字符編碼,默認爲英文單字節SBCS(Single-Byte Character Set)。
- maxlines:agent每秒發送給server(或proxy)的數據的最大行數,這個參數會覆蓋掉zabbix_agentd.conf配置文件裏的'MaxLinesPerSecond'參數。
- mode:可填參數:all(默認),skip(跳過舊數據)。
- output:自定義格式化輸出,默認輸出regexp匹配的整行數據。轉義字符''表示regexp匹配的數據,轉義字符'N'(N=1..9)表示regexp裏第N個分組匹配到的數據。如果填其他字符串就會覆蓋掉regexp匹配的數據。
c. 將Key修改成"log[/var/log/secure,(Accepted|Failed) password,,,skip,,,]"
regexp填"(Accepted|Failed) password"表示過濾/var/log/secure日誌中的正確或失敗的用戶登錄請求(這裏只過濾密碼驗證方式的登錄)。成功、失敗登錄在/var/log/secure日誌文件中會有Accepted password、Failed password字眼。
2. 創建trigger
2.1 用戶登錄失敗的觸發器配置
2.1.1 在要被監控的主機創建新trigger
2.1.2 設定trigger
Expression生成說明:
表達式的含義爲:如果用戶登錄失敗了,item返回數據中會包含"Failed",則觸發器被觸發。60秒內沒有新數據的話,觸發器恢復,這樣就保證了觸發器不會一直在觸發狀態。
A條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].str(Failed)}=1,表示如果字符串中包含"Failed"則表達式爲真。
B條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].nodata(60)}=0,表示60秒內有數據產生則表達式爲真,即60秒內如果沒有新數據了,則表達式爲假。
邏輯爲A and B,表示同時符合A、B兩個條件(同時爲真),觸發器纔會觸發。
a. 點Add
b. item選擇Login attempt(1.創建的item)、Function選擇"str() - Find string V in last (most recent) value (1 - found, 0 - not found)、V填Failed、Result填1
c. 再點Add
d. item選擇Login attempt(1.創建的item)、Function選擇"nodata() - No data received during period of time T (1 - true, 0 - false), Mode (strict - ignore proxy time delay in sending data)、Last of (T)填60、Result填0
e. 在第1和2的Expression之間加上and,表示第1和2符合才觸發
2.2 用戶在非常規的時間登錄成功的觸發器配置
2.2.1 在要被監控的主機創建新trigger
2.2.2 設定trigger
Expression生成說明:
表達式的含義爲:晚上20點到早上8點之間如果有用戶登錄成功了,item返回數據中會包含"Accepted",則觸發器被觸發,60秒內沒有新數據的話,觸發器恢復。
A條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].str(Failed)}=1,表示如果字符串中包含Accepted "則表達式爲真。
B條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].nodata(60)}=0,表示60秒內有數據產生則表達式爲真,即60秒內如果沒有新數據了,則表達式爲假。
C條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].time()}<080000,表示當前時間小於8點(08:00:00)則表達式爲真。
D條件:{zabbix-server:log[/var/log/secure,(Accepted|Failed) password,,,skip,,,].time()}>200000,表示當前時間大於晚上8點(20:00:00)則表達式爲真。
邏輯爲A & B & (C | D),表示A和B要同時爲真且C和D只要一個爲真,則整個表達式爲真,觸發器纔會觸發。
a. 點Add
b. item選擇Login attempt(1.創建的item)、Function選擇""str() - Find string V in last (most recent) value (1 - found, 0 - not found)、V填Accepted、Result填1
c. 再點Add
d. item選擇Login attempt(1.創建的item)、Function選擇"nodata() - No data received during period of time T (1 - true, 0 - false), Mode (strict - ignore proxy time delay in sending data)、Last of (T)填60、Result填0
e. 再點Add
f. item選擇Login attempt(1.創建的item)、Function選擇"time() - Current time、Result選擇"<",值填080000
g. 再點Add
h. item選擇Login attempt(1.創建的item)、Function選擇"time() - Current time、Result選擇">",值填200000
i. 在第1和2和3的Expression之間加上and,在第3和4的Expression之間加上or,把第3和4用()括起來,表示第1和2符合以及3或4其中之一符合才觸發
3. 設定/var/log/secure日誌文件的權限
/var/log/secure的權限一般是600,zabbix agent對此文件沒有權限。zabbix用戶是agent的啓動用戶,所以我們要設置zabbix用戶對/var/log/secure有可讀權限,這樣agent才能監控。
3.1 執行 setfacl -m u:zabbix:r-- /var/log/secure
# setfacl -m u:zabbix:r-- /var/log/secure
# getfacl /var/log/secure
getfacl: Removing leading '/' from absolute path names
# file: var/log/secure
# owner: root
# group: root
user::rw-
user:zabbix:r--
group::---
mask::r--
other::---