Apache是一個很受歡迎的web辦事器軟件,其安然性對網(wǎng)站的安然運營可謂存亡攸關(guān)。下面介紹一些可幫忙治理員在Linux上建設(shè)Apache確保其安然的編制和技能。
本文假定你知道這些根基常識:
文檔的根目次: /var/www/html or /var/www
主建設(shè)文件: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora等系統(tǒng)) 或/etc/apache/apache2.conf (Debian/Ubuntu).
默許HTTP 端口: 80 TCP
默許 HTTPS 端口: 443 TCP
測試建設(shè)文件設(shè)置及語法: httpd -t
對Web辦事器的日記文件的拜候: /var/log/httpd/access_log
Web辦事器弊端日記文件: /var/log/httpd/error_log
1、避免在弊端中顯示Apache版本和把持系統(tǒng)的ID
一般環(huán)境下,在用源代碼安裝或用yum等包安裝法度安裝Apache時,Apache辦事器的版本號和辦事器把持系統(tǒng)的名稱都可以在弊端動靜中顯示,并且還會顯示安裝在辦事器上的Apache模塊信息。

在上圖中,可以看犯弊端頁面顯示了Apache的版本和辦事器所安裝的把持系統(tǒng)版本。這有可能成為Web辦事器和Linux系統(tǒng)的一個首要威脅。為避免Apache把這些信息泄漏出來,我們需要在Apache的首要建設(shè)文件中進行更改:
用vim編纂器打開建設(shè)文件,查找“ServerSignature”,默許環(huán)境下它是打開狀況。我們需要封鎖辦事器簽名。ServerTokens Prod奉告Apache只在每個要求網(wǎng)頁的辦事器響應(yīng)的頭部,僅返回Apache產(chǎn)品名稱。
# 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)

2、禁用目次列表
默許環(huán)境下,在貧乏index文件時,Apache會列示root目次的所有內(nèi)容。以下圖所示:

對某個特定目次,我們可以在建設(shè)文件頂用“Options directive”封鎖目次列示。可以在httpd.conf或apache2.conf文件中加進以下項目:
Options -Indexes
其結(jié)果近似于下圖:

