明明白白你的Linux服務器--日誌篇

日誌對於安全來說,非常重要,它記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到***時***者留下的痕跡。日誌主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等。正因爲如此,撫琴煮酒特的將它整理成一篇比重跟硬件篇網絡篇並列的文章,希望大家能從中學習到對自己有用的東西。

一、配置syslog(gyl4802959同學撰寫)
目前,linux依舊使用syslogd作爲日誌監控進程,對其進行必要的配置能減少很多麻煩,並且可更有效的從系統日誌監控到系統的狀態。理解並完善一個syslog的配置,對於系統管理員來說顯得尤爲重要。
/etc/syslog.conf根據如下的格式定義規則: facility.level action
設備.優先級 動作facility.level 字段也被稱爲seletor(選擇條件),選擇條件和動作之間用空格或tab分割開。
#號開頭的是註釋,空白行會自動跳過。
1、facility
facility定義日誌消息的範圍,其可使用的key有: auth -由 pam_pwdb 報告的認證活動。
authpriv -包括特權信息如用戶名在內的認證活動
cron -與 cron 和 at 有關的計劃任務信息。
daemon -與 inetd 守護進程有關的後臺進程信息。
kern -內核信息,首先通過 klogd 傳遞。
lpr -與打印服務有關的信息。
mail -與電子郵件有關的信息
mark - syslog內部功能用於生成時間戳
news -來自新聞服務器的信息
syslog -由 syslog 生成的信息
user -由用戶程序生成的信息
uucp -由 uucp 生成的信息
local0-local7 -與自定義程序使用
* 通配符代表除了 mark 以外的所有功能除mark爲內部使用外,還有security爲一箇舊的key定義,等同於auth,已經不再建議使用。
2、level級別
level定義消息的緊急程度。按嚴重程度由高到低順序排列爲: emerg -該系統不可用,等同panic
alert -需要立即被修改的條件
crit -阻止某些工具或子系統功能實現的錯誤條件
err -阻止工具或某些子系統部分功能實現的錯誤條件,等同error
warning -預警信息,等同warn
notice -具有重要性的普通條件
info -提供信息的消息
debug -不包含函數條件或問題的其他信息
none -沒有重要級,通常用於排錯
* 所有級別,除了none其中,panic、error、warn均爲舊的標識符,不再建議使用。
在定義level級別的時候,需要注意兩點: 1)優先級是由應用程序在編程的時候已經決定的,除非修改源碼再編譯,否則不能改變消息的優先級;
低的優先級包含高優先級,例如,爲某個應用程序定義info的日誌導向,則涵蓋notice、warning、err、crit、alert、emerg等消息。(除非使用=號定義)
3、selector選擇條件
通過小數點符號“.”把facility和level連接在一起則成爲selector(選擇條件)。
可以使用分號“;”同時定義多個選擇條件。也支持三個修飾符: * - 所有日誌信息
= - 等於,即僅包含本優先級的日誌信息
! - 不等於,本優先級日誌信息除外
4、action動作
由前面選擇條件定義的日誌信息,可執行下面的動作: file-指定日誌文件的絕對路徑
terminal 或 print -發送到串行或並行設備標誌符,例如/dev/ttyS2
@host -遠程的日誌服務器
username -發送信息本機的指定用戶信息窗口中,但該用戶必須已經登陸到系統中
named pipe -發送到預先使用 mkfifo 命令來創建的 FIFO 文件的絕對路徑※注意,不能通過“|/var/xxx.sh”方式導向日誌到其他腳本中處理。
5、舉例
例如: *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
#把除郵件、新聞組、授權信息、計劃任務等外的所有通知性消息都寫入messages文件中。
mail,news.=info /var/adm/info
#把郵件、新聞組中僅通知性消息寫入info文件,其他信息不寫入。
mail.*;mail.!=info /var/adm/mail
#把郵件的除通知性消息外都寫入mail文件中。
mail.=info /dev/tty12
#僅把郵件的通知性消息發送到tty12終端設備
*.alert root,joey
#如果root和joey用戶已經登陸到系統,則把所有緊急信息通知他們
*.* @finlandia
#把所有信息都導向到finlandia主機(通過/etc/hosts或dns解析其IP地址)※注意:每條消息均會經過所有規則的,並不是唯一匹配的。
也就是說,假設mail.=info信息通過上面範例中定義的規則時,/var/adm/info、/var/adm/mail、/dev/tty12,甚至finalandia主機都會收到相同的信息。這樣看上去比較煩瑣,但可以帶來的好處就是保證了信息的完整性,可供不同地方進行分析。
 
