Apache服務器走到那裏,unix/linux就跟到那裏,這足以說明在WEB服務器領域Apache的優良性能與市場佔有率
這今天互聯網的大環境下,web服務已經成爲公司企業必不可少的業務,大多數的安全問題也跟隨而來,***重點也轉移爲web***,許多web與很有價值的客戶服務與電子商業活動結合在一塊兒,這也是吸引惡意***重要緣由。
先來了解下web所面臨的安全風險
HTTP拒絕服務***
***者經過某些手段使服務器拒絕對http應答,這使Apache對系統資源(cup時間與內存)需求巨增,最終形成系統變慢甚至徹底癱瘓,Apache服務器最大的缺點是,它的廣泛性使它成爲衆矢之的,Apache服務器無時無刻不受到DoS***威脅,主要有下邊幾種
1.數據包洪水***
一種中斷服務器或本地網絡的方法是數據包洪水***,它一般使用internet控制報文協議(ICMP,屬於網絡層協議)
包或是udp包,在最簡單的形式下,這些***都是使服務器或網絡負載太重,這意味這***者的網絡速度必須比目標主機網絡速度要快,使用udp包的優點是不會有任何包返回到***的計算機(udp效率要比tcp高17倍),而使用ICMP包的優點是***者能讓***更加富與變化,發送有缺陷的包會搞亂並鎖住受害者的網絡,目前流行的趨勢是***者欺騙服務器,讓其相信正在受來自
自身的洪水***
2.磁盤***
這是一種很不道德的***,它不只影響計算機的通訊,還破壞其硬件,僞造的用戶請求利用
寫命令***目標計算機硬盤,讓其超過極限,並強制關閉,結局很悲慘
3.路由不可達
一般DoS***,集中在路由器上,***者首先得到控制權並操縱目標機器,當***者能更改路由表條目時候,會致使整個網絡沒法通訊,這種***很陰險,隱蔽,由於網絡管理員須要排除的網絡不通緣由不少,其中一些緣由須要詳細分辨
4.分佈式拒絕服務***
這也是最具備威脅的DDoS***,名稱很容易理解,簡單說就是羣歐,不少客戶機同時單條服務器,你會發現你將傷痕累累,Apache服務器特別容易受到***,不管是DDos仍是隱藏來源的***,由於Apache無處不在,特別是爲Apache特地打造的病毒(特選SSL蠕蟲),潛伏在許多主機上,***者經過病毒能夠操縱大量被感染的機器,對特定目標發動一次浩大的DDoS***,經過將蠕蟲散播到大量主機,大規模的點對點***得以進行,除非你不提供服務,要否則幾乎沒法阻止這樣的***,這種***一般會定位到大型的網站上。
緩衝區溢出,這種***很廣泛,***者利用CGI程序編寫一些缺陷程序偏離正常的流程,程序使用靜態的內存分配,***者就能夠發送一個超長的請求使緩衝區溢出,好比,一些perl編寫的處理用戶請求的網關腳本,一但緩衝區溢出,***者就能夠執行惡意指令
非法獲取root權限
若是Apache以root權限運行,系統上一些程序的邏輯缺陷或緩衝區溢出漏洞,會讓***者很容易在本地系統獲取linux服務器上的管理者權限,在一些遠程狀況下,***者會利用一些以root身份執行的有缺陷的系統守護進程來取得root權限,或利用有缺陷的服務進程漏洞來取得普通用戶權限,以遠程登錄,進而控制整個系統。
這邊這些都是服務將會遇到的***手段,下邊來講,如何打造安全的Apache服務器
若是你能遵照下邊這些建議,那麼你將獲得一臺相對安全的apache服務器
一:勤打補丁
你必需要相信這個是最有用的手段,緩衝區溢出等漏洞都必須使用這種手段來防護,勤快點相信對你沒有壞處
在http:www.apache.org上最新的changelog中都寫有:bug fix ,security bug fix的字樣,作爲負責任的管理員要常常關注相關漏洞,及時升級系統添加補丁。使用最新安全版本對增強apache相當重要
二:隱藏和假裝Apache的版本
打亂***者的步驟,給***者帶來麻煩,相信是管理員願意看到的。軟件的漏洞信息和版本是相關的,在***者收集你服務軟件信息時候給與迷惑是個不錯的選擇,況且版本號,對***者來講至關與GPS定位同樣重要
默認狀況,系統會把apache版本模塊都顯示出來(http返回頭),若是列舉目錄的話,會顯示域名信息(文件列表正文),去除Apache版本號的方法是修改
配置文件,找到關鍵字,修改成下邊
ServerSignature off
ServerTokens prod
經過分析web服務器類型,大體能夠推測操做系統類型,win使用iis,linux廣泛apache,默認的Apache配置裏沒有任何信息保護機制,而且容許目錄瀏覽,經過目錄瀏覽,一般能夠獲得相似「apache/1.37 Server at apache.linuxforum.net Port 80」或「apache/2.0.49(unix)PHP/4.3.8」的信息
經過修改配置文件中的ServerTokens參數,能夠將Apache的相關信息隱藏起來,若是不行的話,多是提示信息被編譯在程序裏了,要隱藏須要修改apache的源代碼,而後從新編譯程序,以替換內容
編輯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,在修改配置文件爲上邊作過的,再次啓動apache後,用工具掃描,發現提示信息中已經顯示爲windows操做系統了
這個等於告訴惡意用戶不少有用信息,雖說不算開了門,但等於被告訴了門在那裏,仍是至關危險的
三:創建安全的目錄結構apache服務器包括四個目錄結構
ServerRoot #保存配置文件,二進制文件與其餘服務器配置文件
DocumentRoot #保存web站點內容,包括HTML文件和圖片等
ScripAlias #保存CGI腳本
Customlog 和 Errorlog #保存日誌和錯誤日誌
建議的目錄結構爲,以上四種目錄相互獨立而且不存在父子邏輯關係
注:
ServerRoot目錄只能爲root用戶訪問
DocumentRoot目錄應該可以被管理web站點內容的用戶訪問和使用apache服務器的apache用戶與組訪問
ScripAlias目錄應該只能被CGI開發人員和apache用戶訪問
Customlog 和 Errorlog只能被root訪問
下邊是一個安全目錄結構的事例
+-------/etc/
|
| +----/http (ServerRoot)
| +----/logs (Customlog 和 Errorlog)
|
+-------var/www
|
| +---/cgi-bin (ScripAlias)
| +---/html (DocumentRoot)
這樣的目錄結構是比較安全的,由於目錄之間獨立,某個目錄權限錯誤不會影響到其餘目錄
四:爲apache使用專門的用戶與組
按照最小特權的原則,須要給apache分配一個合適的權限,讓其可以完成web服務
注:
最小特權原則是系統安全中最基本的原則之一,限制使用者對系統及數據進行存取所須要的最小權限,保證用戶能夠完成任務,同時也確保被竊取或異常操做所形成的損失
必須保證apache使用一個專門的用戶與組,不要使用系統預約的賬戶,好比nobody用戶與nogroup組
由於只有root用戶能夠運行apache,DocumentRoot應該可以被管理web站點內容的用戶訪問和使用apache服務器的apache用戶與組訪問,例如,但願「test」用戶在web站點發布內容,而且能夠以httpd身份運行apache服務器,能夠這樣設定
groupadd webteam
usermod -G webteam test
chown -R httpd.webteam /www/html
chmod -R 2570 /www/htdocs
只有root能訪問日誌,推薦這樣的權限
chown -R root.root /etc/logs
chown -R 700 /etc/logs
五:web目錄的訪問策略
對於能夠訪問的web目錄,要使用相對保守的途徑進行訪問,不要讓用戶查看任何目錄索引列表
禁止使用目錄索引:
apache在接到用戶對一個目錄的訪問時,會查找DirectoryIndex指令指定的目錄索引文件,默認爲index.html,若是該文件不存在,那麼apache會建立動態列表爲用戶顯示該目錄的內容,這樣就會
暴露web站點結構,所以須要修改配置文件禁止顯示動態目錄索引,修改httpd.conf
Options -Indexes FollowSymLinks
Options指令通知apache禁止使用目錄索引,FollowSymLinks表示不容許使用符號鏈接。
禁止默認訪問:
要的安全策略必需要禁止默認訪問的存在,只對指定的目錄開放權限,若是容許訪問/var/www/html目錄,使用以下設定
Order deny,allow
Allow from all
禁止用戶重載:
爲了禁止用戶對目錄配置文件(htaccess)進行重載(修改),能夠這樣設定
AllowOverride None
六:apache服務器訪問控制
apache的access.conf文件負責設置文件的訪問權限,能夠實現互聯網域名和ip地址的訪問控制
如容許192.168.1.1到192.168.1.254的主機訪問,能夠這樣設定
order deny,allow
deny from all
allow from pair 192.168.1.0/255.255.255.0
七:apache服務器的密碼保護
.htaccess文件是apache上的一個設置文件,它是一個文本文件,.htaccess文件提供了針對目錄改變配置的方法
既經過在一個特定的文檔目錄中放置一個包含一個或多個指令的文件(.htaccess文件),以做用於此目錄和子目錄。
.htaccess的功能包括設置網頁密碼,設置發生錯誤時出現的文件,改變首業的文件名(如,index.html),禁止讀取文件名,從新導向文件,加上MIME類別,禁止目錄下的文件等。
注:.htaccess是一個完整的文件名,不是***.htaccess或其餘格式,在/abc目錄下放置一個.htaccess文件,那麼/abc與它的子目錄都會被這個文件影響,但/index.html不會被影響
.htaccess的創建和使用比較複雜點,若是感興趣的朋友能夠回帖發問,這裏就不具體寫出來了,這種保護要比某些程序實現的保護安全,那種方法能夠經過被猜想方法獲取密碼,用.htaccess很難被破解,但文本方式的驗證會比較慢,對少許用戶沒影響,但對大量用戶就必須使用帶數據模塊的驗證了,這須要編譯源代碼時候開啓模塊,默認是不開啓的
八:讓apache運行在「監牢」中
「監牢」的意思是指經過chroot機制來更改某個軟件運行時所能看到的根目錄,簡單說,就是被限制在指定目錄中,保證軟件只能對該目錄與子目錄文件有所動做,從而保證整個服務器的安全,即便被破壞或侵入,損傷也不大
之前,unix/linux上的daemon都是以root權限啓動的,當時,這是一件理所固然的事情,像apache這樣的服務器軟件,須要綁定到80端口上來監聽請求,而root是惟一有這種權限的用戶,隨着***手段和強度的增長,這樣會使服務器受到至關大的威脅,一但被利用緩衝區溢出漏洞,就能夠控制整個系統。如今的服務器設計一般以root啓動,而後進程放棄root權限,改成某個低級的賬號運行。這種方式顯然會下降對系統的危害,但***者仍是會尋找漏洞提高權限,即便沒法得到root權限,也能夠刪除文件,塗改主頁等
爲了進一步提升系統安全性,linux內核引入chroot機制,chroot是內核中的一個系統調用,軟件能夠經過調用函數庫的chroot函數,來更改某個進程所能見到的跟目錄,好比,apache軟件安裝在/usr/local/httpd目錄,以root啓動apache,這個root權限的父進程會派生數個以nobody權限運行的子進程,父進程監聽80端口,而後交給某個子進程處理,這時候子進程所處的目錄續承父進程,即/usr/local/httpd目錄,可是一但目錄權限設定錯誤,被***的apache子進程能夠訪問/usr/local , /usr ,/tmp甚至整個文件系統,由於apache進程所處的跟目錄仍然是整個文件系統的跟目錄,若是能夠用chroot將apache限制在/usr/local/httpd/下,那麼apache所存取的文件都被限制在/usr/local/httpd下,建立chroot監牢的做用就是將進程權限限制在文件目錄樹下,保證安全。
若是本身手動apache的監牢,將是很煩瑣和複雜的工做,須要牽扯到庫文件,這裏可使用jail包來簡化監牢的實現
jail的官方網站爲:
http://www.jmcresearch.com
有興趣能夠逛逛
這裏也不寫出具體的建立過程稍微麻煩,若是對安全有須要的話,請回帖,會及時補上
九:apache服務器防範Dos
apache服務常常會碰到Dos***,防範的主要手段是經過軟件,
apahce Dos Evasive Maneuvers Module
來實現的,它是一款mod_access的代替軟件,能夠對抗DoS***,該軟件能夠快速拒絕來自相同地址對同一URL的重複請求,經過查詢內部一張各子進程的哈希表來實現
能夠到網址:http://online/.securityfocus.com/tools/ 上下載軟件
十:減小CGI和SSI風險
CGI腳本的漏洞已經成爲WEB服務器的首要安全隱患,一般是程序編寫CGI腳本產生了許多漏洞,控制CGI的漏洞除了在編寫時候注意對輸入數據的合法檢查,對系統調用的謹慎使用等因素外,首先使用CGI程序全部者的ID來運行這些程序,即便被漏洞危害也僅限於該ID能訪問的文件,不會對整個系統帶來致命的危害,所以須要謹慎使用CGI程序。
1.3版的apache集成了suEXEC程序,能夠爲apache提供CGI程序的
控制支持,能夠把suEXEC看作一個包裝器,在Apache接到CGI程序的調用請求後,把這個請求交給suEXEC來負責完成具體調用,並從suEXEC返回結果,suEXEC能夠解決一些安全問題,但會影響速度
若是是對安全性要求很高時候,建議使用suEXEC,此外還有一個軟件CGIWrap,它的安全性要高與suEXEC
減小SSI腳本風險,若是用exec等SSI命令運行外部程序,也會存在相似CGI腳本風險,除了內部調試程序時,應使用
option命令禁止其使用:
Option IncludesNOEXEC
十一:使用ssl加固Apache
使用具備SSL功能的服務器,能夠提升網站敏感頁的安全性能,SSL工做與TCP/IP協議和HTTP協議之間
SSL能夠加密互聯網上傳遞的數據流,提供身份驗證,在線購物而沒必要擔憂別人竊取信用卡信息,在基於電子商務和基於web郵件的地方很是重要。
SSL的應用相對仍是比較麻煩的,有須要的話,能夠發貼或查看資料,這幾就很少寫,篇幅不夠