正如我們前言所說盡管Apache服務器應用最為廣泛,設計上非常安全的程序。但是同其它應用程序一樣,Apache也存在安全缺陷。畢竟它是完全源代碼,Apache服務器的安全缺陷主要是使用HTTP協議進行的拒絕服務攻擊(denial of service)、緩沖區溢出攻擊以及被攻擊者獲得root權限三缺陷和最新的惡意的攻擊者進行“拒絕服務”(DoS)攻擊。合理的網絡配置能夠保護Apache服務器免遭多種攻擊。我們來介紹一下主要的安全缺陷。
主要安全缺陷
(1)使用HTTP協議進行的拒絕服務攻擊(denial of service)的安全缺陷
這種方法攻擊者會通過某些手段使服務器拒絕對HTTP應答。這樣會使Apache對系統資源(CPU時間和內存)需求的劇增,最終造成Apache系統變慢甚至完全癱瘓。
(2)緩沖區溢出的安全缺陷
該方法攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態分配的內存保存請求數據,攻擊者就可以發送一個超長請求使緩沖區溢出。
(3)被攻擊者獲得root權限的安全缺陷
該安全缺陷主要是因為Apache服務器一般以root權限運行(父進程),攻擊者會通過它獲得root權限,進而控制整個Apache系統。
(4)惡意的攻擊者進行“拒絕服務”(DoS)攻擊的安全缺陷
這個最新在6月17日發現的漏洞,它主要是存在于Apache的chunk encoding中,這是一個HTTP協議定義的用于接受web用戶所提交數據的功能。 所有說使用最高和最新安全版本對于加強Apache Web服務器的安全是至關重要的。
正確維護和配置Apache服務器
雖然Apache服務器的開發者非常注重安全性,由于Apache服務器其龐大的項目, 難免會存在安全隱患。正確維護和配置Apache WEB服務器就很重要了。我們應注意的一些問題:
(1)Apache服務器配置文件
Apache Web服務器主要有三個配置文件,位于/usr/local/apache/conf目錄下。 這三個文件是:
|
(2)Apache服務器的目錄安全認證
在Apache Server中是允許使用 .htaccess做目錄安全保護的,欲讀取這保護的目錄需要先鍵入正確用戶帳號與密碼。這樣可做為專門管理網頁存放的目錄或做為會員區等。在保護的目錄放置一個檔案,檔名為.htaccss。
|
AuthUserFile "/var/tmp/xxx.pw" ----->把password放在網站外 require valid-user 到apache/bin目錄,建password檔 % ./htpasswd -c /var/tmp/xxx.pw username1 ----->第一次建檔要用參數"-c" % /htpasswd /var/tmp/xxx.pw username2 這樣就可以保護目錄內的內容,進入要用合法的用戶。
注:采用了Apache內附的模組。
也可以采用在httpd.conf中加入:
|
(3)Apache服務器訪問控制
我們就要看三個配置文件中的第三個文件了,即access.conf文件,它包含一些指令控制允許什么用戶訪問Apache目錄。應該把deny from all設為初始化指令,再使用allow from指令打開訪問權限。
|
設置允許來自某個域、IP地址或者IP段的訪問。
(4)Apache服務器的密碼保護問題
我們再使用.htaccess文件把某個目錄的訪問權限賦予某個用戶。系統管理員需要在httpd.conf或者rm.conf文件中使用 AccessFileName指令打開目錄的訪問控制。如:
|
設置Apache服務器的WEB和文件服務器
我們在Apache服務器上存放WEB服務器的文件,供用戶訪問,并設置/home/ftp/pub目錄為文件存放區域,用http://download.your.com/pub/來訪問。在防火墻上設置apache反向代理技術,由防火墻代理訪問。
(1)Apache服務器的設置
Apache服務器采用默認配置。主目錄為/home/httpd/html,主機域名為Phoenix.your.com, 且別名到www.your.com中, 并且設置srm.conf加一行別名定義如下:
|
更改默認應用程序類型定義如下:
|
最后在/etc/httpd/conf/access.conf中增加一項定義
|
注:Options Indexes允許在找不到index.html文件的情況下允許列出目錄/文件列表。AllowOverride AuthConfig允許做基本的用戶名和口令驗證。這樣的話,需要在/home/ftp/pub目錄下放入.htaccess,內容如下:
|
用# htpasswd -c /etc/.usrpasswd user1 分別創建不同的允許訪問/pub下文件服務的外部用戶名和口令。
(2)在防火墻上配置反向代理技術.
在/etc/httpd/conf/httpd.conf 中加入 NameVirtualHost xxx.xxx.xxx.xxx # xxx.xxx.xxx.xxx ----->是防火墻外部在互聯網上永久IP地址:
|
設置防火墻上的DNS,讓download.your.com和www.your.com 都指向防火墻的外部網地址xxx.xxx.xxx.xxx。
用http://www.your.com訪問主頁,用http://download.your.com/pub/訪問公共文件的下載區。
注:還需要在apache服務器主機上建立目錄/var/log/httpd/download/,否則會出錯。另外,也可以設置防火墻主機上的/home/httpd/html/index.html的屬性為750來阻止訪問,這是防外部用戶能訪問到防火墻上的Apache服務器的http://www.your.com中。
總結:Apache Server是一個非常優秀,非常棒的服務器,只要你正確配置和維護好Apache服務器,你就會感受到Apache Server 所帶來的好處,同樣希望你能夠通過閱讀本文達到理論和實踐雙豐收的目的。
驗證你的Apache來源途徑
不要以為在Google上能夠搜索到合適的Apache版本。如果你需要下載最新版本的Apache,那么你最好通過一個權威的鏡像站點來下載。然而,即使這樣也可能有問題,事實上,曾經就有黑客入侵過apache.org官方網站。所以,采用類似PGP的工具來驗證Apache的數字簽名就顯得尤為重要。
保持更新Apache的補丁程序
如果你安裝了Apache,你就必須及時更新安全補丁。如果沒有及時的更新,那你的系統很容易受到網絡上那些高危病毒的攻擊。幸好,有幾個簡便方法可以更新Apache的補丁。參考我們關于保持更新Apache補丁的文章了解更多關于Apache服務器公告列表、Linux包管理系統和RedHat操作系統更新服務的信息。
避免使用.htaccess文件(分布式配置文件)
很多情況下需要幾個管理員和內容管理者共同管理Apache服務器。一個常用的共享管理辦法就是使用.htaccess文件,這樣可以很靈活地對管理員以外的用戶提供不同的配置控制權限。然而,這些文件也使得在集中安全管理之外還有相當多的安全控制權限——這些文件允許安全專業人士以外的其他用戶改變服務器的訪問控制許可配置。那些對粒度訪問控制根本不熟悉的用戶修改的配置可能在無意中會危害到你的系統安全。所以,除非必須使用,否則我們應該盡可能地避免使用這種訪問控制系統。
監視系統日志
Apache為管理員提供了很全面的日志管理工具來對服務器的活動進行事后分析。Apache提供了多種不同的記錄日志,但是對安全專業人士最重要的是訪問日志。這個靈活的工具還具有了相當多的自定義功能,你可以按照你的需要很方便地記錄盡可能多或者少的日志,以保證有效的分析。至少,你應該記錄那些失敗的認證企圖和系統產生的錯誤。使用像AWStats一樣的免費工具可以很輕松地完成分析任務。但是必須明確的一點是:監視日志只是一種事后分析手段。你可以利用它回顧和判斷對服務器的攻擊(和攻擊企圖),但是希望及時查看日志來對緊急情況做出快速反應是不可能的。如果需要進行預判反應,你應該考慮使用入侵預防系統如信息安全雜志評選的2003年度最新興技術獎得主:Lucid Security公司的ipAngel系統。
管理文件系統
我們已經討論了使用(或不使用).htaccess文件對管理文件訪問權限的重要性。禁止通過文件系統許可對Apache服務器進行非授權修改也是很重要的。特別值得一提的是,你應該保證只有根用戶才能修改存儲在“/usr/local/apache ”目錄的文件(或者你選擇的任何Apache服務器的根目錄)。確保只有根用戶才能修改日志文件也很關鍵,這樣可以防止用戶掩蓋他們的操作。
Apache 服務器日常配置
1、如何設 置請求等待時間
在httpd.conf里面設置:
|
其中n為整數,單位是秒。
設置這個TimeOut適用于三種情況:
2、如何接收一個get請求的總時間
接收一個post和put請求的TCP包之間的時間
TCP包傳輸中的響應(ack)時間間隔
3、如何使得apache監聽在特定的端口
修改httpd.conf里面關于Listen的選項,例如:
|
是使apache監聽在8000端口
而如果要同時指定監聽端口和監聽地址,可以使用:
|
這樣就使得apache同時監聽在192.170.2.1的80端口和192.170.2.5的8000端口。
當然也可以在httpd.conf里面設置:
|
這樣來實現類似的效果。
4、如何設置apache的最大空閑進程數
修改httpd.conf,在里面設置:
|
其中n是一個整數。這樣當空閑進程超過n的時候,apache主進程會殺掉多余的空閑進程而保持空閑進程在n,節省了系統資源。如果在一個apache非常繁忙的站點調節這個參數才是必要的,但是在任何時候把這個參數調到很大都不是一個好主意。
同時也可以設置:
|
來限制最少空閑進程數目來加快反應速度。
5、apache如何設置啟動時的子服務進程個數
在httpd.conf里面設置:
|
這樣啟動apache后就有5個空閑子進程等待接受請求。
也可以參考MinSpareServers和MaxSpareServers設置。
6、如何在apache中設置每個連接的最大請求數
在httpd.conf里面設置:
|
這樣就能保證在一個連接中,如果同時請求數達到100就不再響應這個連接的新請求,保證了系統資源不會被某個連接大量占用。但是在實際配置中要求盡量把這個數值調高來獲得較高的系統性能。
7、如何在apache中設置session的持續時間
在apache1.2以上的版本中,可以在httpd.conf里面設置:
|
這樣就能限制每個session的保持時間是15秒。session的使用可以使得很多請求都可以通過同一個tcp連接來發送,節約了網絡資源和系統資源。
8、如何使得apache對客戶端進行域名驗證
可以在httpd.conf里面設置:
|
如果是使用on,那么只有進行一次反查,如果用double,那么進行反查之后還要進行一次正向解析,只有兩次的結果互相符合才行,而off就是不進行域名驗證。
如果為了安全,建議使用double;為了加快訪問速度,建議使用off。
9、如何使得apache只監聽在特定的ip
修改httpd.conf,在里面使用
|
這樣就能使得apache只監聽外界對192.168.0.1的http請求。如果使用:
|
就表明apache監聽所有網絡接口上的http請求。
當然用防火墻也可以實現。
10、apache中如何限制http請求的消息主體的大小
在httpd.conf里面設置:
|
n是整數,單位是byte。cgi腳本一般把表單里面內容作為消息的主體提交給服務器處理,所以現在消息主體的大小在使用cgi的時候很有用。比如使用cgi來上傳文件,如果有設置:
|
那么上傳文件超過100k的時候就會報錯。
11、如何修改apache的文檔根目錄
修改httpd.conf里面的DocumentRoot選項到指定的目錄,比如:
|
這樣http://localhost/index.html就是對應/www/htdocs/index.html
12、如何修改apache的最大連接數
在httpd.conf中設置:
|
n是整數,表示最大連接數,取值范圍在1和256之間,如果要讓apache支持更多的連接數,那么需要修改源碼中的httpd.h文件,把定義的HARD_SERVER_LIMIT值改大然后再編譯。
13、如何使每個用戶有獨立的cgi-bin目錄
有兩種可選擇的方法:
(1)在Apache配置文件里面關于public_html的設置后面加入下面的屬性:
|
14、如何調整Apache的最大進程數
Apache允許為請求開的最大進程數是256,MaxClients的限制是256.如果用戶多了,用戶就只能看到Waiting for reply....然后等到下一個可用進程的出現。這個最大數,是Apache的程序決定的--它的NT版可以有1024,但Unix版只有256,你可以在src/include/httpd.h中看到:
|
你可以把它調到1024,然后再編譯你的系統。
15、如何屏蔽來自某個Internet地址的用戶訪問Apache服務器
可以使用deny和allow來限制訪問,比如要禁止202.202.202.xx網絡的用戶訪問:
|
16、如何在日志里面記錄apache瀏覽器和引用信息
你需要把mod_log_config編譯到你的Apache服務器中,然后使用下面類似的配置:
CustomLog logs/access_log "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i""
17、如何修改Apache返回的頭部信息
問題分析:當客戶端連接到Apache服務器的時候,Apache一般會返回服務器版本、非缺省模塊等信息,例如:
|
解決:
你可以在Apache的配置文件里面作如下設置讓它返回的關于服務器的信息減少到最少:
|
注意:
這樣設置以后Apache還會返回一定的服務器信息,比如:
|
但是這個不會對服務器安全產生太多的影響,因為很多掃描軟件是掃描的時候是不顧你服務器返回的頭部信息的。你如果想把服務器返回的相關信息變成:
|
那么你就要去修改源碼了。