2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
5月31日任務(wù) 11.25 配置防盜鏈 11.26 訪問(wèn)控制Directory 11.27 訪問(wèn)控制FilesMatch 擴(kuò)展 幾種限制ip的方法?http://ask.apelearn.com/question/6519 apache 自定義header?http://ask.apelearn.com/question/830 apache的keepalive和keepalivetimeout?http://ask.apelearn.com/question/556
? 配置防盜鏈目錄概要 通過(guò)限制referer來(lái)實(shí)現(xiàn)防盜鏈的功能 配置文件增加如下內(nèi)容 Directory針對(duì)目錄進(jìn)行<Directory /data/wwwroot/www.123.com> //用于定義作用于那個(gè)目錄SetEnvIfNoCase Referer “http://www.123.com” local_ref //定義白名單SetEnvIfNoCase Referer “http://123.com” local_ref //定義白名單SetEnvIfNoCase Referer “^$” local_ref //定義空的頁(yè)面的白名單<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定義規(guī)則Order Allow,Deny //定義訪問(wèn)控制Allow from env=local_ref </filesmatch></Directory>
curl -e "http://www.aminglinux.com/123.html" 自定義referer 防盜鏈 防盜鏈的定義 此內(nèi)容不在自己服務(wù)器上,而通過(guò)技術(shù)手段,繞過(guò)別人放廣告有利益的最終頁(yè),直接在自己的有廣告有利益的頁(yè)面上向最終用戶提供此內(nèi)容。 常常是一些名不見(jiàn)經(jīng)傳的小網(wǎng)站來(lái)盜取一些有實(shí)力的大網(wǎng)站的地址(比如一些音樂(lè)、圖片、軟件的下載地址)然后放置在自己的網(wǎng)站中,通過(guò)這種方法盜取大網(wǎng)站的空間和流量。 為什么會(huì)產(chǎn)生盜鏈 一般瀏覽有一個(gè)重要的現(xiàn)象就是一個(gè)完整的頁(yè)面并不是一次全部傳送到客戶端的。如果請(qǐng)求的是一個(gè)帶有許多圖片和其它信息的頁(yè)面,那么最先的一個(gè)Http請(qǐng)求被傳送回來(lái)的是這個(gè)頁(yè)面的文本,然后通過(guò)客戶端的瀏覽器對(duì)這段文本的解釋執(zhí)行,發(fā)現(xiàn)其中還有圖片,那么客戶端的瀏覽器會(huì)再發(fā)送一條Http請(qǐng)求,當(dāng)這個(gè)請(qǐng)求被處理后那么這個(gè)圖片文件會(huì)被傳送到客戶端,然后瀏覽器會(huì)將圖片安放到頁(yè)面的正確位置,就這樣一個(gè)完整的頁(yè)面也許要經(jīng)過(guò)發(fā)送多條Http請(qǐng)求才能夠被完整的顯示?;谶@樣的機(jī)制,就會(huì)產(chǎn)生一個(gè)問(wèn)題,那就是盜鏈問(wèn)題:就是一個(gè)網(wǎng)站中如果沒(méi)有起頁(yè)面中所說(shuō)的信息,例如圖片信息,那么它完全可以將這個(gè)圖片的連接到別的網(wǎng)站。這樣沒(méi)有任何資源的網(wǎng)站利用了別的網(wǎng)站的資源來(lái)展示給瀏覽者,提高了自己的訪問(wèn)量,而大部分瀏覽者又不會(huì)很容易地發(fā)現(xiàn),這樣顯然,對(duì)于那個(gè)被利用了資源的網(wǎng)站是不公平的。一些不良網(wǎng)站為了不增加成本而擴(kuò)充自己站點(diǎn)內(nèi)容,經(jīng)常盜用其他網(wǎng)站的鏈接。一方面損害了原網(wǎng)站的合法利益,另一方面又加重了服務(wù)器的負(fù)擔(dān)。 配置防盜鏈 打開(kāi)虛擬主機(jī)配置文件 需要添加的配置文件 Directory針對(duì)目錄進(jìn)行<Directory /data/wwwroot/www.111.com> //用于定義作用于哪個(gè)目錄,配置防盜鏈,就是定義本站點(diǎn)SetEnvIfNoCase Referer “http://www.111.com” local_ref //定義Referer白名單SetEnvIfNoCase Referer “http://aaa.com” local_ref //定義白名單SetEnvIfNoCase Referer “^$” local_ref //定義空的Referer頁(yè)面為白名單<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定義規(guī)則,這里的filesmatch中f 和 m 可以大寫可以小寫Order Allow,Deny //定義訪問(wèn)控制,order用來(lái)定義訪問(wèn)順序Allow from env=local_ref </filesmatch></Directory>
<VirtualHost *:80>DocumentRoot "/data/wwwroot/abc.com"ServerName abc.comServerAlias www.abc.com www.123.comErrorLog "logs/abc.com-error_log"CustomLog "logs/abc.com-access_log" common
</VirtualHost><VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com 2111.com.cn# <Directory /data/wwwroot/111.com> # <FilesMatch 123.php># AllowOverride AuthConfig# AuthName "111.com user auth"# AuthType Basic# AuthUserFile /data/.htpasswd# require valid-user# </FilesMatch>#</Directory><IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{HTTP_HOST} !^111.com$RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
<IfModule mod_expires.c>ExpiresActive onExpiresByType image/gif "access plus 1 days"ExpiresByType image/jpeg "access plus 24 hours"ExpiresByType image/png "access plus 24 hours"ExpiresByType text/css "now plus 2 hour"ExpiresByType application/x-javascript "now plus 2 hours"ExpiresByType application/javascript "now plus 2 hours"ExpiresByType application/x-shockwave-flash "now plus 2 hours"ExpiresDefault "now plus 0 min"
</IfModule><Directory /data/wwwroot/www.111.com>SetEnvIfNoCase Referer "http://www.111.com" local_refSetEnvIfNoCase Referer "http://111.com" local_ref# SetEnvIfNoCase Referer "^$" local_ref<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">Order Allow,DenyAllow from env=local_ref</filesmatch></Directory>ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" imgSetEnvIf Request_URI ".*\.jpg$" imgSetEnvIf Request_URI ".*\.png$" imgSetEnvIf Request_URI ".*\.bmp$" imgSetEnvIf Request_URI ".*\.swf$" imgSetEnvIf Request_URI ".*\.js$" imgSetEnvIf Request_URI ".*\.css$" img
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
更改后的配置文件,并將空的Referer頁(yè)面為白名單 注釋掉 將# SetEnvIfNoCase Referer "^$" local_ref [root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf<VirtualHost *:80>DocumentRoot "/data/wwwroot/abc.com"ServerName abc.comServerAlias www.abc.com www.123.comErrorLog "logs/abc.com-error_log"CustomLog "logs/abc.com-access_log" common
</VirtualHost><VirtualHost *:80>DocumentRoot "/data/wwwroot/111.com"ServerName 111.comServerAlias www.example.com 2111.com.cn# <Directory /data/wwwroot/111.com> # <FilesMatch 123.php># AllowOverride AuthConfig# AuthName "111.com user auth"# AuthType Basic# AuthUserFile /data/.htpasswd# require valid-user# </FilesMatch>#</Directory><Directory /data/wwwroot/111.com>SetEnvIfNoCase Referer "http://www.111.com" local_refSetEnvIfNoCase Referer "http://aaa.com" local_ref# SetEnvIfNoCase Referer "^$" local_ref<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">Order Allow,DenyAllow from env=local_ref</filesmatch></Directory>ErrorLog "logs/111.com-error_log"
SetEnvIf Request_URI ".*\.gif$" imgSetEnvIf Request_URI ".*\.jpg$" imgSetEnvIf Request_URI ".*\.png$" imgSetEnvIf Request_URI ".*\.bmp$" imgSetEnvIf Request_URI ".*\.swf$" imgSetEnvIf Request_URI ".*\.js$" imgSetEnvIf Request_URI ".*\.css$" img
CustomLog "|/usr/local/apache2/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
檢查配置文件是否存在語(yǔ)法錯(cuò)誤,并重新加載配置文件 [root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
用瀏覽器訪問(wèn)111.com/images/baidu.png圖片,會(huì)顯示Forbidden
這時(shí)在論壇創(chuàng)建一個(gè)帖子,將連接放進(jìn)帖子中,再去訪問(wèn),會(huì)看到還是Forbidden,這是因?yàn)镽eferer是ask.apelearn.com 若是想在帖子中正常訪問(wèn)圖片,可以將ask.apelearn.com加入到白名單中 SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
然后檢查配置文件是否存在語(yǔ)法錯(cuò)誤,并重新加載配置文件 [root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
這時(shí)再來(lái)在帖子中訪問(wèn)圖片,會(huì)看到正常訪問(wèn)
若是想要直接就可以在瀏覽器中訪問(wèn),則只需要去虛擬主機(jī)配置文件中打開(kāi)空的Referer [root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf更改前,去除前面的注釋符# SetEnvIfNoCase Referer "^$" local_ref
更改后
SetEnvIfNoCase Referer "^$" local_ref
然后檢查配置文件語(yǔ)法錯(cuò)誤,并重啟配置文件 這時(shí)候在瀏覽器中訪問(wèn)訪問(wèn)圖片就會(huì)正常顯示 用curl測(cè)試 [root@yong-02 111.com]# curl -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:01:30 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
當(dāng)然也可以用curl去模擬Referer,使用 -e 參數(shù)指定Referer [root@yong-02 111.com]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:04:21 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1[root@yong-02 111.com]# curl -e "http://111.com/123.php" -x127.0.0.1:80 111.com/images/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:04:41 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Wed, 30 May 2018 13:46:34 GMT
ETag: "a46d-56d6c9435c280"
Accept-Ranges: bytes
Content-Length: 42093
Content-Type: image/png
?
訪問(wèn)控制 – Directory目錄概要 <Directory /data/wwwroot/111.com/admin/>Order deny,allowDeny from allAllow from 127.0.0.1</Directory>
curl測(cè)試狀態(tài)碼為403則被限制訪問(wèn)了 訪問(wèn)控制 打開(kāi)虛擬主機(jī)配置文件 Order,用來(lái)定義順序,是先deny,還是allow 若是先deny,就先執(zhí)行deny的語(yǔ)句 若是先allow,就先執(zhí)行allow的語(yǔ)句 特殊性: 不管IP是否匹配到,它都會(huì)從頭到尾執(zhí)行完 [root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf將代碼放在防盜鏈代碼上面,防止沖突<Directory /data/wwwroot/111.com/admin/>Order deny,allowDeny from allAllow from 127.0.0.1</Directory>
創(chuàng)建一個(gè)admin目錄,并新建一個(gè)index.php文件,內(nèi)容為121212 [root@yong-02 111.com]# mkdir admin
[root@yong-02 111.com]# cd admin/
[root@yong-02 admin]# touch index.php
[root@yong-02 admin]# echo "12113414123">index.php
[root@yong-02 admin]# cat index.php
12113414123
檢查語(yǔ)法錯(cuò)誤,并重新加載配置文件 [root@yong-02 admin]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl graceful
限制的原 IP curl -x127.0.0.1:80 111.com/admin/index.php -I 127.0.0.1是目標(biāo) IP ,而要訪問(wèn)的IP,也要使用127.0.0.1去訪問(wèn),最終就是目標(biāo)IP和原IP是同一個(gè)IP,自己和自己通信,限制IP是 原 IP -x指定的是目標(biāo)IP [root@yong-02 admin]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:21:22 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8
在更換目標(biāo)IP,那么原IP也會(huì)跟著變化 [root@yong-02 admin]# curl -x192.168.180.135:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:24:48 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
瀏覽器訪問(wèn)111.com/admin/index.php會(huì)顯示forbidden
訪問(wèn)控制是用目錄的形式來(lái)做的,首先規(guī)定一個(gè)目錄訪問(wèn)到哪里去的(目錄必須使用絕對(duì)路徑),然后是Oerder,控制的對(duì)象就是來(lái)源IP 訪問(wèn)控制 – FilesMatch目錄概要 <Directory /data/wwwroot/www.123.com> //功能作用目錄<FilesMatch "admin.php(.*)"> //針對(duì)admin.php(.*)這個(gè)類型的文件,進(jìn)行控制Order deny,allowDeny from allAllow from 127.0.0.1</FilesMatch>
</Directory>
訪問(wèn)控制 – FilesMatch 訪問(wèn)控制,除了目錄形式,還是文件名去匹配(或鏈接) 打開(kāi)虛擬主機(jī)配置文件 首先定義一個(gè)Directory,然后在下面在定義一個(gè)FilesMatch [root@yong-02 admin]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/111.com><FilesMatch "admin.php(.*)">Order deny,allowDeny from allAllow from 127.0.0.1</FilesMatch></Directory>
檢查語(yǔ)法錯(cuò)誤,并重新加載配置文件 [root@yong-02 admin]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl graceful
這里沒(méi)有對(duì)admin目錄做任何限制,做的FilesMatch跟這個(gè)不匹配,沒(méi)有遇到控制語(yǔ)句,所以訪問(wèn)是404
[root@yong-02 admin]# curl -x192.168.180.135:80 111.com/admin/fasdfasdf -I
HTTP/1.1 404 Not Found
Date: Thu, 31 May 2018 15:36:57 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1有特殊符號(hào)需要用 ” 單引號(hào)括起來(lái)
[root@yong-02 111.com]# curl -x192.168.180.135:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:44:16 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1[root@yong-02 111.com]# curl -x127.0.0.1:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 404 Not Found
Date: Thu, 31 May 2018 15:44:45 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
總結(jié) Directory和FilesMatch 功能是一樣的,只不過(guò)有時(shí)僅僅想針對(duì)一個(gè)訪問(wèn)的鏈接去做控制,那么再去控制目錄則不太合適,FilesMatch可以滿足一些比較個(gè)性化的需求 ?
轉(zhuǎn)載于:https://my.oschina.net/u/3791387/blog/1822158
總結(jié)
以上是生活随笔 為你收集整理的配置防盗链、 访问控制Directory 、访问控制FilesMatch 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。