Apache安全和強化技巧

    Apache是一個很受歡迎的web服務器軟件,其安全性對於網站的安全運營可謂生死攸關。下面介紹一些可幫助管理員在Linux上配置Apache確保其安全的方法和技巧。php

本文假設你知道這些基本知識:html

    文檔的根目錄: /var/www/html or /var/wwwweb

    主配置文件: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora等系統)  或/etc/apache/apache2.conf (Debian/Ubuntu).shell

    默認HTTP 端口: 80 TCPapache

    默認 HTTPS 端口: 443 TCPubuntu

    測試配置文件設置及語法: httpd -tvim

    對Web服務器的日誌文件的訪問: /var/log/httpd/access_log瀏覽器

    Web服務器錯誤日誌文件: /var/log/httpd/error_log安全

    一、避免在錯誤中顯示Apache版本和操做系統的ID服務器

    通常狀況下,在用源代碼安裝或用yum等包安裝程序安裝Apache時,Apache服務器的版本號和服務器操做系統的名稱均可以在錯誤消息中顯示,並且還會顯示安裝在服務器上的Apache模塊信息。

在上圖中,能夠看出錯誤頁面顯示了Apache的版本以及服務器所安裝的操做系統版本。這有可能成爲Web服務器和Linux系統的一個重要威脅。爲防止Apache把這些信息泄露出來,咱們須要在Apache的主要配置文件中進行更改:

用vim編輯器打開配置文件,查找「ServerSignature」,默認狀況下它是打開狀態。咱們須要關閉服務器簽名。ServerTokens  Prod告訴Apache只在每個請求網頁的服務器響應的頭部,僅返回Apache產品名稱。

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

二、禁用目錄列表

默認狀況下,在缺乏index文件時,Apache會列示root目錄的全部內容。以下圖所示:

對於某個特定目錄,咱們能夠在配置文件中用「Options  directive」關閉目錄列示。能夠在httpd.conf或apache2.conf文件中加入以下項目:

Options -Indexes

其效果相似於下圖:

三、常常更新Apache

Apache的開發社區一直在不斷地改善安全問題,並常常發佈帶有新的安全特性的最新版本。因此咱們建議你使用最新的Apache做爲本身的web服務器。爲檢查Apache的版本,咱們能夠用httpd  –v命令來檢查最新的版本。

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:29:28

能夠用下面的命令更新Apache版本。

# yum update httpd
# apt-get install apache2

若是你並非在特定操做系統或內核上運行某個特別的軟件,建議你保持內核和Linux操做系統爲最新版本。

四、禁用沒必要要的模塊

爲了儘可能減小網站遭受Web攻擊的機會,管理員最好禁用目前不用的全部模塊。你可使用下面的命令,列示Web服務器全部的已編譯模塊。

# grep LoadModule /etc/httpd/conf/httpd.conf
# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
……

上述模塊在默認狀況下都是啓用的,但每每並不須要,特別是mod_imap,mod_include, mod_info, mod_userdir,  mod_autoindex。要禁用特定的模塊,能夠在該模塊所在行的開頭插入「#」註釋,並從新啓動服務。

五、用獨立的用戶和組運行Apache

在默認的安裝方式中,運行Apache進程時的用戶是「nobody」或daemon。爲安全起見,咱們建議用非特權帳戶運行Apache,例如,咱們要使用http-web,就須要建立該Apache  用戶和組:

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

如今你須要告訴Apache用這個新用戶運行,爲此,咱們須要在/etc/httpd/conf/httpd.conf中加入一個新條目,並從新啓動服務。

用vim編輯器打開/etc/httpd/conf/httpd.conf ,查找關鍵字「User」 和  「Group」,而後將後面的用戶名和組名改成http-web:

User http-web
Group http-web

六、對用戶的容許和禁止,限制對目錄的訪問

咱們能夠用httpd.conf文件中的「Allow」  和「Deny」限制對目錄的訪問。在本例中,咱們要保證root目錄的安全,在httpd.conf文件中進行以下的設置:

