


監(jiān)視并記錄Apache網(wǎng)站服務(wù)器的運(yùn)行
在Apache下的日志簡介
Apache提供了廣泛記錄運(yùn)行時(shí)各方面信息的工具。比如有條件性的記錄日志,日志循環(huán),確定IP地址等時(shí)普遍會遇到的問題。還講解很多用于檢測您的Apache服務(wù)器狀態(tài)以及分析其日志的捆綁的第三方模塊和工具。
默認(rèn)的Apache日志文件
Apache提供很多檢測和日志工具來追蹤服務(wù)器的正確運(yùn)行。默認(rèn)的Apache配置提供兩個(gè)日志文件,放置在安裝目錄下的日志目錄里面。
access_log 這個(gè)文件(在windows下對應(yīng)access.log文件)包含了服務(wù)器已經(jīng)處理過的請求的信息,比如說請求的URL,客戶端的IP地址,請求是否被成功完成等。error_log 這個(gè)文件(在windows下對應(yīng)error.log文件)包含了與錯誤情況相關(guān)的信息,以及服務(wù)器生命周期中不同的大事件。
創(chuàng)建日志格式LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat 指令允許你告訴Apache你想要記錄請求的哪些方面。而你仍需附加的指令來告訴Apache在哪里記錄那些信息,這在下一章中將會介紹。下面的例子顯示了兩種最受歡迎的格式的配置:普通日志格式和整合日志格式。當(dāng)Apache收到一個(gè)請求,他將會用相應(yīng)的請求屬性來替代以%為前綴的每一個(gè)域。如果您正在使用普通日志格式,您的日志文件里的每一項(xiàng)輸入看起來都將是這樣的:
LogFormat "%h %l %u %t "%r" %>s %b"
"%{Referer}i" "%{User-agent}i"" combined192.168.200.4 - someuser [12/Jun/2005:08:33:34
如果您正在使用整合日志格式,您的日志文件里的每一項(xiàng)輸入看起來則都將是這樣的:
+0500] "GET /example.png HTTP/1.0" 200 1234192.168.200.4 - someuser [12/Jun/2005:08:33:34
盡管有附件提供日志格式的詳盡索引,下表描述了一些最為重要的域:
+0500] "GET /example.png HTTP/1.0" 200 1234
http://www.example.com/index.html "Mozilla/5.0
(Windows; U; Windows NT 5.1; en-US; rv:1.7.7)"
# %h: 客戶端(例如,瀏覽器)向服務(wù)器發(fā)出連接請求時(shí)自己的當(dāng)時(shí)的IP地址或域名(需開啟HostNameLookups)。
# %u: 使用HTTP方式認(rèn)證用戶時(shí),記錄下的用戶的編號。
# %t: 服務(wù)器接受到連接請求的時(shí)間。
# %r: 客戶端發(fā)出的原始連接請求中的文本信息,包含所使用的HTTP方法。
# %>s: 服務(wù)器應(yīng)答瀏覽器后的返回狀態(tài)代碼,200表示請求成功。.
# %b: 服務(wù)器應(yīng)答瀏覽器發(fā)出的單個(gè)請求的回傳對象的內(nèi)容大小(字節(jié)為單位),不統(tǒng)計(jì)數(shù)據(jù)包頭部字節(jié)。
整合日志格式在普通日志格式的基礎(chǔ)上擴(kuò)展出了兩個(gè)附加的域。定義為:
# %{Referer}i: 連接請求數(shù)據(jù)包包頭,包含指向當(dāng)前頁面的文檔關(guān)聯(lián)信息。
# %{User-agent}i: 用戶代理連接請求數(shù)據(jù)包包頭,包含客戶瀏覽器的信息。
創(chuàng)建一個(gè)自定義日志文件
CustomLog logs/access_log common
您可能會想創(chuàng)建Apache自帶以外的新的日志文件。下面的例子將運(yùn)用CustomLog來創(chuàng)建一個(gè)新的日志文件,并保存由一個(gè)之前定義好的日志格式,即前一章提到的common,所定義的信息。您還可以用格式本身的定義來替換昵稱。一個(gè)附加的,更為簡單的指令是Transferlog,它只接受最后一個(gè) LogFormat指令提供的定義。
TransferLog logs/sample.log
重導(dǎo)向日志到一個(gè)外部的程序
TransferLog "|bin/rotatelogs /var/logs/apachelog
你也可以用CustomLog或TransferLog將日志的輸出重導(dǎo)向(輸出)到一個(gè)外部的程序,而不是一個(gè)文件。要做到這一點(diǎn),首先您需要以輸出字符 "|"開頭,跟著是接收日志標(biāo)準(zhǔn)輸入信息的程序之路經(jīng)。本例運(yùn)用Apache自帶的rotatelogs程序,在稍后的章節(jié)中會對其有所介紹。
86400"
當(dāng)有一個(gè)外部程序被使用,它將作為啟動httpd的用戶被運(yùn)行。如果服務(wù)器是被超級管理員所啟動,它就會是超級管理員,完全確保這個(gè)程序是安全的。并且,當(dāng)進(jìn)入一個(gè)非Unix平臺上的一個(gè)文件路徑時(shí),需要小心確保只有正斜杠被使用,即使這個(gè)平臺可能是允許使用反斜杠的。總的來說,在整個(gè)配置文件中總是使用正斜杠是個(gè)好主意。
有條件的日志請求
SetEnvIf Request_URI "(.gif|.jpg)$" image
你可以根據(jù)可變的環(huán)境決定是否記錄一個(gè)請求。這種可變可以根據(jù)許多參數(shù),比如客戶端的IP地址或請求中某個(gè)頭部的存在,事先設(shè)置好。正如本例中所顯示, CustomLog指令可以將可變的環(huán)境作為第三個(gè)參數(shù)來接受。如果存在可變的環(huán)境,它就將被記錄,否則就不會。如果這個(gè)可變的環(huán)境被一個(gè)"!"開頭否定,那么不存在可變的環(huán)境將會被記錄。本例將告訴您如何避免在日志里以GIF和JPEG的格式記錄圖像,及如何從一個(gè)特定的IP地址記錄請求道一個(gè)單獨(dú)的日志文件。另一個(gè)例子請參加下一節(jié)。
CustomLog logs/access_log common env=!image
SetEnvIf Remote_Addr 192.168.200.5 specialmachine
CustomLog logs/special_access_log common env=specialmachine
誰在連接你的網(wǎng)站
SetEnvIfNoCase Referer www.example.com internalreferral
可以通過記錄Referer的值來檢測哪些人連接了你的網(wǎng)站,Referer變量位于用戶發(fā)送連接請求數(shù)據(jù)包的頭部,數(shù)據(jù)包頭中還包含了用戶訪問的目的網(wǎng)站的URL地址。通過這種方法可以記錄下絕大部分網(wǎng)站訪問者。也可以把來自特定網(wǎng)站(www.example.com)地址段的來訪者排除出日志記錄文件。
LogFormat "%{Referer}i -> %U" referer
CustomLog logs/referer.log referer env=!internalreferral
利用模塊參數(shù)(mod_status)來監(jiān)視Apache服務(wù)器
<location /server-status>
Apache 服務(wù)器中可以使用的功能模塊很多,有服務(wù)器內(nèi)置的也有外掛的,這些模塊工作的狀態(tài)和性能就是通過mod_status參數(shù)來記錄的,記錄的內(nèi)容有“哪些模塊參與了網(wǎng)站應(yīng)答服務(wù)、哪些模塊處于空閑狀態(tài)、服務(wù)器的開啟/關(guān)閉時(shí)間。正在處理的連接請求數(shù)和訪問者數(shù)量(需要指定ExtendedStatus記號) -該模塊記錄對高負(fù)荷網(wǎng)站服務(wù)器性能有很大影響”。例子中記錄的模塊狀態(tài)統(tǒng)計(jì)結(jié)果可以用瀏覽器訪問http://www.example.com/server-status頁面來查看。
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 192.168.0
</location>
通過SNMP協(xié)議來監(jiān)視Apache服務(wù)器
SNMP 是簡單網(wǎng)管協(xié)議,支持SNMP的服務(wù)器或網(wǎng)絡(luò)設(shè)備可以被OpenView、Tivoli等網(wǎng)管軟件統(tǒng)一管理,目前有很多開源的SNMP模塊可以加裝到 Apache網(wǎng)站服務(wù)器之上,對于Apache 1.3版來講,mod_snmp模塊可以支持第1版和2版的SNMP協(xié)議;對于Apache 2版來講,mod_apache_snmp模塊可以編譯成Apache的DSO直接支持第1版、第2版和第3版的SNMP協(xié)議。有了SNMP模塊,外部網(wǎng)管軟件就可以對Apache網(wǎng)站服務(wù)器的各種實(shí)時(shí)性能參數(shù)進(jìn)行查看了,這些參數(shù)包含“服務(wù)器連續(xù)在線時(shí)間、平均負(fù)載、一段時(shí)間內(nèi)的錯誤數(shù)、提供網(wǎng)站服務(wù)的字節(jié)數(shù)和連接請求數(shù)”。SNMP模塊遇到突然激增的并發(fā)連接請求數(shù)時(shí)會向控制臺報(bào)警。管理SNMP資源的開源工具軟件有:“net-snmp, OpenNMS,Najios等”。
用開源工具分析日志
有很多開源和商業(yè)版的工具軟件可以對產(chǎn)生的Apache日志文件做分析和處理,通常的步驟是:
1.選取一個(gè)日志文件。
Webalizer(http://www.mrunix.net/webalizer/)和AWStats(http://awstats.sf.net)是較為流行的日志文件分析工具;還有一些工具可以記錄來訪者具體訪問路線,比如Vistors和Pathalizer工具,可以分別從http://www.hping.org/visitors/和http://pathalizer.bzzt.net/下載。
2.分析日志文件內(nèi)容。
3.生成包含不同類別內(nèi)容的統(tǒng)計(jì)信息網(wǎng)頁輸出。
實(shí)時(shí)監(jiān)視日志
使用apachetop命令行工具來顯示apache服務(wù)器當(dāng)前的運(yùn)行狀態(tài),類似于Unix等系統(tǒng)下的top命令工具。對流量比較低的Unix- Apache網(wǎng)站也可以使用tail命令來記錄實(shí)時(shí)日志信息,tail -f /logfile/。通過掃描錯誤日志文件中的記錄,分析出惡意連接請求,常用的錯誤日志文件掃描工具有Logscan和ScanErrLog,可以分別從http://www.garand.net/security.php和http://www.librelogiciel.com/software/去下載這些工具。
將連接請求日志記錄到數(shù)據(jù)庫
Apache 本身沒有將記錄轉(zhuǎn)發(fā)到數(shù)據(jù)庫的功能,必須要第三方腳本和模塊來支持。這里列舉幾個(gè):mod_log_sql模塊允許將連接請求直接記入MySQL數(shù)據(jù)庫,然后用Apache LogView SQL工具來參看庫中的記錄;pglogd工具可以記錄日志到PostgreSQL數(shù)據(jù)庫中。
將日志文件轉(zhuǎn)存和歸檔
CustomLog "|bin/rotatelogs /var/logs/apachelog
如果網(wǎng)站流量較高,日志文件很容易就會變得很大,需要進(jìn)行轉(zhuǎn)存和歸檔處理。轉(zhuǎn)存日志文件時(shí)需要壓縮和保存,在線進(jìn)行這項(xiàng)工作可以使用Apache提供的rotatelogs來完成,類似工具還可以在http://cronolog.org/上找到。例子中用rotatelogs工具將每天的日志做了轉(zhuǎn)存和歸檔處理,一天共有86400秒。查看Apache幫助文件可以了解更多的rotatelogs工具參數(shù)。注意如果rotatelogs工具所在的目錄名含有空格,則需要用跳轉(zhuǎn)符號來指定。
86400" common
IP地址和域名之間對應(yīng)處理
將HostNameLookups 設(shè)置成on,那么日志記錄中將顯示來訪者所在的域名,設(shè)置成on可降低服務(wù)器性能。為了解決這一問題,Apache提供了一個(gè)事后分析IP地址域名信息的工具logresolve,例如$ logresolve < access_log > resolved_log
如果用代理服務(wù)器或網(wǎng)關(guān)設(shè)備來完成的網(wǎng)站訪問,Apache服務(wù)器將只能記錄到代理服務(wù)器和網(wǎng)關(guān)的IP地址和域名。
如何自動啟動Apache服務(wù)器
#!/bin/bash
在windows 平臺下以服務(wù)方式啟動的Aapche遇到意外退出后可以由服務(wù)管理器自動自動,Unix平臺下需要借助watchdog腳本來實(shí)現(xiàn)自動啟動功能, watchdog程序?qū)iT用來監(jiān)視其他程序的運(yùn)行狀態(tài),發(fā)現(xiàn)被監(jiān)視的程序退出或停止后可以重新將他們啟動。例子中簡單的linux腳本將監(jiān)視系統(tǒng)的進(jìn)程表,如果網(wǎng)站服務(wù)器httpd進(jìn)程消失,則負(fù)責(zé)將它重新啟動,使用該腳本的條件有2個(gè),首先保證該腳本文件具備可執(zhí)行權(quán)限,第二必須將該文件設(shè)置到 cron文件中,使之可以在預(yù)定的時(shí)間間隔內(nèi)運(yùn)行,如果使用Solaris系統(tǒng),需要將例子中的ps -waux改成ps -ef。用戶可以訪問http://perl.apache.org/docs/general/control/control.html網(wǎng)頁發(fā)現(xiàn)更多高級的watchdog類腳本工具,大多數(shù)linux發(fā)行版自帶一些用于Apache的腳本工具。
if [ 'ps -waux | grep -v grep | grep -c httpd' -lt 1
]; then apachectl restart; fi
日志文件的分割和合并
如果用戶的網(wǎng)站環(huán)境是用服務(wù)器集群來搭建的,通常需要將所有服務(wù)器上的日志做合并成單個(gè)文件后,才可以進(jìn)行分析和處理。相似的道理,如果在單臺服務(wù)器上運(yùn)行多個(gè)虛擬網(wǎng)站,則需要將單個(gè)日志文件分割成多個(gè)部分供不同的虛擬網(wǎng)站用戶去分析。在Apache服務(wù)器源碼的support/文件夾下可以找到相應(yīng)的腳本工具split-logfile等。在http://www.coker.com.au/logtools/網(wǎng)頁可以找到一些其他的日志工具。比如vlogger工具就可以替代cronologs來對單個(gè)服務(wù)器上的虛擬網(wǎng)站日志進(jìn)行分別處理,該工具在http://n0rp.chemlab.org/vlogger/下載。
為虛擬網(wǎng)站保存獨(dú)立的日志文件
<virtualhost>
使用CustomLog標(biāo)志段在Apache配置文件的<Virtualhost>區(qū)塊內(nèi)實(shí)現(xiàn)虛擬網(wǎng)站日志文件的獨(dú)立處理。
ServerName vhost1.example.com
CustomLog logs/vhost1.example.com_log combined
ErrorLog logs/vhost2.example.com_log
.......
</virtual host>
LogFormat "%v %h %l %u %t "%r" %>s %b" common_virtualhost
在Apache全局配置中配置方法,其中的v%負(fù)責(zé)把提供服務(wù)的虛擬網(wǎng)站記錄下來,對于配置了很多虛擬網(wǎng)站的單臺服務(wù)器來說,這種配置不錯。如果不想記錄虛擬服務(wù)器的日志只需要在配置文件中加入"CustomLog /dev/null"就可以了。
CustomLog logs/access_log common_virtualhost
日志文件中常見的條目
缺少favicon.ico文件,該文件可在瀏覽器的標(biāo)題欄顯示網(wǎng)站的個(gè)性圖案;
缺少robots.txt文件,利于站點(diǎn)復(fù)制工具和搜索引擎使用;
覆寫httpd.pid文件,網(wǎng)站服務(wù)器不正常退出后遺留的PID記錄文件;
陌生的長記錄條,
"SEARCH /x90x02xb1x02xb1x02xb1x02 ..."
類似的記錄條表示訪問者請求了網(wǎng)站上根本沒有的cmd.exe,root.exe或dir等文件。
"GET /s/..%252f../winnt/system32/cmd.exe?/
c+dir HTTP/1.0..."
"GET /default.ida?NNNNNNN NNNNNNNNNNNNNNNNNN ..."
日志文件中的一些條目經(jīng)常反映了那些自動探測網(wǎng)站服務(wù)器漏洞的動作,多數(shù)來源于針對IIS網(wǎng)站服務(wù)器的蠕蟲和惡意程序。有時(shí)候也會發(fā)現(xiàn)一些針對Apache的漏洞,所以為了保證Apache的正常運(yùn)行,用戶應(yīng)保持經(jīng)常更新Apache軟件。
原文鏈接:http://loveher.blog.51cto.com/blog/48504/6828
關(guān)鍵字:Apache、網(wǎng)站、服務(wù)器
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解