2019獨角獸企業重金招聘Python工程師標準>>>
5月31日任務 11.25 配置防盜鏈 11.26 訪問控制Directory 11.27 訪問控制FilesMatch 擴展 幾種限制ip的方法?http://ask.apelearn.com/question/6519 apache 自定義header?http://ask.apelearn.com/question/830 apache的keepalive和keepalivetimeout?http://ask.apelearn.com/question/556
? 配置防盜鏈目錄概要 通過限制referer來實現防盜鏈的功能 配置文件增加如下內容 Directory針對目錄進行<Directory /data/wwwroot/www.123.com> //用于定義作用于那個目錄SetEnvIfNoCase Referer “http://www.123.com” local_ref //定義白名單SetEnvIfNoCase Referer “http://123.com” local_ref //定義白名單SetEnvIfNoCase Referer “^$” local_ref //定義空的頁面的白名單<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定義規則Order Allow,Deny //定義訪問控制Allow from env=local_ref </filesmatch></Directory>
curl -e "http://www.aminglinux.com/123.html" 自定義referer 防盜鏈 防盜鏈的定義 此內容不在自己服務器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟件的下載地址)然后放置在自己的網站中,通過這種方法盜取大網站的空間和流量。 為什么會產生盜鏈 一般瀏覽有一個重要的現象就是一個完整的頁面并不是一次全部傳送到客戶端的。如果請求的是一個帶有許多圖片和其它信息的頁面,那么最先的一個Http請求被傳送回來的是這個頁面的文本,然后通過客戶端的瀏覽器對這段文本的解釋執行,發現其中還有圖片,那么客戶端的瀏覽器會再發送一條Http請求,當這個請求被處理后那么這個圖片文件會被傳送到客戶端,然后瀏覽器會將圖片安放到頁面的正確位置,就這樣一個完整的頁面也許要經過發送多條Http請求才能夠被完整的顯示。基于這樣的機制,就會產生一個問題,那就是盜鏈問題:就是一個網站中如果沒有起頁面中所說的信息,例如圖片信息,那么它完全可以將這個圖片的連接到別的網站。這樣沒有任何資源的網站利用了別的網站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發現,這樣顯然,對于那個被利用了資源的網站是不公平的。一些不良網站為了不增加成本而擴充自己站點內容,經常盜用其他網站的鏈接。一方面損害了原網站的合法利益,另一方面又加重了服務器的負擔。 配置防盜鏈 Directory針對目錄進行<Directory /data/wwwroot/www.111.com> //用于定義作用于哪個目錄,配置防盜鏈,就是定義本站點SetEnvIfNoCase Referer “http://www.111.com” local_ref //定義Referer白名單SetEnvIfNoCase Referer “http://aaa.com” local_ref //定義白名單SetEnvIfNoCase Referer “^$” local_ref //定義空的Referer頁面為白名單<filesmatch “.(txt|doc|mp3|zip|rar|jpg|gif|png)”> //定義規則,這里的filesmatch中f 和 m 可以大寫可以小寫Order Allow,Deny //定義訪問控制,order用來定義訪問順序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頁面為白名單 注釋掉 將# 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>
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
用瀏覽器訪問111.com/images/baidu.png圖片,會顯示Forbidden
這時在論壇創建一個帖子,將連接放進帖子中,再去訪問,會看到還是Forbidden,這是因為Referer是ask.apelearn.com 若是想在帖子中正常訪問圖片,可以將ask.apelearn.com加入到白名單中 SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
然后檢查配置文件是否存在語法錯誤,并重新加載配置文件 [root@yong-02 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 111.com]# /usr/local/apache2/bin/apachectl graceful
若是想要直接就可以在瀏覽器中訪問,則只需要去虛擬主機配置文件中打開空的Referer [root@yong-02 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf更改前,去除前面的注釋符# SetEnvIfNoCase Referer "^$" local_ref
更改后
SetEnvIfNoCase Referer "^$" local_ref
然后檢查配置文件語法錯誤,并重啟配置文件 這時候在瀏覽器中訪問訪問圖片就會正常顯示 用curl測試 [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
當然也可以用curl去模擬Referer,使用 -e 參數指定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
?
訪問控制 – Directory目錄概要 <Directory /data/wwwroot/111.com/admin/>Order deny,allowDeny from allAllow from 127.0.0.1</Directory>
訪問控制 打開虛擬主機配置文件 Order,用來定義順序,是先deny,還是allow 若是先deny,就先執行deny的語句 若是先allow,就先執行allow的語句 特殊性: [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>
創建一個admin目錄,并新建一個index.php文件,內容為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
[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是目標 IP ,而要訪問的IP,也要使用127.0.0.1去訪問,最終就是目標IP和原IP是同一個IP,自己和自己通信,限制IP是 原 IP -x指定的是目標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
[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
瀏覽器訪問111.com/admin/index.php會顯示forbidden
訪問控制是用目錄的形式來做的,首先規定一個目錄訪問到哪里去的(目錄必須使用絕對路徑),然后是Oerder,控制的對象就是來源IP 訪問控制 – FilesMatch目錄概要 <Directory /data/wwwroot/www.123.com> //功能作用目錄<FilesMatch "admin.php(.*)"> //針對admin.php(.*)這個類型的文件,進行控制Order deny,allowDeny from allAllow from 127.0.0.1</FilesMatch>
</Directory>
訪問控制 – FilesMatch 訪問控制,除了目錄形式,還是文件名去匹配(或鏈接) 打開虛擬主機配置文件 首先定義一個Directory,然后在下面在定義一個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>
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@yong-02 admin]# /usr/local/apache2/bin/apachectl graceful
這里沒有對admin目錄做任何限制,做的FilesMatch跟這個不匹配,沒有遇到控制語句,所以訪問是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有特殊符號需要用 ” 單引號括起來
[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
總結 Directory和FilesMatch 功能是一樣的,只不過有時僅僅想針對一個訪問的鏈接去做控制,那么再去控制目錄則不太合適,FilesMatch可以滿足一些比較個性化的需求 ?
轉載于:https://my.oschina.net/u/3791387/blog/1822158
總結
以上是生活随笔 為你收集整理的配置防盗链、 访问控制Directory 、访问控制FilesMatch 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。