3、常常更新Apache
Apache的開辟社區(qū)一向在不竭地改良安然標(biāo)題問題,并常常發(fā)布帶有新的安然特點的最新版本。所以我們建議你利用最新的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
假定你其實不是在特定把持系統(tǒng)或內(nèi)核上運行某個出格的軟件,建議你保持內(nèi)核和Linux把持系統(tǒng)為最新版本。
4、禁用不需要的模塊
為了盡可能削減網(wǎng)站蒙受Web報復(fù)打擊的機緣,治理員最好禁用今朝不消的所有模塊。你可利用下面的號令,列示W(wǎng)eb辦事器所有的已編譯模塊。
# 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
……
上述模塊在默許環(huán)境下都是啟用的,但常常其實不需要,出格是mod_imap,mod_include, mod_info, mod_userdir, mod_autoindex。要禁用特定的模塊,可以在該模塊地點行的開首插進“#”注釋,并從頭啟動辦事。
5、用自力的用戶和組運行Apache
在默許的安裝編制中,運行Apache過程時的用戶是“nobody”或daemon。為安然起見,我們建議用非特權(quán)賬戶運行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 ,查找關(guān)頭字“User” 和 “Group”,然后將后面的用戶名和組名改成http-web:
User http-web
Group http-web
6、對用戶的承諾和避免,限制對目次的拜候
我們可以用httpd.conf文件中的“Allow” 和“Deny”限制對目次的拜候。在本例中,我們要包管root目次的安然,在httpd.conf文件中進行以下的設(shè)置:
Options None
Order deny,allow
Deny from all
此中,Options “None”暗示不承諾用戶啟用任何可選特點。
Order deny, allow---在這里措置“Deny” 和 “Allow”指令,起首禁用,然后才是承諾。
Deny from all,禁用所有人對root目次的要求,任何人都不克不及拜候根(root)目次。
7、利用mod_security和mod_evasive來保障Apache的安然
“mod_security”和“mod_evasive”是Apache在安然方面很是風(fēng)行的兩個模塊。mod_security作為防火墻而運行,它承諾我們當(dāng)令地監(jiān)督通信,還可以有助于我們呵護網(wǎng)站或Web辦事器免受暴力破解報復(fù)打擊。借助默許的包安裝法度,我們可以輕松地把mod_security安裝在辦事器上。下例申明如安在Ubuntu或Debian系統(tǒng)上安裝mod_security:
$ sudo apt-get install libapache2-mod-security
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
下面的號令可以在RHEL/CentOS/Fedora系統(tǒng)上安裝mod_security:
# yum install mod_security
# /etc/init.d/httpd restart
另外一個模塊mod_evasive的工作效力很高,它只采取一個要求便可以很好地工作,可以避免DDoS報復(fù)打擊造成巨大年夜風(fēng)險。mod_evasive可以應(yīng)對http暴力破解報復(fù)打擊和DoS(或DDoS)報復(fù)打擊。該模塊可以在三種環(huán)境下檢測報復(fù)打擊:一是在每秒鐘內(nèi)有太多要求達(dá)到統(tǒng)一個頁面時,二是在任何子過程試圖發(fā)出超越50個并發(fā)要求時,三是在任何地址已被姑且列進黑名單時它仍試圖測驗測驗新的要求。
8、禁用Apache遵守符號鏈接
默許環(huán)境下,Apache遵守符號鏈接,我們可以用options指令的FollowSymLinks來封鎖這個特點。為此,我們需要在主建設(shè)文件中加進一條:
Options –FollowSymLinks
假定有一個特定的用戶或網(wǎng)站需要遵守符號連接,我們可以在阿誰網(wǎng)站的.htaccess文件中增加法則:
# Enable symbolic links
Options +FollowSymLinks
寄望:為將法則從頭寫進到.htaccess文件中,在主建設(shè)文件中,該當(dāng)全局避免“AllowOverride All”
9、封鎖辦事器端包含和CGI履行
假定我們不需要,便可以封鎖辦事器端包含(mod_include)和CGI履行。為此,我們需要點竄主建設(shè)文件:
Options -Includes
Options –ExecCGI
我們還可以用Directior標(biāo)識表記標(biāo)幟對特定目次履行這類把持。在本例中,我們封鎖了/var/www/html/web1這個目次的Includes和Cgi文件履行:
Options -Includes -ExecCGI
下面列示的是其它一些可以用Options指令打開或封鎖的值:
Options All:當(dāng)即啟用所有選項。假定你不想在Apache建設(shè)文件或.htaccess中明白地指定任何值,那么它就是默許值。
Options IncludesNOEXEC:該選項承諾辦事器端包含文件但不履行號令或CGI。
Options MultiViews:承諾內(nèi)容協(xié)商多正視圖(利用mod_negotiation)
Options SymLinksIfOwnerMatch:跟FollowSymLinks近似。可是要當(dāng)符號連接和被連接的原始目次是統(tǒng)一所有者時才被承諾。
10、限制要求的大年夜小
Apache在默許環(huán)境下對HTTP要求的總大年夜小是沒有限制的。在你承諾Web辦事器可以接管大年夜量要求時,你就有可能成為DoS報復(fù)打擊的受害者。我們可以用directiory標(biāo)簽來限制 LimitRequestBody指令的要求大年夜小。
你可以用字節(jié)來設(shè)置這個值(從0到2147483647,0暗示無限制)。你可以按照本身的需要限制這個值。假定你要限制user_uploads這個目次所包含的用戶上傳文件量,并且限制為500K,就該當(dāng):
LimitRequestBody 512000
11、DDoS報復(fù)打擊的防御和強化
你不成能完全禁止企業(yè)網(wǎng)站免受DdoS報復(fù)打擊。下面這些號令便于你進行節(jié)制。
TimeOut指令用于設(shè)置在特定事務(wù)掉效之前,辦事器等候事務(wù)完成的時候長度。其默許值是300秒。對等閑蒙受DDoS報復(fù)打擊的網(wǎng)站,把這個值降落很有好處。這個值的大年夜小取決于網(wǎng)站上的要求種類。寄望,對某些CGI腳本,這個設(shè)置可能會產(chǎn)生標(biāo)題問題。
MaxClients:此指令承諾用戶設(shè)置辦事器可同時辦事的連接限制。每個新連接都要按照這個限制進行列隊。它合用于Prefork和Worker。其默許值為256。
KeepAliveTimeout:在封鎖連接之前,辦事器隨后的等候時候長度。默許值是5秒。
LimitRequestFields:這個設(shè)置可以幫忙我們限制可以接管的HTTP要求的頭部字段數(shù)量。其默許值為100。 有時,因為http的要求頭部過量而導(dǎo)致產(chǎn)生DDoS報復(fù)打擊,用戶無妨降落這個值。
LimitRequestFieldSize:幫忙我們設(shè)置HTTP要求頭部的大年夜小。
12、啟用Apache日記功能
Apache承諾你自力記實把持系統(tǒng)的日記。例如,在用戶與Web辦事器進行交互時所輸進的號令信息就很是有效。
為此,你需要包含mod_log_config模塊。Apache有三個首要的與日記相干的指令:
TransferLog:成立日記文件
LogFormat :設(shè)置定制格局
CustomLog :成立并格局化一個日記文件
我們還可以在虛擬主機部門設(shè)置這些號令。例如,下面的例子是啟用了日記功能的一個網(wǎng)站的虛擬主機建設(shè):
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
13、用ssl證書保障Apache的安然
你還可以用SSL證書用加密的編制保障信息傳輸?shù)陌踩?。在電子商?wù)網(wǎng)站中,消費者為了買東西,有時需要供給賬戶或諾言卡的細(xì)節(jié),默許環(huán)境下,Web辦事器用明文發(fā)送這些信息。建設(shè)辦事器使其借助于SSL證書便可覺得用戶進行加密傳輸。
企業(yè)可以從不合的SSL供給商采辦SSL證書。小型企業(yè)一般其實不肯意采辦SSL證書,此時,你仍可覺得網(wǎng)站分派一個自簽名證書。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建設(shè)中增加這個證書。用vim編纂器打開主建設(shè)文件,并增加下面的內(nèi)容,然后重啟辦事:
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 [email protected]
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,便可以看到自簽名的證書。