APACHE_WEB_服務器安全配置

Apache服務器的主要安全缺陷

  正如我們前言所說盡管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服務器管理員去[url]http://www.apache.org/dist/httpd/[/url]下載補丁程序以確保其WEB服務器安全!


  正確維護和配置Apache服務器

  雖然Apache服務器的開發者非常注重安全性,由於Apache服務器其龐大的項目, 難免會存在安全隱患。正確維護和配置Apache WEB服務器就很重要了。我們應注意的一些問題:

  (1)Apache服務器配置文件
  Apache Web服務器主要有三個配置文件,位於/usr/local/apache/conf目錄下。 這三個文件是:

  httpd.conf----->主配置文件
  srm.conf------>填加資源文件
  access.conf--->設置文件的訪問權限

  注:具體配置可以參考:[url]http://httpd.apache.org/docs/mod/core.html[/url]

  (2)Apache服務器的目錄安全認證
  在Apache Server中是允許使用 .htaccess做目錄安全保護的,欲讀取這保護的目錄需要先鍵入正確用戶帳號與密碼。這樣可做爲專門管理網頁存放的目錄或做爲會員區等。在保護的目錄放置一個檔案,檔名爲.htaccss
  AuthName "會員專區"
  AuthType "Basic"
  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中加入: 
  options indexes followsymlinks 
  allowoverride authconfig 
  order allow,deny 
  allow from all 

  (3)Apache服務器訪問控制

  我們就要看三個配置文件中的第三個文件了,即access.conf文件,它包含一些指令控制允許什麼用戶訪問Apache目錄。應該把deny from all設爲初始化指令,再使用allow from指令打開訪問權限。

  <directory /usr/local/http/docs/private>
  <limit>
  order deny,allow
  deny from all
  allow from safechina.net
  </limit>
  </directory>
  設置允許來自某個域、IP地址或者IP段的訪問。


  (4)Apache服務器的密碼保護問題

  我們再使用.htaccess文件把某個目錄的訪問權限賦予某個用戶。系統管理員需要在httpd.conf或者rm.conf文件中使用 AccessFileName指令打開目錄的訪問控制。如:

  AuthName PrivateFiles
  AuthType Basic
  AuthUserFile /path/to/httpd/users
  require Phoenix
  # htpasswd -c /path/to/httpd/users Phoenix


  設置Apache服務器的WEB和文件服務器

  我們在Apache服務器上存放WEB服務器的文件,供用戶訪問,並設置/home/ftp/pub目錄爲文件存放區域,用[url]http://download.your.com/pub/[/url]來訪問。在防火牆上設置apache反向代理技術,由防火牆代理訪問。 
 
  (1)Apache服務器的設置 

  apache服務器採用默認配置。主目錄爲/home/httpd/html,主機域名爲Phoenix.your.com, 且別名到[url]www.your.com[/url]中, 並且設置srm.conf加一行別名定義如下:

  Alias /pub /home/ftp/pub/ 

  更改默認應用程序類型定義如下: 
  DefaultType application/octet-stream 

  最後在/etc/httpd/conf/access.conf中增加一項定義 
  Options Indexes 
  AllowOverride AuthConfig 
  order allow,deny 
  allow from all 

  注:Options Indexes允許在找不到index.html文件的情況下允許列出目錄/文件列表。AllowOverride AuthConfig允許做基本的用戶名和口令驗證。這樣的話,需要在/home/ftp/pub目錄下放入.htaccess,內容如下: 
  [root@ pub]# more .htaccess 
  AuthName Branch Office Public Software Download Area 
  AuthType Basic 
  AuthUserFile /etc/.usrpasswd 
  require valid-user 
  用# htpasswd -c /etc/.usrpasswd user1  分別創建不同的允許訪問/pub下文件服務的外部用戶名和口令。
 
  (2)在防火牆上配置反向代理技術.
 
  在/etc/httpd/conf/httpd.conf  中加入 NameVirtualHost xxx.xxx.xxx.xxx # xxx.xxx.xxx.xxx ----->是防火牆外部在互聯網上永久IP地址 
  servername [url]www.your.com[/url] 
  errorlog /var/log/httpd/error_log 
  transferlog /var/log/httpd/access_log 
  rewriteengine on 
  proxyrequests off 
  usecanonicalname off 
  rewriterule ^/(.*)$ [url]http://xxx.xxx.xx.x/$1[/url] Apache服務器的IP地址。

  servername [url]http://download.your.com/pub/[/url]
  errorlog /var/log/httpd/download/error_log 
  transferlog /var/log/httpd/download/access_log 
  rewriteengine on 
  proxyrequests off 
  usecanonicalname off 
  rewriterule ^/(.*)$ [url]http://xxx.xxx.xx.x/$1[/url] 同上Apache服務器的IP地址。

  設置防火牆上的DNS,讓download.your.com和[url]www.your.com[/url] 都指向防火牆的外部網地址xxx.xxx.xxx.xxx。