Options None
Order deny,allow
Deny from all

其中,Options 「None」表示不容許用戶啓用任何可選特性。

Order deny, allow---在這裏處理「Deny」 和 「Allow」指令,首先禁用,而後纔是容許。

Deny from all,禁用全部人對root目錄的請求,任何人都不能訪問根(root)目錄。

七、使用mod_security和mod_evasive來保障Apache的安全

「mod_security」和「mod_evasive」是Apache在安全方面很是流行的兩個模塊。mod_security做爲防火牆而運 行,它容許咱們適時地監視通訊,還能夠有助於咱們保護網站或Web服務器免受暴力破解攻擊。藉助默認的包安裝程序,咱們能夠輕鬆地把 mod_security安裝在服務器上。下例說明如何在Ubuntu或Debian系統上安裝mod_security:

$ sudo apt-get install libapache2-mod-security
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload

下面的命令能夠在RHEL/CentOS/Fedora系統上安裝mod_security:

# yum install mod_security
# /etc/init.d/httpd restart

另外一個模塊mod_evasive的工做效率很高,它只採用一個請求就能夠很好地工做,能夠防止DDoS攻擊形成巨大危害。mod_evasive 能夠應對http暴力破解攻擊和DoS(或DDoS)攻擊。該模塊能夠在三種狀況下檢測攻擊:一是在每秒鐘內有太多請求到達同一個頁面時,二是在任何子進 程試圖發出超過50個併發請求時,三是在任何地址已經被臨時列入黑名單時它仍試圖嘗試新的請求。

八、禁用Apache遵循符號連接

默認狀況下,Apache遵循符號連接,咱們能夠用options指令的FollowSymLinks來關閉這個特性。爲此,咱們須要在主配置文件中加入一條:

Options –FollowSymLinks

若是有一個特定的用戶或網站須要遵循符號鏈接,咱們能夠在那個網站的.htaccess文件中增長規則:

# Enable symbolic links
Options +FollowSymLinks

注意:爲將規則從新寫入到.htaccess文件中,在主配置文件中,應當全局防止「AllowOverride All」

九、關閉服務器端包含和CGI執行

若是咱們不須要,就能夠關閉服務器端包含(mod_include)和CGI執行。爲此,咱們須要修改主配置文件:

Options -Includes
Options –ExecCGI

咱們還能夠用Directior標記對特定目錄執行這種操做。在本例中,咱們關閉了/var/www/html/web1這個目錄的Includes和Cgi文件執行:

Options -Includes -ExecCGI

下面列示的是其它一些能夠用Options指令打開或關閉的值:

Options All:當即啓用全部選項。若是你不想在Apache配置文件或.htaccess中明確地指定任何值,那麼它就是默認值。
Options IncludesNOEXEC:該選項容許服務器端包含文件但不執行命令或CGI。
Options MultiViews:容許內容協商多重視圖(使用mod_negotiation)
Options SymLinksIfOwnerMatch:跟FollowSymLinks相似。可是要當符號鏈接和被鏈接的原始目錄是同一全部者時才被容許。

十、限制請求的大小

Apache在默認狀況下對HTTP請求的總大小是沒有限制的。在你容許Web服務器能夠接受大量請求時,你就有可能成爲DoS攻擊的受害者。咱們能夠用directiory標籤來限制  LimitRequestBody指令的請求大小。

你能夠用字節來設置這個值(從0到2147483647,0表示無限制)。你能夠根據本身的須要限制這個值。假設你要限制user_uploads這個目錄所包含的用戶上傳文件量,而且限制爲500K,就應當:

LimitRequestBody 512000

十一、DDoS攻擊的防護和強化

你不可能徹底阻止企業網站免受DdoS攻擊。下面這些命令便於你進行控制。

TimeOut指令用於設置在特定事件失效以前,服務器等待事件完成的時間長度。其默認值是300秒。對於容易遭受DDoS攻擊的網站,把這個值下降頗有好處。這個值的大小取決於網站上的請求種類。注意,對於某些CGI腳本,這個設置可能會產生問題。

