CentOS 7.6 Apache的優化設定——壓縮、快取、防盜鏈、隱藏版本資訊

2020-08-08 13:09:24

一、實驗環境

  • 主伺服器:192.168.245.120(CentOS 7.6)
  • 驗證客戶機:192.168.245.10(win10)
  • 盜鏈伺服器:192.168.245.138(win 7)
  • apache版本:httpd-2.4.29.tar.bz

二、實驗準備

1、原始碼安裝apache(定製模組)

[root@server opt]# yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl zlib-devel   <---yum安裝所需庫

[root@server opt]# ls
apr-1.6.2.tar.gz  apr-util-1.6.0.tar.gz  httpd-2.4.29.tar.bz2
[root@server opt]# 
[root@server opt]# tar xf apr-1.6.2.tar.gz   <---解壓apr依賴包
[root@server opt]# tar xf apr-util-1.6.0.tar.gz  <---解壓apr-util依賴包

[root@server opt]# tar xf httpd-2.4.29.tar.bz2   <---解壓httpd原始碼包
[root@server opt]# cd httpd-2.4.29/  
./configure \   <---自定義設定
--prefix=/usr/local/httpd \   <---指定安裝目錄
--enable-so \   <---指定開啓so模組
--enable-expires \   <---指定指定開啓expires模組(用於圖片快取)
--enable-rewrite \  <---指定開啓重寫模組(用於防盜鏈)
--enable-deflate \   <---指定開啓deflate模組(用於圖片壓縮)
--enable-charset-lite \  <---指定字元集
--enable-cgi \  <---指定規範

[root@server httpd-2.4.29]# make && make install   <---編譯&安裝