用[url]http://www.your.com[/url]訪問主頁,用[url]http://download.your.com/pub/[/url]訪問公共文件的下載區。

  注:還需要在apache服務器主機上建立目錄/var/log/httpd/download/,否則會出錯。另外,也可以設置防火牆主機上的/home/httpd/html/index.html的屬性爲750來阻止訪問,這是防外部用戶能訪問到防火牆上的Apache服務器的[url]http://www.your.com[/url]中。 

  總結:Apache Server是一個非常優秀,非常棒的服務器,只要你正確配置和維護好Apache服務器,
你就會感受到Apache Server 所帶來的好處,同樣希望你能夠通過閱讀本文達到理論和實踐雙豐收的目的。


    驗證你的Apache來源途徑
    不要以爲在Google上能夠搜索到合適的Apache版本。如果你需要下載最新版本的Apache,那麼你最好通過一個權威的鏡像站點來下載。然而,即使這樣也可能有問題,事實上,曾經就有******過apache.org官方網站。所以,採用類似PGP的工具來驗證Apache的數字簽名就顯得尤爲重要。

  保持更新Apache的補丁程序
    如果你安裝了Apache,你就必須及時更新安全補丁。如果沒有及時的更新,那你的系統很容易受到網絡上那些高危病毒的***。幸好,有幾個簡便方法可以更新Apache的補丁。參考我們關於保持更新Apache補丁的文章瞭解更多關於Apache服務器公告列表、Linux包管理系統和RedHat操作系統更新服務的信息。

  避免使用.htaccess文件(分佈式配置文件)
    很多情況下需要幾個管理員和內容管理者共同管理Apache服務器。一個常用的共享管理辦法就是使用.htaccess文件,這樣可以很靈活地對管理員以外的用戶提供不同的配置控制權限。然而,這些文件也使得在集中安全管理之外還有相當多的安全控制權限——這些文件允許安全專業人士以外的其他用戶改變服務器的訪問控制許可配置。那些對粒度訪問控制根本不熟悉的用戶修改的配置可能在無意中會危害到你的系統安全。所以,除非必須使用,否則我們應該儘可能地避免使用這種訪問控制系統。如果需要了解更多相關信息,可以參考“摒棄Apache服務器中的.htaccess文件”這篇文章。

  監視系統日誌
    Apache爲管理員提供了很全面的日誌管理工具來對服務器的活動進行事後分析。Apache提供了多種不同的記錄日誌,但是對安全專業人士最重要的是訪問日誌。這個靈活的工具還具有了相當多的自定義功能,你可以按照你的需要很方便地記錄儘可能多或者少的日誌,以保證有效的分析。至少,你應該記錄那些失敗的認證企圖和系統產生的錯誤。使用像AWStats一樣的免費工具可以很輕鬆地完成分析任務。但是必須明確的一點是:監視日誌只是一種事後分析手段。你可以利用它回顧和判斷對服務器的***(和***企圖),但是希望及時查看日誌來對緊急情況做出快速反應是不可能的。如果需要進行預判反應,你應該考慮使用***預防系統如信息安全雜誌評選的2003年度最新興技術獎得主:Lucid Security公司的ipAngel系統。

  管理文件系統
    我們已經討論了使用(或不使用).htaccess文件對管理文件訪問權限的重要性。禁止通過文件系統許可對Apache服務器進行非授權修改也是很重要的。特別值得一提的是,你應該保證只有根用戶才能修改存儲在“/usr/local/apache ”目錄的文件(或者你選擇的任何Apache服務器的根目錄)。確保只有根用戶才能修改日誌文件也很關鍵,這樣可以防止用戶掩蓋他們的操作。
    Apache 服務器日常配置

1、如何設 置請求等待時間
  在httpd.conf裏面設置:
  TimeOut n
  其中n爲整數,單位是秒。
  設置這個TimeOut適用於三種情況:
2、如何接收一個get請求的總時間
  接收一個post和put請求的TCP包之間的時間
  TCP包傳輸中的響應(ack)時間間隔
3、如何使得apache監聽在特定的端口
  修改httpd.conf裏面關於Listen的選項,例如:
  Listen 8000
  是使apache監聽在8000端口
  而如果要同時指定監聽端口和監聽地址,可以使用:
  Listen 192.170.2.1:80
  Listen 192.170.2.5:8000
  這樣就使得apache同時監聽在192.170.2.1的80端口和192.170.2.5的8000端口。
  當然也可以在httpd.conf裏面設置:
  Port 80
  這樣來實現類似的效果。
4、如何設置apache的最大空閒進程數
  修改httpd.conf,在裏面設置:
  MaxSpareServers n
  其中n是一個整數。這樣當空閒進程超過n的時候,apache主進程會殺掉多餘的空閒進程而保持空閒進程在n,節省了系統資源。如果在一個apache非常繁忙的站點調節這個參數纔是必要的,但是在任何時候把這個參數調到很大都不是一個好主意。
  同時也可以設置:
  MinSpareServers n
  來限制最少空閒進程數目來加快反應速度。
