Web 服務器也稱爲 WWW 服務器或 HTTP 服務器 (HTTP Server),它是 Internet 上最多見也是使用最頻繁的服務器之一,Web 服務器可以爲用戶提供網頁瀏覽、論壇訪問等等服務。html
因爲用戶在經過 Web 瀏覽器訪問信息資源的過程當中,無須再關心一些技術性的細節,並且界面很是友好,於是 Web 在 Internet 上一推出就獲得了爆炸性的發展。如今 Web 服務器已經成爲 Internet 上最大的計算機羣,Web 文檔之多、連接的網絡之廣,也使人難以想像。所以,Web 服務器軟件的數量也開始增長,Web 服務器軟件市場的競爭也愈來愈激烈。本文所討論的就是一款最經常使用的 Web 服務器軟件—— Apache。linux
Apache 是一個免費的軟件,用戶能夠免費從 Apache 的官方網站下載。任何人均可以參加其組成部分的開發。Apache 容許世界各地的人對其提供新特性。當新代碼提交到 Apache Group 後,Apache Group 對其具體內容進行審查並測試和質量檢查。若是他們滿意,該代碼就會被集成到 Apache 的主要發行版本中。apache
Apache 的其餘主要特徵有:編程
支持最新的 HTTP 協議:是最早支持 HTTP1.1 的 Web 服務器之一,其與新的 HTTP 協議徹底兼容,同時與 HTTP1.0、HTTP1.1 向後兼容。Apache 還爲支持新協議作好了準備。瀏覽器
簡單而強大的基於文件的配置:該服務器沒有爲管理員提供圖形用戶界面,提供了三個簡單可是功能異常強大的配置文件。用戶能夠根據須要用這三個文件爲所欲爲地完成本身但願的 Apache 配置。安全
支持通用網關接口(CGI):採用 mod_cgi 模塊支持 CGI。Apache 支持 CGI/1.1 標準,而且提供了一些擴充。服務器
支持虛擬主機:是首批既支持 IP 虛擬主機又支持命名虛擬主機的 Web 服務器之一。網絡
支持 HTTP 認證:支持基於 Web 的基本認證。它還有望支持基於消息摘要的認證。tcp
內部集成 Perl:Perl 是 CGI 腳本編程的事實標準。Apache 對 Perl 提供了良好的支持,經過使用其 mod_perl 模塊,還能夠將 Perl 的腳本裝入內存。分佈式
集成代理服務器:用戶還能夠選擇 Apache 做爲代理服務器。
支持 SSL:因爲版本法和美國法律在進出口方面的限制,Apache 自己不支持 SSL。可是用戶能夠經過安裝 Apache 的補丁程序集合(Apache-SSL)使得 Apache 支持 SSL。
支持 HTTP Cookie:經過支持 Cookie,能夠對用戶瀏覽 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 配置文件設置不當引發的安全問題
惡意者能夠隨意下載或修改刪除系統文件。這主要涉及到對訪問者的內容和權限的限制。
要應對上述這些安全威脅,要從 Apache 服務器端配置、運行環境、通訊鏈路安全保障、安全模塊使用、日誌管理等各方面、全方位的進行保障,下面將進行分門別類的詳細介紹。
通常狀況下,在 Linux 下啓動 Apache 服務器的進程 httpd 須要 root 權限。因爲 root 權限太大,存在許多潛在的對系統的安全威脅。一些管理員爲了安全的緣由,認爲 httpd 服務器不可能沒有安全漏洞,於是更願意使用普通用戶的權限來啓動服務器。http.conf 主配置文件裏面有以下 2 個配置是 Apache 的安全保證,Apache 在啓動以後,就將其自己設置爲這兩個選項設置的用戶和組權限進行運行,這樣就下降了服務器的危險性。
User apache
Group apache
須要特別指出的是:以上 2 個配置在主配置文件裏面是默認選項,當採用 root 用戶身份運行 httpd 進程後,系統將自動將該進程的用戶組和權限改成 apache,這樣,httpd 進程的權限就被限制在 apache 用戶和組範圍內,於是保證了安全。
Apache 服務器的版本號能夠做爲黑客入侵的重要信息進行利用,他們一般在得到版本號後,經過網上搜索針對該版本服務器的漏洞,從而使用相應的技術和工具備針對性的入侵,這也是滲透測試的一個關鍵步驟。所以,爲了不一些沒必要要的麻煩和安全隱患,能夠經過主配置文件 httpd.conf 下的以下兩個選項進行:
(1)ServerTokens:該選項用於控制服務器是否響應來自客戶端的請求,向客戶端輸出服務器系統類型或者相應的內置模塊等重要信息。Red Hat Enterprise Linux 5 操做系統在主配置文件中提供全局默認控制閾值爲 OS,即 ServerTokens OS。它們將向客戶端公開操做系統信息和相關敏感信息,因此保證安全狀況下須要在該選項後使用「ProductOnly」,即 ServerTokens ProductOnly。
(2)ServerSignature:該選項控制由系統生成的頁面(錯誤信息等)。默認狀況下爲 off,即 ServerSignature off,該狀況下不輸出任何頁面信息。另外一狀況爲 on,即 ServerSignature on,該狀況下輸出一行關於版本號等相關信息。安全狀況下應該將其狀態設爲 off。
圖 1 和圖 2 爲安全設定這兩個選項先後正常狀況下和錯誤狀況下的輸出頁面(經過 Rhel5 中的 Mozilla Firefox 瀏覽器訪問 Rhel5 中的 Apache 服務器)的詳細對比。能夠清楚看到,安全設定選項後,能夠充分地向客戶端用戶隱藏 Linux 操做系統信息和 Apache 服務器版本信息。
要從主目錄之外的其餘目錄中進行發佈,就必須建立虛擬目錄。虛擬目錄是一個位於 Apache 的主目錄外的目錄,它不包含在 Apache 的主目錄中,但在訪問 Web 站點的用戶看來,它與位於主目錄中的子目錄是同樣的。每一個虛擬目錄都有一個別名,用戶 Web 瀏覽器中能夠經過此別名來訪問虛擬目錄,如 http:// 服務器 IP 地址 / 別名 / 文件名,就能夠訪問虛擬目錄下面的任何文件了。
使用 Alias 選項能夠建立虛擬目錄。在主配置文件中,Apache 默認已經建立了兩個虛擬目錄。這兩條語句分別創建了「/icons/」和「/manual」兩個虛擬目錄,它們對應的物理路徑分別是「/var/www /icons/」和「/var/www/manual」。在主配置文件中,用戶能夠看到以下配置語句:
Alias /icons/ "/var/www/icons/"
Alias /manual "/var/www/manual"
在實際使用過程當中,用戶能夠本身建立虛擬目錄。好比,建立名爲 /user 的虛擬目錄,它所對應的路徑爲上面幾個例子中經常使用的 /var/www/html/rhel5:
Alias /test "/var/www/html/rhel5"
若是須要對其進行權限設置,能夠加入以下語句:
<Directory 「/var/www/html/rhel5」> AllowOverride None Options Indexes Order allow,deny Allow from all </Directory>
設置該虛擬目錄和目錄權限後,可使用客戶端瀏覽器進行測試驗證,採用別名對該目錄中的文件進行訪問,瀏覽結果如圖 3 所示。
Apache 服務器須要綁定到 80 端口上來監聽請求,而 root 是惟一有這種權限的用戶,隨着攻擊手段和強度的增長,這樣會使服務器受到至關大的威脅,一但被利用緩衝區溢出漏洞,就能夠控制整個系統。爲了進一步提升系 統安全性,Linux 內核引入 chroot 機制,chroot 是內核中的一個系統調用,軟件能夠經過調用函數庫的 chroot 函數,來更改某個進程所能見到的根目錄。
chroot 機制即將某軟件運行限制在指定目錄中,保證該軟件只能對該目錄及其子目錄的文件有所動做,從而保證整個服務器的安全。在這種狀況下,即便出現黑客或者不法 用戶經過該軟件破壞或被侵入系統,Linux 系統所受的損壞也僅限於該設定的根目錄,而不會影響到整個系統的其餘部分。
將軟件 chroot 化的一個問題是該軟件運行時須要的全部程序、配置文件和庫文件都必須事先安裝到 chroot 目錄中,一般稱這個目錄爲 chroot「監牢」。若是在「監牢」中運行 httpd,那麼用戶根本看不到 Linux 文件系統中那個真正的目錄,從而保證了 Linux 系統的安全。
在使用該技術的時候,通常狀況下須要事先建立目錄,並將守護進程的可執行文件 httpd 複製到其中。同時,因爲 httpd 須要幾個庫文件,因此須要把 httpd 程序依賴的幾個 lib 文件同時也拷貝到同一個目錄下,所以手工完成這一工做是很是麻煩的。幸運的是,用戶能夠經過使用開源的 jail 軟件包來幫助簡化 chroot「監牢」創建的過程,具體步驟以下所示:Jail 官方網站是:http://www.jmcresearch.com/projects/。
首先將其下載,而後執行以下命令進行源代碼包的編譯和安裝:
#tar xzvf jail_1.9a.tar.gz #cd jail/src #make
jail 軟件包提供了幾個 Perl 腳本做爲其核心命令,包括 mkjailenv、addjailuser 和 addjailsw,他們位於解壓後的目錄 jail/bin 中。這幾個命令的基本用途以下所示:
mkjailenv:用於建立 chroot「監牢」目錄,而且從真實文件系統中拷貝基本的軟件環境。
addjailsw:用於從真實文件系統中拷貝二進制可執行文件及其相關的其它文件(包括庫文件、輔助性文件和設備文件)到該「監牢」中。
addjailuser:建立新的 chroot「監牢」用戶。
採用 jail 建立監牢的步驟以下所示;
(1)首先須要中止目前運行的 httpd 服務,而後創建 chroot 目錄,命令以下所示。該命令將 chroot 目錄創建在路徑 /root/chroot/httpd 下:
# service httpd stop # mkjailenv /root/chroot/httpd kjailenv A component of Jail (version 1.9 for linux) http://www.gsyc.inf.uc3m.es/~assman/jail/ Juan M. Casillas <assman@gsyc.inf.uc3m.es> Making chrooted environment into /root/chroot/httpd Doing preinstall() Doing special_devices() Doing gen_template_password() Doing postinstall() Done.
(2)爲「監牢」添加 httpd 程序,命令以下:
# ./addjailsw /root/chroot/httpd/ -P /usr/sbin/httpd addjailsw A component of Jail (version 1.9 for linux) http://www.gsyc.inf.uc3m.es/~assman/jail/ Juan M. Casillas <assman@gsyc.inf.uc3m.es> Guessing /usr/sbin/httpd args(0) Warning: can't create /proc/mounts from the /proc filesystem Done.
在上述過程當中,用戶不須要在乎那些警告信息,由於 jail 會調用 ldd 檢查 httpd 用到的庫文件。而幾乎全部基於共享庫的二進制可執行文件都須要上述的幾個庫文件。
(3)而後,將 httpd 的相關文件拷貝到「監牢」的相關目錄中,命令以下所示:
# mkdir -p /root/chroot/httpd/etc # cp – a /etc/httpd /root/chroot/httpd/etc/ 。。。。。。
添加後的目錄結構以下所示:
# ll 總計 56 drwxr-xr-x 2 root root 4096 03-23 13:44 dev drwxr-xr-x 3 root root 4096 03-23 13:46 etc drwxr-xr-x 2 root root 4096 03-23 13:46 lib drwxr-xr-x 2 root root 4096 03-23 13:46 selinux drwsrwxrwx 2 root root 4096 03-23 13:46 tmp drwxr-xr-x 4 root root 4096 03-23 13:46 usr drwxr-xr-x 3 root root 4096 03-23 13:46 var
(4)從新啓動 httpd,並使用 ps 命令檢查 httpd 進程,發現該進程已經運行在監牢中,以下所示:
# ps -aux | grep httpd Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ root 3546 0.6 0.3 3828 1712 pts/2 S 13:57 0:00 /usr/sbin/nss_pcache off /etc/httpd/alias root 3550 14.2 3.6 49388 17788 ? Rsl 13:57 0:00 /root/chroot/httpd/httpd apache 3559 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3560 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3561 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3562 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3563 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3564 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3565 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd apache 3566 0.2 1.4 49388 6888 ? S 13:57 0:00 /root/chroot/httpd/httpd root 3568 0.0 0.1 4124 668 pts/2 R+ 13:57 0:00 grep httpd
待補充----