如何安全設(shè)置ApacheWeb服務(wù)器
Apache是世界使用排名第一的Web服務(wù)器軟件。它可以運(yùn)行在幾乎所有廣泛使用的計(jì)算機(jī)平臺(tái)上,由于其跨平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器端軟件之一。
但即使是這種服務(wù)器軟件,也常常有攻擊者會(huì)通過(guò)某些手段使服務(wù)器拒絕對(duì)http應(yīng)答,這使Apache對(duì)系統(tǒng)資源(cup時(shí)間與內(nèi)存)需求巨增,最終造成系統(tǒng)變慢甚至完全癱瘓,下面是學(xué)習(xí)啦小編整理的一些關(guān)于Apache Web服務(wù)器安全設(shè)置注意事項(xiàng)供你參考。
HTTP拒絕服務(wù)攻擊
攻擊者通過(guò)某些手段使服務(wù)器拒絕對(duì)http應(yīng)答,這使Apache對(duì)系統(tǒng)資源(cup時(shí)間與內(nèi)存)需求巨增,最終造成系統(tǒng)變慢甚至完全癱瘓,Apache服務(wù)器最大的缺點(diǎn)是,它的普遍性使它成為眾矢之的,Apache服務(wù)器無(wú)時(shí)無(wú)刻不受到DoS攻擊威脅,主要有下邊幾種
1.數(shù)據(jù)包洪水攻擊
一種中斷服務(wù)器或本地網(wǎng)絡(luò)的方法是數(shù)據(jù)包洪水攻擊,它通常使用internet控制報(bào)文協(xié)議(ICMP,屬于網(wǎng)絡(luò)層協(xié)議)包或是udp包,在最簡(jiǎn)單的形式下,這些攻擊都是使服務(wù)器或網(wǎng)絡(luò)負(fù)載過(guò)重,這意味這攻擊者的網(wǎng)絡(luò)速度必須比目標(biāo)主機(jī)網(wǎng)絡(luò)速度要快,使用udp包的優(yōu)勢(shì)是不會(huì)有任何包返回到黑客的計(jì)算機(jī)(udp效率要比tcp高17倍),而使用ICMP包的優(yōu)勢(shì)是攻擊者能讓攻擊更加富與變化,發(fā)送有缺陷的包會(huì)搞亂并鎖住受害者的網(wǎng)絡(luò),目前流行的趨勢(shì)是攻擊者欺騙服務(wù)器,讓其相信正在受來(lái)自自身的洪水攻擊.
2.磁盤攻擊
這是一種很不道德的攻擊,它不僅影響計(jì)算機(jī)的通信,還破壞其硬件,偽造的用戶請(qǐng)求利用寫命令攻擊目標(biāo)計(jì)算機(jī)硬盤,讓其超過(guò)極限,并強(qiáng)制關(guān)閉,結(jié)局很悲慘.
3.路由不可達(dá)
通常DoS攻擊,集中在路由器上,攻擊者首先獲得控制權(quán)并操縱目標(biāo)機(jī)器,當(dāng)攻擊者能更改路由表?xiàng)l目時(shí)候,會(huì)導(dǎo)致整個(gè)網(wǎng)絡(luò)無(wú)法通信,這種攻擊很陰險(xiǎn),隱蔽,因?yàn)榫W(wǎng)絡(luò)管理員需要排除的網(wǎng)絡(luò)不通原因很多,其中一些原因需要詳細(xì)分辨.
4.分布式拒絕服務(wù)攻擊
這也是最具有威脅的DDoS攻擊,名稱很容易理解,簡(jiǎn)單說(shuō)就是群歐,很多客戶機(jī)同時(shí)單條服務(wù)器,你會(huì)發(fā)現(xiàn)你將傷痕累累,Apache服務(wù)器特別容易受到攻擊,無(wú)論是DDos還是隱藏來(lái)源的攻擊,因?yàn)锳pache無(wú)處不在,特別是為Apache特意打造的病毒(特選SSL蠕蟲),潛伏在許多主機(jī)上,攻擊者通過(guò)病毒可以操縱大量被感染的機(jī)器,對(duì)特定目標(biāo)發(fā)動(dòng)一次浩大的DDoS攻擊,通過(guò)將蠕蟲散播到大量主機(jī),大規(guī)模的點(diǎn)對(duì)點(diǎn)攻擊得以進(jìn)行,除非你不提供服務(wù),要不然幾乎無(wú)法阻止這樣的攻擊,這種攻擊通常會(huì)定位到大型的網(wǎng)站上.
5.緩沖區(qū)溢出
這種攻擊很普遍,攻擊者利用CGI程序編寫一些缺陷程序偏離正常的流程,程序使用靜態(tài)的內(nèi)存分配,攻擊者就可以發(fā)送一個(gè)超長(zhǎng)的請(qǐng)求使緩沖區(qū)溢出,比如,一些perl編寫的處理用戶請(qǐng)求的網(wǎng)關(guān)腳本,一但緩沖區(qū)溢出,攻擊者就可以執(zhí)行惡意指令.
6.非法獲取root權(quán)限
如果Apache以root權(quán)限運(yùn)行,系統(tǒng)上一些程序的邏輯缺陷或緩沖區(qū)溢出漏洞,會(huì)讓攻擊者很容易在本地系統(tǒng)獲取linux服務(wù)器上的管理者權(quán)限,在一些遠(yuǎn)程情況下,攻擊者會(huì)利用一些以root身份執(zhí)行的有缺陷的系統(tǒng)守護(hù)進(jìn)程來(lái)取得root權(quán)限,或利用有缺陷的服務(wù)進(jìn)程漏洞來(lái)取得普通用戶權(quán)限,以遠(yuǎn)程登陸,進(jìn)而控制整個(gè)系統(tǒng).
這邊這些都是服務(wù)將會(huì)遇到的攻擊手段,下邊來(lái)說(shuō),如何打造安全的Apache服務(wù)器,如果你能遵守下邊這些建議,那么你將得到一臺(tái)相對(duì)安全的apache服務(wù)器.
一:勤打補(bǔ)丁
你必須要相信這個(gè)是最有用的手段,緩沖區(qū)溢出等漏洞都必須使用這種手段來(lái)防御,勤快點(diǎn)相信對(duì)你沒(méi)有壞處,在http:www.apache.org上最新的changelog中都寫有:bug fix,security bug fix的字樣,做為負(fù)責(zé)任的管理員要經(jīng)常關(guān)注相關(guān)漏洞,及時(shí)升級(jí)系統(tǒng)添加補(bǔ)丁.使用最新安全版本對(duì)加強(qiáng)apache至關(guān)重要.
二:隱藏和偽裝Apache的版本
打亂攻擊者的步驟,給攻擊者帶來(lái)麻煩,相信是管理員愿意看到的.軟件的漏洞信息和版本是相關(guān)的,在攻擊者收集你服務(wù)軟件信息時(shí)候給與迷惑是個(gè)不錯(cuò)的選擇,何況版本號(hào),對(duì)攻擊者來(lái)說(shuō)相當(dāng)與GPS定位一樣重要,默認(rèn)情況,系統(tǒng)會(huì)把a(bǔ)pache版本模塊都顯示出來(lái)(http返回頭),如果列舉目錄的話,會(huì)顯示域名信息(文件列表正文),去除Apache版本號(hào)的方法是修改配置文件,找到關(guān)鍵字,修改為下邊:
ServerSignature off
ServerTokens prod 通過(guò)分析web服務(wù)器類型,大致可以推測(cè)操作系統(tǒng)類型,win使用iis,linux普遍apache,默認(rèn)的Apache配置里沒(méi)有任何信息保護(hù)機(jī)制,并且允許目錄瀏覽,通過(guò)目錄瀏覽,通常可以得到類似"apache/1.37 Server at apache.linuxforum.net Port 80"或"apache/2.0.49(unix)PHP/4.3.8"的信息,通過(guò)修改配置文件中的ServerTokens參數(shù),可以將Apache的相關(guān)信息隱藏起來(lái),如果不行的話,可能是提示信息被編譯在程序里了,要隱藏需要修改apache的源代碼,然后重新編譯程序,以替換內(nèi)容:
編輯ap_release.h文件,修改
"#define AP_SERVER_BASEPRODUCT""Apache"""
為
"#define AP_SERVER_BASEPRODUCT""Microsoft-IIS/5.0""
編輯os/unix/os.h文件,修改
"#define PLATFORM""Unix"""
為
"#define PLATFORM"'Win32"
修改完成后,重新編譯,安裝apache,在修改配置文件為上邊做過(guò)的,再次啟動(dòng)apache后,用工具掃描,發(fā)現(xiàn)提示信息中已經(jīng)顯示為windows操作系統(tǒng)了順便說(shuō)下,現(xiàn)在這個(gè)論壇,就有點(diǎn)不太講究,這是論壇錯(cuò)誤的返回信息,看了有點(diǎn)汗地感覺(jué),Apache/2.2.8(Ubuntu)DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g Server at forum.ubuntu.org.cn Port 80這個(gè)等于告訴惡意用戶很多有用信息,雖然說(shuō)不算開了門,但等于被告訴了門在那里,還是相當(dāng)危險(xiǎn)的.
三:建立安全的目錄結(jié)構(gòu)apache服務(wù)器包括四個(gè)目錄結(jié)構(gòu)
ServerRoot #保存配置文件,二進(jìn)制文件與其他服務(wù)器配置文件
DocumentRoot #保存web站點(diǎn)內(nèi)容,包括HTML文件和圖片等
ScripAlias #保存CGI腳本
Customlog #保存日志
Errorlog #保存錯(cuò)誤日志
建議的目錄結(jié)構(gòu)為,以上四種目錄相互獨(dú)立并且不存在父子邏輯關(guān)系
注:
ServerRoot目錄只能為root用戶訪問(wèn)
DocumentRoot目錄應(yīng)該能夠被管理web站點(diǎn)內(nèi)容的用戶訪問(wèn)和使用apache服務(wù)器的apache用戶與組訪問(wèn)
ScripAlias目錄應(yīng)該只能被CGI開發(fā)人員和apache用戶訪問(wèn)
Customlog和Errorlog只能被root訪問(wèn)
下邊是一個(gè)安全目錄結(jié)構(gòu)的事例:
+-------/etc/
|
| +----/http (ServerRoot)
| +----/logs (Customlog和Errorlog)
|
+-------var/www
|
| +---/cgi-bin(ScripAlias)
| +---/html(DocumentRoot)
這樣的目錄結(jié)構(gòu)是比較安全的,因?yàn)槟夸浿g獨(dú)立,某個(gè)目錄權(quán)限錯(cuò)誤不會(huì)影響到其他目錄
四:為apache使用專門的用戶與組
按照最小特權(quán)的原則,需要給apache分配一個(gè)合適的權(quán)限,讓其能夠完成web服務(wù).
注:最小特權(quán)原則是系統(tǒng)安全中最基本的原則之一,限制使用者對(duì)系統(tǒng)及數(shù)據(jù)進(jìn)行存取所需要的最小權(quán)限,保證用戶可以完成任務(wù),同時(shí)也確保被竊取或異常操作所造成的損失.
必須保證apache使用一個(gè)專門的用戶與組,不要使用系統(tǒng)預(yù)定的帳戶,比如nobody用戶與nogroup組,因?yàn)橹挥衦oot用戶可以運(yùn)行apache,DocumentRoot應(yīng)該能夠被管理web站點(diǎn)內(nèi)容的用戶訪問(wèn)和使用apache服務(wù)器的apache用戶與組訪問(wèn),例如,希望"test"用戶在web站點(diǎn)發(fā)布內(nèi)容,并且可以以httpd身份運(yùn)行apache服務(wù)器,可以這樣設(shè)定:
groupadd webteam
usermod -G webteam test
chown -R httpd.webteam /www/html
chmod -R 2570 /www/htdocs
只有root能訪問(wèn)日志,推薦這樣的權(quán)限
chown -R root.root /etc/logs
chown -R 700 /etc/logs
五:web目錄的訪問(wèn)策略
對(duì)于可以訪問(wèn)的web目錄,要使用相對(duì)保守的途徑進(jìn)行訪問(wèn),不要讓用戶查看任何目錄索引列表
禁止使用目錄索引:
apache在接到用戶對(duì)一個(gè)目錄的訪問(wèn)時(shí),會(huì)查找DirectoryIndex指令指定的目錄索引文件,默認(rèn)為index.html,如果該文件不存在,那么apache會(huì)創(chuàng)建動(dòng)態(tài)列表為用戶顯示該目錄的內(nèi)容,這樣就會(huì)暴露web站點(diǎn)結(jié)構(gòu),因此需要修改配置文件禁止顯示動(dòng)態(tài)目錄索引,修改httpd.conf
Options -Indexes FollowSymLinks
Options指令通知apache禁止使用目錄索引,FollowSymLinks表示不允許使用符號(hào)連接.
禁止默認(rèn)訪問(wèn):
要的安全策略必須要禁止默認(rèn)訪問(wèn)的存在,只對(duì)指定的目錄開放權(quán)限,如果允許訪問(wèn)/var/www/html目錄,使用如下設(shè)定
Order deny,allow
Allow from all
禁止用戶重載:
為了禁止用戶對(duì)目錄配置文件(htaccess)進(jìn)行重載(修改),可以這樣設(shè)定
AllowOverride None
六:apache服務(wù)器訪問(wèn)控制
apache的access.conf文件負(fù)責(zé)設(shè)置文件的訪問(wèn)權(quán)限,可以實(shí)現(xiàn)互聯(lián)網(wǎng)域名和ip地址的訪問(wèn)控制,如允許192.168.1.1到192.168.1.254的主機(jī)訪問(wèn),可以這樣設(shè)定
order deny,allow
deny from all
allow from pair 192.168.1.0/255.255.255.0
七:apache服務(wù)器的密碼保護(hù)
.htaccess文件是apache上的一個(gè)設(shè)置文件,它是一個(gè)文本文件,.htaccess文件提供了針對(duì)目錄改變配置的方法既通過(guò)在一個(gè)特定的文檔目錄中放置一個(gè)包含一個(gè)或多個(gè)指令的文件(.htaccess文件),以作用于此目錄和子目錄.
.htaccess的功能包括設(shè)置網(wǎng)頁(yè)密碼,設(shè)置發(fā)生錯(cuò)誤時(shí)出現(xiàn)的文件,改變首業(yè)的文件名(如,index.html),禁止讀取文件名,重新導(dǎo)向文件,加上MIME類別,禁止目錄下的文件等.
注:.htaccess是一個(gè)完整的文件名,不是***.htaccess或其他格式,在/abc目錄下放置一個(gè).htaccess文件,那么/abc與它的子目錄都會(huì)被這個(gè)文件影響,但/index.html不會(huì)被影響.
.htaccess的建立和使用比較復(fù)雜點(diǎn),如果感興趣的朋友可以回帖發(fā)問(wèn),這里就不具體寫出來(lái)了,這種保護(hù)要比某些程序?qū)崿F(xiàn)的保護(hù)安全,那種方法可以通過(guò)被猜測(cè)方法獲取密碼,用.htaccess很難被解除,但文本方式的驗(yàn)證會(huì)比較慢,對(duì)少量用戶沒(méi)影響,但對(duì)大量用戶就必須使用帶數(shù)據(jù)模塊的驗(yàn)證了,這需要編譯源代碼時(shí)候開啟模塊,默認(rèn)是不開啟的.
八:讓apache運(yùn)行在"監(jiān)牢"中
"監(jiān)牢"的意思是指通過(guò)chroot機(jī)制來(lái)更改某個(gè)軟件運(yùn)行時(shí)所能看到的根目錄,簡(jiǎn)單說(shuō),就是被限制在指定目錄中,保證軟件只能對(duì)該目錄與子目錄文件有所動(dòng)作,從而保證整個(gè)服務(wù)器的安全,即使被破壞或侵入,損傷也不大.
以前,unix/linux上的daemon都是以root權(quán)限啟動(dòng)的,當(dāng)時(shí),這是一件理所當(dāng)然的事情,像apache這樣的服務(wù)器軟件,需要綁定到80端口上來(lái)監(jiān)聽請(qǐng)求,而root是唯一有這種權(quán)限的用戶,隨著攻擊手段和強(qiáng)度的增加,這樣會(huì)使服務(wù)器受到相當(dāng)大的威脅,一但被利用緩沖區(qū)溢出漏洞,就可以控制整個(gè)系統(tǒng).現(xiàn)在的服務(wù)器設(shè)計(jì)通常以root啟動(dòng),然后進(jìn)程放棄root權(quán)限,改為某個(gè)低級(jí)的帳號(hào)運(yùn)行.這種方式顯然會(huì)降低對(duì)系統(tǒng)的危害,但攻擊者還是會(huì)尋找漏洞提升權(quán)限,即使無(wú)法獲得root權(quán)限,也可以刪除文件,涂改主頁(yè)等.
為了進(jìn)一步提高系統(tǒng)安全性,linux內(nèi)核引入chroot機(jī)制,chroot是內(nèi)核中的一個(gè)系統(tǒng)調(diào)用,軟件可以通過(guò)調(diào)用函數(shù)庫(kù)的chroot函數(shù),來(lái)更改某個(gè)進(jìn)程所能見到的跟目錄,比如,apache軟件安裝在/usr/local/httpd目錄,以root啟動(dòng)apache,這個(gè)root權(quán)限的父進(jìn)程會(huì)派生數(shù)個(gè)以nobody權(quán)限運(yùn)行的子進(jìn)程,父進(jìn)程監(jiān)聽80端口,然后交給某個(gè)子進(jìn)程處理,這時(shí)候子進(jìn)程所處的目錄續(xù)承父進(jìn)程,即/usr/local/httpd目錄,但是一但目錄權(quán)限設(shè)定錯(cuò)誤,被攻擊的apache子進(jìn)程可以訪問(wèn)/usr/local,/usr,/tmp甚至整個(gè)文件系統(tǒng),因?yàn)閍pache進(jìn)程所處的跟目錄仍然是整個(gè)文件系統(tǒng)的跟目錄,如果可以用chroot將apache限制在/usr/local/httpd/下,那么apache所存取的文件都被限制在/usr/local/httpd下,創(chuàng)建chroot監(jiān)牢的作用就是將進(jìn)程權(quán)限限制在文件目錄樹下,保證安全.
如果自己手動(dòng)apache的監(jiān)牢,將是很煩瑣和復(fù)雜的工作,需要牽扯到庫(kù)文件,這里可以使用jail包來(lái)簡(jiǎn)化監(jiān)牢的實(shí)現(xiàn)jail的官方網(wǎng)站為:有興趣可以逛逛這里也不寫出具體的創(chuàng)建過(guò)程稍微麻煩.
九:apache服務(wù)器防范Dos
apache服務(wù)經(jīng)常會(huì)碰到Dos攻擊,防范的主要手段是通過(guò)軟件,apahce Dos Evasive Maneuvers Module來(lái)實(shí)現(xiàn)的,它是一款mod_access的代替軟件,可以對(duì)抗DoS攻擊,該軟件可以快速拒絕來(lái)自相同地址對(duì)同一URL的重復(fù)請(qǐng)求,通過(guò)查詢內(nèi)部一張各子進(jìn)程的哈希表來(lái)實(shí)現(xiàn),可以到網(wǎng)址:http://online/.securityfocus.com/tools/上下載軟件
十:減少CGI和SSI風(fēng)險(xiǎn)
CGI腳本的漏洞已經(jīng)成為WEB服務(wù)器的首要安全隱患,通常是程序編寫CGI腳本產(chǎn)生了許多漏洞,控制CGI的漏洞除了在編寫時(shí)候注意對(duì)輸入數(shù)據(jù)的合法檢查,對(duì)系統(tǒng)調(diào)用的謹(jǐn)慎使用等因素外,首先使用CGI程序所有者的ID來(lái)運(yùn)行這些程序,即使被漏洞危害也僅限于該ID能訪問(wèn)的文件,不會(huì)對(duì)整個(gè)系統(tǒng)帶來(lái)致命的危害,因此需要謹(jǐn)慎使用CGI程序.
1.3版的apache集成了suEXEC程序,可以為apache提供CGI程序的控制支持,可以把suEXEC看做一個(gè)包裝器,在Apache接到CGI程序的調(diào)用請(qǐng)求后,把這個(gè)請(qǐng)求交給suEXEC來(lái)負(fù)責(zé)完成具體調(diào)用,并從suEXEC返回結(jié)果,suEXEC可以解決一些安全問(wèn)題,但會(huì)影響速度,如果是對(duì)安全性要求很高時(shí)候,建議使用suEXEC,此外還有一個(gè)軟件CGIWrap,它的安全性要高與suEXEC.
減少SSI腳本風(fēng)險(xiǎn),如果用exec等SSI命令運(yùn)行外部程序,也會(huì)存在類似CGI腳本風(fēng)險(xiǎn),除了內(nèi)部調(diào)試程序時(shí),應(yīng)使用:
option命令禁止其使用:
Option IncludesNOEXEC
十一:使用ssl加固Apache
使用具有SSL功能的服務(wù)器,可以提高網(wǎng)站敏感頁(yè)的安全性能,SSL工作與TCP/IP協(xié)議和HTTP協(xié)議之間,SSL可以加密互聯(lián)網(wǎng)上傳遞的數(shù)據(jù)流,提供身份驗(yàn)證,在線購(gòu)物而不必?fù)?dān)心別人竊取信用卡信息,在基于電子商務(wù)和基于web郵件的地方非常重要.SSL的應(yīng)用相對(duì)還是比較麻煩的,有需要的話,可以發(fā)貼或查看資料.