September 3, 2010, Friday, 245

Apache Tips

出自TechWiki

跳轉到: 導航, 搜索

目錄

[編輯] 基礎設定

[編輯] 重要的設定檔

Apache 有三個重要的系統設定檔,位於/etc/httpd/conf/ 下,分別為:

  1. httpd.conf - 主要設定檔
  2. srm.conf - 增加資源檔
  3. access.conf - 設置檔的存取許可設定

(設定檔完整說明可以參考 這裡

[編輯] 設定伺服器對外名稱

修改上述的 httpd.conf 這個檔案中的 ServerName 設定,例如 ServerName www.example.com:80

[編輯] 修改網頁預設放置位置

  1. 修改 httpd.conf 檔案中的的 DocumentRoot 設定,例如 DocumentRoot "/var/www/html"
  2. 建立你欲放置網頁的目錄,例如 /home/pages
  3. 修改 httpd.conf 原本 Directory 部份的設定,將以下部份修改
<Directory "/usr/local/apache2/htdocs">       -->    <Directory "/home/pages">
      Options Indexes FollowSymLinks          -->    Options FollowSymLinks MultiViews
      AllowOverride None                      -->    AllowOverride AuthConfig
      Order allow                             -->    Order allow,deny
                                                     Allow from all
  </Directory>

修改完成之後,重新啟動 Apache 伺服器,修改才會生效。

[編輯] 安全設定

[編輯] 讓網站的檔案結構不會被人看到

Apache 伺服器通常預設會開啟 DocumentRoot 目錄下的index.html或index.php檔案,但是若這些檔案不存在預設會顯示此顯示此目錄下的檔案結構列表。若不要顯示此檔案結構列表,可修改 httpd.conf 設定檔。找到

Options Indexes FollowSymLinks

這一行,並且變更為

Options -Indexes FollowSymLinks     或     # Options Indexes FollowSymLinks

存檔並重新啟動 Apache 之後即可;之後若不存在index頁面的網站時,則會顯示 Access Forbidden!”訊息。


[編輯] 保護系統設定

為了確保系統的安全,通常不會讓使用者修改或設定 .htaccess 檔,因為這檔案可以覆寫原本的安全設定。你可以在httpd.conf中 <Directory /> 指令中新增下列的設定

<Directory />
AllowOverride None
</Directory>

如此可以防止使用.htaccess 檔(除了另外特別開放的)。


[編輯] 設定 Virtual Hosting

Apache 伺服器提供 named virtual hosting 的功能,讓一個 IP 位址擁有多個 domain name。你可以設定 httpd.conf 中的NameVirtualHost 來指定,如下所示:

NameVirtualHost 140.92.141.40
 
<VirtualHost *>
   Default Directives. (site #1 或 site #2 以外)
</VirtualHost>
 
<VirtualHost 140.92.141.40>
   servername www.my-site.com
   Directives for site #1
</VirtualHost>
 
<VirtualHost 140.92.141.40>
   servername www.another-site.com
   Directives for site #2
</VirtualHost>

<VirtualHost> 與 </VirtualHost> 之間,servername 指定了網站的 domain name。
Apache 伺服器會尋找完全符合的 servername,並將網頁內容呈現至使用者的瀏覽器;若是沒有符合的話,則會選擇 <VirtualHost *> 所指定的網頁內容。 要小心使用 * 萬用字元符號。因為有指定IP位址的 <VirtualHost> 的優先高於使用 * 的 <VirtualHost>,因此為了確保一致性,試著減少將<VirtualHost *>置於第一列設定。


[編輯] 處理不存在的頁面

當有人試圖開啟不存在的非index頁面時,可設定顯示你預先設定的頁面,而非顯示一般 "404 file Not Found" 訊息。設定 ErrorDocument 404 /missing.html。此外,記得將你寫好的 missing.html 置於 DocumentRoot 目錄下才可發揮作用。


[編輯] 讓 Apache 伺服器對客戶端進行 host name 驗證

設定 httpd.conf 中的 HostnameLookups on|off|double設定。

如果設定為on,將只進行一次反查;若為double,則在反查之後,會在進行一次正向解析,兩次的結果需符合才行;而off則為不進行hostname驗證。如果基於安全考量,建議使用double;而位了加快速度,則可用off。


[編輯] 如何讓 Apache 監聽某特定IP

修改 httpd.conf 中的 BindAddress 192.168.0.1,即讓 Apache 伺服器只監聽外界來自 192.168.0.1 的 http request。若設定BindAddress *,則Apache將會監聽所有網路上的http request(此功能與防火牆相同)。


[編輯] Apache 伺服器的設定

Apache 預設的主目錄為 /home/httpd/html,主機功能變數名稱為www.your-site.com,且別名為www.your.com,並且設定 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下檔服務的外部使用者與密碼。


[編輯] 在防火牆上配設定反向代理

在 httpd.conf 中加入 NameVirtualHos xxx.xxx.xxx.xxx設定:

# xxx.xxx.xxx.xxx ----->是防火牆在網路上永久IP位址  
  servername www.your.com  
  errorlog /var/log/httpd/error_log  
  transferlog /var/log/httpd/access_log  
  rewriteengine on  
  proxyrequests off  
  usecanonicalname off  
  rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 Apache伺服器的IP位址。 
 
  servername http://download.your.com/pub/ 
  errorlog /var/log/httpd/download/error_log  
  transferlog /var/log/httpd/download/access_log  
  rewriteengine on  
  proxyrequests off  
  usecanonicalname off  
  rewriterule ^/(.*)$ http://xxx.xxx.xx.x/$1 同上Apache伺服器的IP位址。

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

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


[編輯] 關閉 HTTP TRACE 功能

HTTP TRACE 是一個 HTTP request method,主要是用來做 debug,此方法會回傳 client 的 HTTP request 內容,並放置於於 TRACE response 中的 entity body。 因此,惡意攻擊者可利用此方法取得敏感的伺服器資訊,例如 cookies 或表頭中的認證資料。 此方法預設為打開,但為了安全方面的考量,最好將此方法給關閉。

一般來說,您可以利用mod_rewrite來關閉 HTTP TRACE 的功能,首先將 httpd.conf 中的 LoadModule rewrite_module modules/mod_rewrite.so 註解打開,讓 HTTP 有mod_rewrite 的功能,並且在加入下列的規則:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]

如果您的 Apache 版本是 2.0 以上,則有比較快速的方法來關閉(因為上述的方法必須開啟 mod_rewrite 的功能):

TraceEnable off

如此則關閉了 HTTP TRACE 的功能。


[編輯] 關閉 ServerToken 功能

ServerToken 的功能是在 Apache 1.3 以後的版本才出現的,而 ProductOnly 關鍵字則是在 1.3.12 之後才出現。ServerToken 主要是控制伺服器在表頭區域回應給用戶端的資訊,例如使用何種作業系統或模組。 因此,入侵者可能利用這些資訊而採用特定的攻擊方法,來更快速進行滲透或破解。所以提供的資訊越少則越安全。因此可以利用 ServerToken 功能: 其語法為: ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full 預設為: ServerTokens Full 分別說明: ServerTokens Prod[uctOnly] --> 伺服器可能回傳: Server: Apache

ServerTokens Major --> 伺服器可能回傳: Server: Apache/2

ServerTokens Minor --> 伺服器可能回傳: Server: Apache/2.0

ServerTokens Min[imal] --> 伺服器可能回傳: Server: Apache/2.0.41

ServerTokens OS --> 伺服器可能回傳: Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified) --> 伺服器可能回傳:Server sends (e.g.): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

