本文利用zabbix的日誌監控功能監控Linux的secure日誌,當有用戶登陸失敗或者用戶在很是規時間登錄成功時發出告警。web
這裏咱們使用zabbix提供的'log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]'來監控Linux的/var/log/secure文件。先介紹下這個log監控項:正則表達式
1)監控項類型是Zabbix agent (active),返回數據類型是Log。數據庫
2)Zabbix agent要對監控的日誌文件有可讀權限,不然會返回unsupported。bash
3)參數介紹:app
file - 日誌文件的全路徑。
regexp - 過濾日誌的正則表達式。
encoding - 字符編碼,默認爲英文單字節SBCS(Single-Byte Character Set)。
ide
maxlines - agent每秒發送給server(或proxy)的數據的最大行數,這個參數會覆蓋掉zabbix_agentd.conf配置文件裏的'MaxLinesPerSecond'參數。編碼
mode - 可填參數:all(默認),skip(跳過舊數據)。
output - 自定義格式化輸出,默認輸出regexp匹配的整行數據。轉義字符'\0'表示regexpspa
匹配的數據,轉義字符'\N'(N=1..9)表示regexp裏第N個分組匹配到的數據。若是填其餘字符串就會覆蓋掉regexp匹配的數據。3d
下面先展現下成果,而後介紹操做步驟:日誌
歷史數據展現:
告警郵件展現:
1、建立日誌監控item
選擇「Template OS Linux」模板,建立監控項item,配置以下:
Name - 填"Login attempt"
Type - 選擇Zabbix agent (active)
Type of information - 數據類型選擇Log
Update interval (in sec) - 監控間隔60秒
Key - 填寫以下:
log[/var/log/secure,"(Accepted|Failed) password",,,skip,]
正則表達式爲"(Accepted|Failed) password",過濾/var/log/secure中的正確或失敗的用戶登陸請求(這裏只過濾密碼驗證方式的登陸)。
2、建立觸發器trigger
咱們繼續選擇「Template OS Linux」模板,爲上面的監控項建立觸發器。
一、用戶登陸失敗的觸發器配置
Name - 填"Login attempt has failed"
Expression - 填寫以下:
{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].str(Failed)}=1&{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].nodata(60)}=0
表達式的含義爲:若是用戶登陸失敗了,item返回數據中會包含"Failed",則觸發器被觸發,60秒內沒有新數據的話,觸發器恢復。這樣就保證了觸發器不會一直在觸發狀態。
下面把表達式拆解分析:
A:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].str(Failed)}=1,表示若是字符串中包含"Failed"則表達式爲真。
B:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].nodata(60)}=0,表示60秒內有數據產生則表達式爲真,即60秒內若是沒有新數據了,則表達式爲假。
邏輯爲A & B,表示同時符合A、B兩個條件(同時爲真),觸發器纔會觸發。
二、用戶在很是規的時間登陸成功的觸發器配置
Name - 填"Login attempt has accepted"
Expression - 填寫以下:
{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].str(Accepted)}=1&{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].nodata(60)}=0&({Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].time(0)}<080000|{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].time(0)}>200000)
表達式的含義爲:晚上20點到早上8點之間若是有用戶登陸成功了,item返回數據中會包含"Accepted",則觸發器被觸發,60秒內沒有新數據的話,觸發器恢復。
下面把表達式拆解分析:
A:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].str(Accepted)}=1,表示若是字符串中包含"Accepted"則表達式爲真。
B:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].nodata(60)}=0,表示60秒內有數據產生則表達式爲真,即60秒內若是沒有新數據了,則表達式爲假。
C:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].time(0)}<080000,表示當前時間小於8點(08:00:00)則表達式爲真。
D:{Template OS Linux:log[/var/log/secure,"(Accepted|Failed) password",,,skip,].time(0)}>200000,表示當前時間大於晚上8點(20:00:00)則表達式爲真。
邏輯爲A & B & (C | D),表示A和B要同時爲真且C和D只要一個爲真,則整個表達式爲真,觸發器纔會觸發。
這樣「Template OS Linux」模板咱們就配置好了,下面配置Linux agent客戶端。
3、Linux客戶端配置
一、保證兩個Hostname一致
第一個Hostname是指zabbix_agentd.conf配置文件中的"Hostname"參數;第二個Hostname是指主機配置裏的"Host name"。
這兩個配置要相同,由於agent是以"Hostname"爲參數向server發送"active checks"請求,server收到請求,到數據庫裏找到相同的名稱的主機後,向agent返回active類型的監控項列表。agent根據這個item list進行監控,收集數據,並主動把數據推送給server。
具體請看官方文檔:https://www.zabbix.com/documentation/2.2/manual/appendix/items/activepassive#active_checks
二、設置ServerActive參數
agent向哪一個server發送"active checks"請求是由配置文件中的"ServerActive"參數決定的。"ServerActive"定義了zabbix server的ip和端口。
三、設置日誌文件的權限
/var/log/secure的權限通常是600,zabbix agent對此文件沒有權限。zabbix用戶是agent的啓動用戶,因此咱們要設置zabbix用戶對/var/log/secure有可讀權限,這樣agent才能監控。
執行下面的命令,追加zabbix的可讀權限:
setfacl -m u:zabbix:r-- /var/log/secure
四、修改logrotate配置
sed -i '/kill/a\/usr\/bin\/setfacl -m u:zabbix:r-- \/var\/log\/secure' /etc/logrotate.d/syslog
agent上要注意的配置就是這些了。修改完配置文件後要重啓agent。
最後,咱們還要在zabbix web上設置"Actions",定義告警操做,設置告警收件人。這樣發生告警後,相關的收件人會收到告警郵件。