MaxClients:此指令容許用戶設置服務器可同時服務的鏈接限制。每個新鏈接都要根據這個限制進行排隊。它適用於Prefork和Worker。其默認值爲256。
KeepAliveTimeout:在關閉鏈接以前,服務器隨後的等待時間長度。默認值是5秒。
LimitRequestFields:這個設置能夠幫助咱們限制能夠接受的HTTP請求的頭部字段數量。其默認值爲100。 有時,因爲http的請求頭部過多而致使發生DDoS攻擊,用戶不妨下降這個值。
LimitRequestFieldSize:幫助咱們設置HTTP請求頭部的大小。

十二、啓用Apache日誌功能

Apache容許你獨立記錄操做系統的日誌。例如,在用戶與Web服務器進行交互時所輸入的命令信息就很是有用。

爲此,你須要包含mod_log_config模塊。Apache有三個主要的與日誌相關的指令:

TransferLog:建立日誌文件
LogFormat :設置定製格式
CustomLog :建立並格式化一個日誌文件

咱們還能夠在虛擬主機部分設置這些命令。例如,下面的例子是啓用了日誌功能的一個網站的虛擬主機配置:

DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined

1三、用ssl證書保障Apache的安全

你還能夠用SSL證書用加密的方式保障信息傳輸的安全。在電子商務網站中,消費者爲了買東西,有時須要提供帳戶或信用卡的細節,默認狀況下,Web服務器用明文發送這些信息。配置服務器使其藉助於SSL證書就能夠爲用戶進行加密傳輸。

企業能夠從不一樣的SSL供應商購買SSL證書。小型企業通常並不肯意購買SSL證書,此時,你仍能夠爲網站分配一個自簽名證書。Apache使用mod_ssl模塊來支持SSL證書。

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

在建立並簽署了證書後,你須要在Apache配置中增長這個證書。用vim編輯器打開主配置文件,並增長下面的內容,而後重啓服務:

SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
ServerAdmin ravi.saive@example.com
ServerName example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/example.com-error_log
CustomLog /var/log/httpd/example.com-access_log common

此時,打開瀏覽器,並輸入https://example.com,就能夠看到自簽名的證書。

DDOS攻擊防範:

          $sudo apt-get install libapache2-mod-evasive

          安裝後ubuntu自動會啓動,咱們自行建立一個配置文件:

          $sudo vi /etc/apache2/conf.d/evasive,寫入以下內容:

<IfModule mod_evasive20.c>  
       DOSHashTableSize 3097 #哈希表大小,增大能夠提升查找速度  
          DOSPageCount 2   #容許客戶機訪問同一頁面的時間間隔,一旦小於該間隔,該客戶機ip地址將被寫入黑名單  
          DOSSiteCount 2    #容許客戶機對全站同時進行的併發訪問請求數目  
          DOSPageInterval 1        #定義網頁訪問計數的時間間隔  
          DOSSiteInterval 1         #定義全站訪問計數的時間間隔  
          DOSBlockingPeriod 10  #定義了阻止客戶機的時間長短,在該時間內,不容許加入黑名單的客戶機訪問,若是訪問,阻止時間則再次刷新,默認10  
       DOSEmailNotify 277531070@qq.com  
       DOSSystemCommand 「su – someuser –C ‘/sbin/… %s …’」  
          DOSLogDir 「var/lock/mod_evasive」   
          DOSWhitelist  127.0.0.1   #白名單  
          DOSWhitelist  127.0.0.*  
</IfModule>

或者在httpd.conf文件中加入:

LoadModule evasive20_module  /usr/lib/apache2/modules/mod_evasive20.so  
<IfModule mod_evasive20.c>  
          DOSHashTableSize    3097  
          DOSPageCount        2  
          DOSSiteCount        50  
          DOSPageInterval     1  
          DOSSiteInterval     1  
          DOSBlockingPeriod   10  
</IfModule>
相關文章
相關標籤/搜索