二、messages日誌
首先說下我們最關注的系統/var/log/messages,這東東不僅是咱們服務器的系統日誌,很多時候它也做了許多服務的日誌,這也是它被稱爲雜貨鋪的原因,值得重點關注,大家一般都喜歡用以下命令看最後十條日誌
tail -n10 /var/log/messages
其實還可以將一段日誌保存成文件,正用練下自己的awk、sed和grep水平;或者直接用vim來查看,這也是算是一種經驗之談吧。我以前配置bind的主從複製,有時因爲權限的原因報錯;這時可以在一臺報錯的服務器上用命令tail -f /var/log/messages實時查看服務器的變化情況,從中查找錯誤的蛛絲馬跡;事實證明,效果很好,而且用於lvs+keepalived的排錯效也不錯,其它事例依此類推。
三、secure的用法
/var/log/secure:記錄登入系統存取數據的文件,例如 pop3, ssh, telnet, ftp 等都會被記錄,我們可以利用此文件找出不安全的登陸IP。
四、記錄登陸者的數據
/var/log/wtmp:記錄登入者的訊息數據,由於本文件已經被編碼過(爲二進制文件),所以必須使用 last指令來取出文件的內容,你用cat等命令直接查看此文件是不行的。
五、lastlog記錄系統時間
/var/log/lastlog : 記錄每個使用者最近簽入系統的時間, 因此當使用者簽入時, 就會顯示其上次簽入的時間,您應該注意一下這個時間, 若不是您上次簽入的時間, 表示您的帳號可能被人盜用了。 此檔可用 /usr/bin/lastlog 指令讀取(Freebsd下爲/usr/sbin/lastlogin)。
六、用dmesg查看啓動消息 
dmesg提供了一個簡單的方法查看系統啓動信息。當Linux啓動的時候,內核的信息被存入內核ring緩存當中,dmesg可以顯示緩存中的內容。默認情況下,dmesg打印內容到屏幕上面,當然你可以重定向輸出到一個文件。如果硬件損壞的話,在dmesg日誌裏是有顯示的,可用以下命令來查看dmesg | grep error
七、服務器的郵件日誌
服務器的郵件爲/var/log/messages,如果要用專業的日誌分析工具來分析的話,我推薦用Awstats;由於公司的開發對郵件的要求比較低,所以我幫他們配置的就是最簡單的sendmail,有時看看郵件日誌裏的status狀態來判斷郵件到底有沒有正確發送;在配置Nagios服務器,我也習慣用此日誌來判斷報警郵件到底有沒有發送,如果對自己的shell水平足夠自信,也可以寫腳本來收集郵件服務器的返回狀態等,但專業的事情,建議還是由專業的工具來做,特別是郵件負載比較大時,每天幾百萬條日誌或上千萬條日誌不是開玩笑的。
八、日誌文件的專業工具
像系統的一些服務,比如Apache、Nginx、Squid、還有mysql,都有自己的特定的日誌文件,由於格式比較複雜,也推薦用專業工具,如Awstats、Cacti來分析,現在用cacti用得比較多是用它分析Nginx負載均衡器的一段時間的併發情況。
 
九、輸出Iptables日誌到一個指定的文件(logboy同學撰寫)
Iptables的man參考頁中提到: 我們可以使用Iptables在Linux內核中建立, 維護和檢查IP包過濾規則表。幾個不同的表可能已經創建, 每一個表包含了很多內嵌的鏈, 也可能包含用戶自定義的鏈。Iptables默認把日誌信息輸出到/var/log/messages文件。不過一些情況下你可能需要修改日誌輸出的位置。下面向大家介紹如何建立一個新的日誌文件/var/log/iptables.log。通過修改或使用新的日誌文件, 你可以創建更好的統計信息或者幫助你分析網絡***信息。
(1). Iptables默認的日誌文件
例如, 如果你輸入下面的命令, 屏幕將顯示/var/log/messages文件中的Iptables日誌信息:
# tail -f /var/log/messages
輸出:
Oct 4 00:44:28 debian gconfd (vivek-4435):
Resolved address "xml:readonly:/etc/gconf/gconf.xml.defaults"
to a read-only configuration source at position 2
Oct 4 01:14:19 debian kernel:
IN=ra0 OUT= MAC=00:17:9a:0a:f6:44:00:08:5c:00:00:01:08:00
SRC=200.142.84.36 DST=192.168.1.2
LEN=60 TOS=0x00 PREC=0x00 TTL=51 ID=18374
DF PROTO=TCP SPT=46040 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0 
(2).輸出Iptables日誌信息到一個指定文件的方法
打開你的/etc/syslog.conf文件:
# vi /etc/syslog.conf
在文件末尾加入下面一行信息:
kern.warning /var/log/iptables.log
保存和關閉文件。
重新啓動Syslogd(如果你使用Debian/Ubuntu Linux):
# /etc/init.d/sysklogd restart
另外, 使用下面命令重新啓動Syslogd(如果你使用Red Hat/Cent OS/Fedora Core Linux):
# /etc/init.d/syslog restart現在確認你的Iptables使用了log-level 4參數(前面有一個log-prefix標誌)。例如:
# DROP everything and Log it
iptables -A INPUT -j LOG –log-level 4
iptables -A INPUT -j DROP
舉一個例子, 丟棄和記錄所有來自IP地址65.55.11.2的連接信息到/var/log/iptables.log文件。
iptables -A INPUT -s 64.55.11.2 -m limit
limit 5/m --limit-burst 7 -j LOG
log-prefix ‘** HACKERS **’ --log-level 4
iptables -A INPUT -s 64.55.11.2 -j DROP 
命令解釋:
log-level 4: 記錄的級別. 級別4爲警告(warning)。
log-prefix ‘*** TEXT ***’: 這裏定義了在日誌輸出信息前加上TEXT前綴。TEXT信息最長可以是29個字符, 這樣你就可以在記錄文件中方便找到相關的信息。
現在你可以通過/var/log/iptables.log文件參考Iptables的所有信息:
# tail -f /var/log/iptables.log
十、日誌輪詢
再說下日誌的輪詢,Linux的日誌輪詢機制做得相當好,當然我們也可以通過配置/etc/logrotate.conf來修改它,有興趣的同學可參考鳥哥的文章,這裏就不作詳細介紹了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章