+Y%Ke-}sm Apache服務器的主要安全缺陷 
c2d%3LQ!}  
!/5+P 正 如我們前言所說儘管Apache服務器應用最為廣泛,設計上非常安全的程序。但是同其它應用程序一樣,Apache也存在安全缺陷。畢竟它是完全源代碼, Apache服務器的安全缺陷主要是使用HTTP協議進行的拒絕服務攻擊(denial of service)、緩衝區溢出攻擊以及被攻擊者獲得root權限三缺陷和最新的惡意的攻擊者進行「拒絕服務」(DoS)攻擊。合理的網絡配置能夠保護 Apache服務器免遭多種攻擊。我們來介紹一下主要的安全缺陷: 
QH9@POzN (1)使用HTTP協議進行的拒絕服務攻擊(denial of service)的安全缺陷 
%cg ,~0}1R 這種方法攻擊者會通過某些手段使服務器拒絕對HTTP應答。這樣會使Apache對系統資源(CPU時間和內存)需求的劇增,最終造成Apache系統變慢甚至完全癱瘓。 
9?VbAYlX (2)緩衝區溢出的安全缺陷 
}Hi&ymm# 該方法攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態分配的內存保存請求數據,攻擊者就可以發送一個超長請求使緩衝區溢出。 
J<M5df~ (3)被攻擊者獲得root權限的安全缺陷 
r6U}-[sp( 該安全缺陷主要是因為Apache服務器一般以root權限運行(父進程),攻擊者會通過它獲得root權限,進而控制整個Apache系統。 
E|dl!L82 (4)惡意的攻擊者進行「拒絕服務」(DoS)攻擊的安全缺陷 
R -Gj<A 這個最新在6月17日發現的漏洞,它主要是存在於Apache的chunk encoding中,這是一個HTTP協議定義的用於接受web用戶所提交數據的功能。 所有說使用最高和最新安全版本對於加強Apache Web服務器的安全是至關重要的。 
請廣大Apache服務器管理員去http://www.apache.org/dist/httpd/ kkd= +3 下載補丁程序以確保其WEB服務器安全! 
0:c*!6N7k  
XzsH1a3B 正確維護和配置Apache服務器 
+_FEf$* 雖然Apache服務器的開發者非常注重安全性,由於Apache服務器其龐大的項目, 難免會存在安全隱患。正確維護和配置Apache WEB服務器就很重要了。我們應注意的一些問題: 
w< ^>7 (1)Apache服務器配置文件 
4Ws0`oV4Yy Apache Web服務器主要有三個配置文件,位於/usr/local/apache/conf目錄下。 這三個文件是: 
{=+R.Kw httpd.conf----->主配置文件 
t$0UK02 srm.conf------>填加資源文件 
-4UU27xy access.conf--->設置文件的訪問權限 
註:具體配置可以參考:http://httpd.apache.org/docs/mod/core.html _#9syp0(1�  
rN?kH)6M (2)Apache服務器的目錄安全認證 
P`W'lKl 在Apache Server中是允許使用 .htaccess做目錄安全保護的,欲讀取這保護的目錄需要先鍵入正確用戶帳號與密碼。這樣可做為專門管理網頁存放的目錄或做為會員區等。在保護的目錄放置一個檔案,檔名為.htaccss  
.t(cPi .I] AuthName "會員專區"  
-uw P%"% AuthType "Basic"  
ody})=% 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 這樣就可以保護目錄內的內容,進入要用合法的用戶. 
JPB{2J 註:採用了Apache內附的模組。 
xC|.InyDH 也可以採用在httpd.conf中加入:   
\5V@3"jua` options indexes followsymlinks   
! -QMoI& allowoverride authconfig   
x;t-wDhGw order allow,deny   
TX\T5I:$ allow from all  
N&o`ph (3)Apache服務器訪問控制 
wih$0GL 我們就要看三個配置文件中的第三個文件了,即access.conf文件,它包含一些指令控制允許什麼用戶訪問Apache目錄。應該把deny from all設為初始化指令,再使用allow from指令打開訪問權限。 
7b{HR+S <directory /usr/local/http/docs/private> 
6bg<\S}M <limit> 
(9Trmy$A order deny,allow 
XM-XA5E XD deny from all 
Ea;{N 36 allow from safechina.net 
>V^^['z </limit> 
lNA5`\#;L </directory> 
u J5V= 設置允許來自某個域、IP地址或者IP段的訪問。 
"C%e {O (4)Apache服務器的密碼保護問題 
uM['5{0!C2 我們再使用.htaccess文件把某個目錄的訪問權限賦予某個用戶。系統管理員需要在httpd.conf或者rm.conf文件中使用 AccessFileName指令打開目錄的訪問控制。如: 
-&&c>E AuthName PrivateFiles 
]rQCTS/9 AuthType Basic 
u?aif|?0 AuthUserFile /path/to/httpd/users 
w3=n(yME require Phoenix 
}C'jPN(.qk # htpasswd -c /path/to/httpd/users Phoenix 
; 5&aa2   
spr"(3NvE 設置Apache服務器的WEB和文件服務器  
我們在Apache服務器上存放WEB服務器的文件,供用戶訪問,並設置/home/ftp/pub目錄為文件存放區域,用http://download.your.com/pub/ k!$jGT_q 來訪問。在防火牆上設置apache反向代理技術,由防火牆代理訪問。   
,E A!,8R" (1)Apache服務器的設置  
apache服務器採用默認配置。主目錄為/home/httpd/html,主機域名為Phoenix.your.com, 且別名到www.your.com /Ri�BWa 中, 並且設置srm.conf加一行別名定義如下: 
mR 8,^nUF Alias /pub /home/ftp/pub/  
5di2 更改默認應用程序類型定義如下:   
gY6-P4k DefaultType application/octet-stream  
aD0y`Z,on 最後在/etc/httpd/conf/access.conf中增加一項定義   
<n]CHY}Opy Options Indexes   
nYb!X[c AllowOverride AuthConfig   
xDxZCC, order allow,deny   
j.i P5G> allow from all  
T|!b-+W8^N 註: Options Indexes允許在找不到index.html文件的情況下允許列出目錄/文件列表。AllowOverride  AuthConfig允許做基本的用戶名和口令驗證。這樣的話,需要在/home/ftp/pub目錄下放入.htaccess,內容如下:   
])nP#-C@ [root@ pub]# more .htaccess   
?ovL+F AuthName Branch Office Public Software Download Area   
= _GmLpU5 AuthType Basic   
fJ {gmY\|& AuthUserFile /etc/.usrpasswd   
{ �tPro require valid-user   
XmKwv jHi 用# htpasswd -c /etc/.usrpasswd user1  分別創建不同的允許訪問/pub下文件服務的外部用戶名和口令。 
r.i`>v6, (2)在防火牆上配置反向代理技術. 
0%2 Ivn>: 在/etc/httpd/conf/httpd.conf  中加入 NameVirtualHost xxx.xxx.xxx.xxx # xxx.xxx.xxx.xxx ----->是防火牆外部在互聯網上永久IP地址   
servername www.your.com 9d]dCX 9     
}5PE;&=c errorlog /var/log/httpd/error_log   
o:uG} lr transferlog /var/log/httpd/access_log   
hw 4f0OeO rewriteengine on   
qGh<ZoN proxyrequests off   
;F#Vs5R\ usecanonicalname off   
rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 ~9Y>5'Y|>n  Apache服務器的IP地址。  
servername http://download.your.com/pub/ 1.C?Wv1S  
=Xw;<^wJ errorlog /var/log/httpd/download/error_log   
QiT800CN 1 transferlog /var/log/httpd/download/access_log   
b %{1j%y rewriteengine on   
4K�$Xd5d' proxyrequests off   
l<8ZH~/ A usecanonicalname off   
rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1  Wz#x=uk  同上Apache服務器的IP地址。 
設置防火牆上的DNS,讓download.your.com和www.your.com !V:Nc^e2D 都指向防火牆的外部網地址xxx.xxx.xxx.xxx。 
http://www.your.com訪問主頁,用http://download.your.com/pub/ ^LMe{VU: 訪問公共文件的下載區。 
註: 還需要在apache服務器主機上建立目錄/var/log/httpd/download/,否則會出錯。另外,也可以設置防火牆主機上的 /home/httpd/html/index.html的屬性為750來阻止訪問,這是防外部用戶能訪問到防火牆上的Apache服務器的http://www.your.com Oc_Ud = 中。  
Lz,(J3E 總結:Apache Server是一個非常優秀,非常棒的服務器,只要你正確配置和維護好Apache服務器, 
Bid6#\ ;1 你就會感受到Apache Server 所帶來的好處,同樣希望你能夠通過閱讀本文達到理論和實踐雙豐收的目的。 
Jf^YHD 驗證你的Apache來源途徑 
UZw?R3xg6 不 要以為在Google上能夠搜索到合適的Apache版本。如果你需要下載最新版本的Apache,那麼你最好通過一個權威的鏡像站點來下載。然而,即使 這樣也可能有問題,事實上,曾經就有黑客入侵過apache.org官方網站。所以,採用類似PGP的工具來驗證Apache的數字簽名就顯得尤為重要。 
i!$ ]{}e 保持更新Apache的補丁程序 
"aM;5lBj; 如 果你安裝了Apache,你就必須及時更新安全補丁。如果沒有及時的更新,那你的系統很容易受到網絡上那些高危病毒的攻擊。幸好,有幾個簡便方法可以更新 Apache的補丁。參考我們關於保持更新Apache補丁的文章瞭解更多關於Apache服務器公告列表、Linux包管理系統和RedHat操作系統 更新服務的信息。 
l3|}+q^ 避免使用.htaccess文件(分佈式配置文件) 
&t?myX$G 很 多情況下需要幾個管理員和內容管理者共同管理Apache服務器。一個常用的共享管理辦法就是使用.htaccess文件,這樣可以很靈活地對管理員以外 的用戶提供不同的配置控制權限。然而,這些文件也使得在集中安全管理之外還有相當多的安全控制權限——這些文件允許安全專業人士以外的其他用戶改變服務器 的訪問控制許可配置。那些對粒度訪問控制根本不熟悉的用戶修改的配置可能在無意中會危害到你的系統安全。所以,除非必須使用,否則我們應該儘可能地避免使 用這種訪問控制系統。如果需要瞭解更多相關信息,可以參考「摒棄Apache服務器中的.htaccess文件」這篇文章。 
v;oL5Y5 監視系統日誌 
9{-�;D-Q2 Apache 為管理員提供了很全面的日誌管理工具來對服務器的活動進行事後分析。Apache提供了多種不同的記錄日誌,但是對安全專業人士最重要的是訪問日誌。這個 靈活的工具還具有了相當多的自定義功能,你可以按照你的需要很方便地記錄儘可能多或者少的日誌,以保證有效的分析。至少,你應該記錄那些失敗的認證企圖和 系統產生的錯誤。使用像AWStats一樣的免費工具可以很輕鬆地完成分析任務。但是必須明確的一點是:監視日誌只是一種事後分析手段。你可以利用它回顧 和判斷對服務器的攻擊(和攻擊企圖),但是希望及時查看日誌來對緊急情況做出快速反應是不可能的。如果需要進行預判反應,你應該考慮使用入侵預防系統如信 息安全雜誌評選的2003年度最新興技術獎得主:Lucid Security公司的ipAngel系統。 
IZ$gmuZ; 管理文件系統 
u(MyHd2 我 們已經討論了使用(或不使用).htaccess文件對管理文件訪問權限的重要性。禁止通過文件系統許可對Apache服務器進行非授權修改也是很重要 的。特別值得一提的是,你應該保證只有根用戶才能修改存儲在「/usr/local/apache 」目錄的文件(或者你選擇的任何Apache服務器的根目錄)。確保只有根用戶才能修改日誌文件也很關鍵,這樣可以防止用戶掩蓋他們的操作。 
}3@[w^  
"z kcL' Apache 服務器日常配置 
zw6Ym_ k 1、如何設 置請求等待時間 
Ef))c7TG     在httpd.conf裡面設置: 
|RX0? /1     TimeOut n 
4()E5     其中n為整數,單位是秒。 
`U9vrenbR     設置這個TimeOut適用於三種情況: 
 jG6 + 2、如何接收一個get請求的總時間 
]mrS7m#     接收一個post和put請求的TCP包之間的時間 
-,+ KTk>     TCP包傳輸中的響應(ack)時間間隔 
_�Q!Zny 3、如何使得apache監聽在特定的端口 
@lf`X!     修改httpd.conf裡面關於Listen的選項,例如: 
$d.`]XexL     Listen 8000 
\`N)s%Scxy     是使apache監聽在8000端口 
T,ou]z     而如果要同時指定監聽端口和監聽地址,可以使用: 
@QB6S?IUJ     Listen 192.170.2.1:80 
gd< f(0     Listen 192.170.2.5:8000 
W !=%} /     這樣就使得apache同時監聽在192.170.2.1的80端口和192.170.2.5的8000端口。 
qc'"OW     當然也可以在httpd.conf裡面設置: 
S#5TR:J#     Port 80 
$"k (2   這樣來實現類似的效果。 
?s[sg0T~ 4、如何設置apache的最大空閒進程數 
~*[+)hmT   修改httpd.conf,在裡面設置: 
:Rl |% kL   MaxSpareServers n 
S0Zo1m"D   其中n是一個整數。這樣當空閒進程超過n的時候,apache主進程會殺掉多餘的空閒進程而保持空閒進程在n,節省了系統資源。如果在一個apache非常繁忙的站點調節這個參數才是必要的,但是在任何時候把這個參數調到很大都不是一個好主意。 
tG]Gg#\a )   同時也可以設置: 
zWq[ /"+Y   MinSpareServers n 
?)].bx   來限制最少空閒進程數目來加快反應速度。 
}&2P�!P 5、apache如何設置啟動時的子服務進程個數 
o@=lE@mB   在httpd.conf裡面設置: 
[3\ev|nzn9   StartServers 5 
R XP4\cY   這樣啟動apache後就有5個空閒子進程等待接受請求。 
JjhSpn    也可以參考MinSpareServers和MaxSpareServers設置。 
@5#B@=y$h 6、如何在apache中設置每個連接的最大請求數 
wFzsg,o]y   在httpd.conf裡面設置: 
S6mFAd px   MaxKeepAliveRequests 100 
%QcRy[   這樣就能保證在一個連接中,如果同時請求數達到100就不再響應這個連接的新請求,保證了系統資源不會被某個連接大量佔用。但是在實際配置中要求儘量把這個數值調高來獲得較高的系統性能。 
S-xZ;'QG 7、如何在apache中設置session的持續時間 
#3M 2x:   在apache1.2以上的版本中,可以在httpd.conf裡面設置: 
r/YnNYP   KeepAlive on 
~Xvh)q +   KeepAliveTimeout 15 
/`\+1: k   這樣就能限制每個session的保持時間是15秒。session的使用可以使得很多請求都可以通過同一個tcp連接來發送,節約了網絡資源和系統資源。 
uyJhW7 8、如何使得apache對客戶端進行域名驗證 
,EavyrQ-   可以在httpd.conf裡面設置: 
h04b-Yd   HostnameLookups on off double 
>HfQgpR!/   如果是使用on,那麼只有進行一次反查,如果用double,那麼進行反查之後還要進行一次正向解析,只有兩次的結果互相符合才行,而off就是不進行域名驗證。 
FO],E9V   如果為了安全,建議使用double;為了加快訪問速度,建議使用off。 
6^C ~c# 9、如何使得apache只監聽在特定的ip 
6{J?IYaV[   修改httpd.conf,在裡面使用 
k+2E>V   BindAddress 192.168.0.1 
2>l}y,ft   這樣就能使得apache只監聽外界對192.168.0.1的http請求。如果使用: 
@(6E04-MX*   BindAddress * 
\Di=,(3$H   就表明apache監聽所有網絡接口上的http請求。 
rAqBZly   當然用防火牆也可以實現。 
/qDPNIandR 10、apache中如何限制http請求的消息主體的大小 
Frc   在httpd.conf裡面設置: 
>L gX4xQ{   LimitRequestBody n 
3= g*F a   n是整數,單位是byte。 
wU $`,Wo   cgi腳本一般把表單裡面內容作為消息的主體提交給服務器處理,所以現在消息主體的大小在使用cgi的時候很有用。比如使用cgi來上傳文件,如果有設置: 
?,wBCaxjl   LimitRequestBody 102400 
lwgUMff?   那麼上傳文件超過100k的時候就會報錯。 
6x _^%=d 11、如何修改apache的文檔根目錄 
"~W R90AC]   修改httpd.conf裡面的DocumentRoot選項到指定的目錄,比如: 
}ECa+:{yM   DocumentRoot /www/htdocs 
  這樣http://localhost/index.html hW .& 就是對應/www/htdocs/index.html 
I:I\f( 12、如何修改apache的最大連接數 
MV#Sp">p   在httpd.conf中設置: 
R~Rp#%f   MaxClients n 
B"8iRkg_   n是整數,表示最大連接數,取值範圍在1和256之間,如果要讓apache支持更多的連接數,那麼需要修改源碼中的httpd.h文件,把定義的HARD_SERVER_LIMIT值改大然後再編譯。 
{jb f3V 13、如何使每個用戶有獨立的cgi-bin目錄 
wL+s(i   有兩種可選擇的方法: 
}g olVWl   (1)在Apache配置文件裡面關於public_html的設置後面加入下面的屬性: 
VU2.+{   ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*) /home/$1/cgi-bin/$2 
" �,y$86=   (2)在Apache配置文件裡面關於public_html的設置裡面加入下面的屬性: 
=l O8YDK:    
ltL+m)P$     Options ExecCGI 
eY>fzEd     SetHandler cgi-script 
+�S:+A*Rn  
_B7nR 14、如何調整Apache的最大進程數 
OiI)8s    Apache允許為請求開的最大進程數是256,MaxClients的限制是256.如果用戶多了,用戶就只能看到Waiting for reply....然後等到下一個可用進程的出現。這個最大數,是Apache的程序決定的--它的NT版可以有1024,但Unix版只有256,你可 以在src/include/httpd.h中看到: 
0>)f Cg#   #ifndef HARD_SERVER_LIMIT 
#F==p=b@<   #ifdef WIN32 
:.,!�r   #define HARD_SERVER_LIMIT 1024 
Y)dU8oa   #else 
k:*}vVJ   #define HARD_SERVER_LIMIT 256 
tSxxpDA   #endif 
}Tk$wuy   #endif 
}Y)R9%I   你可以把它調到1024,然後再編譯你的系統。 
bijs^cARsL 15、如何屏蔽來自某個Internet地址的用戶訪問Apache服務器 
S[N$z ,xk   可以使用deny和allow來限制訪問,比如要禁止202.202.202.xx網絡的用戶訪問: 
@i6g>+emS    
YFAc&)J 1       order deny,allow 
Q}<OF+Os       deny from 202.202.202.0/24 
XnKH0n?7    
b _J{Soz 16、如何在日誌裡面記錄apache瀏覽器和引用信息 
~[eELx^k$   你需要把mod_log_config編譯到你的Apache服務器中,然後使用下面類似的配置: 
);W3E<0   CustomLog logs/access_log "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" 
`Jt<LG-0 17、如何修改Apache返回的頭部信息 
3e$S>If   問題分析:當客戶端連接到Apache服務器的時候,Apache一般會返回服務器版本、非缺省模塊等信息,例如: 
0lsJB 8   Server: Apache/1.3.26 (Unix) mod_perl/1.26 
k}sj&6jWk   解決: 
|x/p98~g   你可以在Apache的配置文件裡面作如下設置讓它返回的關於服務器的信息減少到最少: 
TJ`Ha +   ServerTokens Prod 
ta$Vy9ujqQ   注意: 
l]( \Ckz]   這樣設置以後Apache還會返回一定的服務器信息,比如: 
u6@$v4&$   Server: Apache 
^F])8VZ    但是這個不會對服務器安全產生太多的影響,因為很多掃瞄軟件是掃瞄的時候是不顧你服務器返回的頭部信息的。你如果想把服務器返回的相關信息變成: 
ErJf/j_!*   Server: It iS a nOnE-aPaCHe Server 
Inkk%O\   那麼你就要去修改源碼了。

http://bbs.tech.ccidnet.com/read.php?tid=519019
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivan0914 的頭像
    ivan0914

    I'n Blog 之萬象真藏

    ivan0914 發表在 痞客邦 留言(0) 人氣()