5、apache如何設置啓動時的子服務進程個數
  在httpd.conf裏面設置:
  StartServers 5
  這樣啓動apache後就有5個空閒子進程等待接受請求。
  也可以參考MinSpareServers和MaxSpareServers設置。
6、如何在apache中設置每個連接的最大請求數
  在httpd.conf裏面設置:
  MaxKeepAliveRequests 100
  這樣就能保證在一個連接中,如果同時請求數達到100就不再響應這個連接的新請求,保證了系統資源不會被某個連接大量佔用。但是在實際配置中要求儘量把這個數值調高來獲得較高的系統性能。
7、如何在apache中設置session的持續時間
  在apache1.2以上的版本中,可以在httpd.conf裏面設置:
  KeepAlive on
  KeepAliveTimeout 15
  這樣就能限制每個session的保持時間是15秒。session的使用可以使得很多請求都可以通過同一個tcp連接來發送,節約了網絡資源和系統資源。
8、如何使得apache對客戶端進行域名驗證
  可以在httpd.conf裏面設置:
  HostnameLookups on off double
  如果是使用on,那麼只有進行一次反查,如果用double,那麼進行反查之後還要進行一次正向解析,只有兩次的結果互相符合才行,而off就是不進行域名驗證。
  如果爲了安全,建議使用double;爲了加快訪問速度,建議使用off。
9、如何使得apache只監聽在特定的ip
  修改httpd.conf,在裏面使用
  BindAddress 192.168.0.1
  這樣就能使得apache只監聽外界對192.168.0.1的http請求。如果使用:
  BindAddress *
  就表明apache監聽所有網絡接口上的http請求。
  當然用防火牆也可以實現。
10、apache中如何限制http請求的消息主體的大小
  在httpd.conf裏面設置:
  LimitRequestBody n
  n是整數,單位是byte。
  cgi腳本一般把表單裏面內容作爲消息的主體提交給服務器處理,所以現在消息主體的大小在使用cgi的時候很有用。比如使用cgi來上傳文件,如果有設置:
  LimitRequestBody 102400
  那麼上傳文件超過100k的時候就會報錯。
11、如何修改apache的文檔根目錄
  修改httpd.conf裏面的DocumentRoot選項到指定的目錄,比如:
  DocumentRoot /www/htdocs
  這樣[url]http://localhost/index.html[/url]就是對應/www/htdocs/index.html
12、如何修改apache的最大連接數
  在httpd.conf中設置:
  MaxClients n
  n是整數,表示最大連接數,取值範圍在1和256之間,如果要讓apache支持更多的連接數,那麼需要修改源碼中的httpd.h文件,把定義的HARD_SERVER_LIMIT值改大然後再編譯。
13、如何使每個用戶有獨立的cgi-bin目錄
  有兩種可選擇的方法:
  (1)在Apache配置文件裏面關於public_html的設置後面加入下面的屬性:
  ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*) /home/$1/cgi-bin/$2
  (2)在Apache配置文件裏面關於public_html的設置裏面加入下面的屬性:
  
    Options ExecCGI
    SetHandler cgi-script

14、如何調整Apache的最大進程數
  Apache允許爲請求開的最大進程數是256,MaxClients的限制是256.如果用戶多了,用戶就只能看到Waiting for reply....然後等到下一個可用進程的出現。這個最大數,是Apache的程序決定的--它的NT版可以有1024,但Unix版只有256,你可以在src/include/httpd.h中看到:
  #ifndef HARD_SERVER_LIMIT
  #ifdef WIN32
  #define HARD_SERVER_LIMIT 1024
  #else
  #define HARD_SERVER_LIMIT 256
  #endif
  #endif
  你可以把它調到1024,然後再編譯你的系統。
15、如何屏蔽來自某個Internet地址的用戶訪問Apache服務器
  可以使用deny和allow來限制訪問,比如要禁止202.202.202.xx網絡的用戶訪問:
  
  order deny,allow
  deny from 202.202.202.0/24
  
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一般會返回服務器版本、非缺省模塊等信息,例如:
  Server: Apache/1.3.26 (Unix) mod_perl/1.26
  解決:
  你可以在Apache的配置文件裏面作如下設置讓它返回的關於服務器的信息減少到最少:
  ServerTokens Prod
  注意:
  這樣設置以後Apache還會返回一定的服務器信息,比如:
  Server: Apache
  但是這個不會對服務器安全產生太多的影響,因爲很多掃描軟件是掃描的時候是不顧你服務器返回的頭部信息的。你如果想把服務器返回的相關信息變成:
  Server: It iS a nOnE-aPaCHe Server
  那麼你就要去修改源碼了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章