[root@server httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
ServerName www.cloud.com:80   <---指定域名
Listen 192.168.245.120:80   <---指定ip和監聽埠

2、安裝並開啓DNS服務

[root@server ~]# yum -y install bind
[root@server ~]# vim /etc/named.conf 
 12 options {
 13         listen-on port 53 { any; };  <---修改爲any
 21         allow-query     { any; };  <---修改爲any
 
[root@server ~]# vim /etc/named.rfc1912.zones 
zone "cloud.com" IN {
        type master;
        file "cloud.com.zone";
        allow-update { none; };
};

[root@server ~]# cd /var/named/
[root@server named]# cp -p named.localhost cloud.com.zone
[root@server named]# vim cloud.com.zone 
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       192.168.245.120

[root@server named]# systemctl start named

3、客戶機安裝HTTP偵錯抓包工具(fiddler)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、windows安裝IIS服務(web服務)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、壓縮

利用Apache中的gzip模組,我們可以使用gzip壓縮演算法來對Apache伺服器發佈的網頁內容進行壓縮後再傳輸到用戶端瀏覽器。這樣經過壓縮後實際上降低了網路傳輸的位元組數,最明顯的好處就是可以加快網頁載入的速度。

同時支援mod_gzip 和mod_deflate Apache內建有mod_deflate模組來啓用gzip功能,但假如安裝apache的時候沒有編譯相關模組,就需要你手動安裝一次,以啓用它;mod_deflate 是專門爲確保伺服器的效能而使用的一個壓縮模組,mod_deflate 需要較少的資源來壓縮檔案

第一步:修改apache主組態檔,檢查deflate、headers、filter模組是否開啓

[root@server httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule filter_module modules/mod_filter.so

<IfModule mod_deflate.c>   <---具體設定deflate模組
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript    <---指定壓縮檔案的型別
DeflateCompressionLevel 9  <---壓縮率, 9是高壓縮比
SetOutputFilter DEFLATE   <---壓縮所有檔案
</IfModule>

第二步:檢查語法並開啓服務

[root@server httpd-2.4.29]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@server httpd-2.4.29]# /usr/local/httpd/bin/apachectl

第三步:檢查已載入的模組是否有deflate

[root@server httpd-2.4.29]# cd /usr/local/httpd/bin/
[root@server bin]# ./apachectl -t -D DUMP_MODULES |grep "deflate"
 deflate_module (shared)

第四步:客戶機驗證,開啓抓包工具
在这里插入图片描述
第五步:編輯主頁檔案,寫一行文字,插入一張圖片

[root@server bin]# cd /usr/local/httpd/htdocs/
[root@server htdocs]# ls
index.html  panda.png

[root@server htdocs]# vim index.html 

<html><body><h1>It works!</h1><img src="panda.png"/</body></html>

在这里插入图片描述
抓包通過觀察headers,可以看到網頁經過了壓縮
在这里插入图片描述

四、快取

爲什麼要開啓快取功能?指示資源什麼時候過期的時間值(GMT時間),在指定的過期時間前,讓瀏覽器快取CSS、JS、圖片、靜態檔案等,瀏覽器可以直接使用自身快取的版本,而不用向伺服器發請求,大大減輕伺服器壓力。

第一步:修改apache主組態檔,確認expires模組是否開啓

[root@server ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so

<IfModule mod_expires.c>
 ExpiresActive On   <---開啓模組
ExpiresDefault "access plus 50 seconds"   <---設定最大快取時間50s
</IfModule>

第二步:檢查語法,確認expires模組已載入

[root@server ~]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@server ~]# cd /usr/local/httpd/bin/
[root@server bin]# ./apachectl -t -D DUMP_MODULES |grep "expires"
 expires_module (shared)

第三步:重新啓動apache服務

[root@server bin]# ./apachectl stop
[root@server bin]# ./apachectl start

第四步:客戶機驗證,開啓抓包工具,存取主頁,觀察headers
在这里插入图片描述

五、防盜鏈

現在很多網站都是直接使用其它網站上的資源,如果你網站頻寬效能不好,很容易給這類網站把流量費光了,下面 下麪我來介紹在Apache環境防盜鏈設定方法,這他們無法直接使用你網站上的資源

在这里插入图片描述
在这里插入图片描述
第一步:在win7的web伺服器上,新建一個主頁,寫入一句話,插入linux伺服器上的圖片
在这里插入图片描述

<html>
<head></head>
<body>
     <h1>this is the test web</h1>
     <img src="http://www.cloud.com/panda.png"/>  <---地址就用存取URL
</body>
</html>

第二步:編寫好以後,改名爲html後綴名
在这里插入图片描述
第三步:把它放到web伺服器的預設主頁目錄下
在这里插入图片描述
這時你存取本伺服器的地址,顯示了主頁內容,此時就盜鏈了linux伺服器上的圖片了
在这里插入图片描述
第四步:回到linux的web伺服器上,修改apache主組態檔,確認開啓了rewrite模組並設定規則

[root@server named]# vim /usr/local/httpd/conf/httpd.conf 
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/usr/local/httpd/htdocs">
      RewriteEngine On
      RewriteCond %{HTTP_REFERER} !^http://cloud.com/.*$ [NC]
      RewriteCond %{HTTP_REFERER} !^http://cloud.com$  [NC]
      RewriteCond %{HTTP_REFERER} !^http://www.cloud.com/.*$ [NC]
      RewriteCond %{HTTP_REFERER} !^http://www.cloud.com/$ [NC]
      RewriteRule .*\.(gif|png|swf)$ http://www.cloud.com/error.jpg
設定規則變數說明:
1.%{HTTP_ REFERER}: 瀏覽header中的鏈接欄位,代表是從哪個鏈接存取所需的網頁
2.!^:不以後面的字串開頭
3…*$:以任意字元結尾
4.NC:不區分大寫


規則匹配說明:
1.RewriteEngine On:開啓網頁重寫功能
2.RewriteCond:設定匹配規則
3.RewriteRule:設定跳轉動作

規則匹配:
1.如果相應變數的值匹配所設定的規則,則逐條往下處理;如果不匹配,則往後的規則不再匹配

第五步:檢查rewrite模組是否載入並重新啓動apache服務

[root@server named]# cd /usr/local/httpd/htdocs/
[root@server htdocs]# ls
error.jpg  index.html  panda.png
//把防盜鏈跳轉的圖片error.jpg放進主頁目錄

[root@server htdocs]# cd ../bin/
[root@server bin]# 
[root@server bin]# ./apachectl -t -D DUMP_MODULES | grep "rewrite"
 rewrite_module (shared)
[root@server bin]# ./apachectl restart

第六步:客戶機驗證防盜鏈成功
在这里插入图片描述
在这里插入图片描述

六、隱藏版本資訊

當遠端請求發送到你的 Apache Web 伺服器時,在預設情況下,一些有價值的資訊,如 web 伺服器版本號、伺服器操作系統詳細資訊、已安裝的 Apache 模組等等,會隨伺服器生成的文件發回用戶端。

這給攻擊者利用漏洞並獲取對 web 伺服器的存取提供了很多有用的資訊。
在这里插入图片描述
第一步:修改apache主組態檔,找到httpd-default.conf這一行將最前面的#去掉

[root@server bin]# vim /usr/local/httpd/conf/httpd.conf 
Include conf/extra/httpd-default.conf

當前版本的Apache將原來httpd.conf、srm.conf與access.conf中的所有設定參數均放在了組態檔 httpd.conf和conf/extra/httpd-default.conf中,只是爲了與以前的版本相容的原因,而隱藏版本資訊的設定是在httpd-default.conf中,所以我們要修改這個組態檔,然後讓主組態檔執行時包含它

[root@server bin]# cd ../conf/extra/
[root@server extra]# ls
httpd-autoindex.conf  httpd-languages.conf           httpd-ssl.conf
httpd-dav.conf        httpd-manual.conf              httpd-userdir.conf
httpd-default.conf    httpd-mpm.conf                 httpd-vhosts.conf
httpd-info.conf       httpd-multilang-errordoc.conf  proxy-html.conf

[root@server extra]# vim httpd-default.conf 

ServerTokens Prod   <---發送給用戶端的資訊: Server: Apache
ServerSignature Off  <---禁用顯示伺服器名稱和版本號的頁尾行
ServerTokens
它決定了發送回用戶端的伺服器響應頭欄位是否包含伺服器操作系統型別的描述和有關已啓用的 Apache 模組的資訊。

參數含義:
ServerTokens Full (或者不指定) 
發送給用戶端的資訊: Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2
ServerTokens Prod
發送給用戶端的資訊: Server: Apache
ServerTokens Major 
發送給用戶端的資訊: Server: Apache/2
ServerTokens Minor
發送給用戶端的資訊: Server: Apache/2.4
ServerTokens Min[imal] 
發送給用戶端的資訊: Server: Apache/2.4.2
ServerTokens OS 
發送給用戶端的資訊: Server: Apache/2.4.2 (Unix)

ServerSignature
這允許在伺服器生成的文件(如錯誤訊息、modproxy 的 ftp 目錄列表、modinfo 輸出等等)下新增一個顯示伺服器名稱和版本號的頁尾行。

它有三個可能的值:
On - 允許在伺服器生成的文件中新增尾部頁尾行,
Off - 禁用頁尾行
EMail - 建立一個 「mailto:」 參照;用於將郵件發送到所參照文件的 ServerAdmin。

第二步:重新啓動apache服務

[root@server extra]# cd ..
[root@server conf]# cd ../bin/
[root@server bin]# ./apachectl stop
[root@server bin]# ./apachectl start

第三步:客戶機上驗證已經隱藏了版本資訊
在这里插入图片描述