因此,若要讓回傳的資訊最少,則可以在 httpd.conf 中加入:

ServerTokens Prod


[編輯] HowTo: Secure your Ubuntu Apache Web Server

請參考這裡




[編輯] 使用設定

[編輯] 限制 http request message body 的大小

在 httpd.conf 設定中,修改 LimitRequestBody n 設定(n為整數;單位為byte)。 由於 CGI script 一般將表單中的內容當作 message body 交由伺服器來處理,所以此項設定在使用CGI時很有用。

[編輯] 如何設定 session 的維持時間

Apache 1.2以上的版本中,可以在 httpd.conf 中設定: KeepAlive on KeepAliveTimeout 15 如此就能限制每個session的維持時間為15秒。

session主要能夠使得很多 request 都可以利用同一個TCP connection,相對節省了網路頻寬與系統資源。


[編輯] 允許 URLs 為 case-insensitive

Apache一般所使用的 URLs 為 case-sensitve。但網站是先在 Internet Information Server(IIS)建置再轉換至 Apache 的話,將會發生問題。 若要修正這個問題,可在設定檔加入 CheckSpelling On。 如此,mod_speling 將會修正 URLs 的錯誤大小寫字母的問題。


[編輯] 不允許其他伺服器存取網站上的檔案

若你的網站上有很受歡迎的檔案或圖,其他人可能會直接連結以節省頻寬。可以用下列的方法來防止這類的事情,主要是禁止你本身以外的 domain 存取你網站上的 GIF 或 JPG 檔:

<FilesMatch “\.(gif|jpe?g)$”>
SetEnvIf Referer “^http://([^/]*\.)?mydomain.com/” request_ok = 1
Order Allow, Deny
Allow from env=request_ok
</FilesMatch>

你可以將此段置於 Apache config 檔、virtual host group、directory group,甚至是 .htaccess 檔。