4五、Aapache的防盗链及访问控制(Directory、FileMatch)

一、配置防盗链:免费网络或者论坛,有时候若是网站流量偏高,抓包发现是图片的流量居多,发现是从某个站点链接跳过来的,原来是咱们的网站,被用户上传了许多色情图片,而用户又在他本身的网站上加了咱们网站图片的连接,就能本身访问链接跳转到咱们这个,致使流量很高:php

配置了防盗链后的做用:咱们本身网站的图片,只能本身来访问,其余借用是不能够的:html

1:配置防盗链:        /usr/local/apapche.24/conf/extra/http-vhosts.confweb

须要增长的配置文件内容以下apache

Directory针对目录进行
<Directory /data/wwwroot/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>

更改前的配置文件:vim

[root@localhost_002 conf]# vim extra/httpd-vhosts.conf 
# Virtual Hosts
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName  abc.com
    ServerAlias www.abc.com   www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin yuanhh@foreb.com
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.example.com  www.2111.com
    #<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 on 
     RewriteCond %{HTTP_HOST} !^www.111.com$  
     RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
   </IfModule>
    ErrorLog "logs/111.com-error_log" 
    CustomLog "logs/111.com-access_log" combined
</VirtualHost>

添加防盗链后的配置文件:注释:将Referer为空的白名单注释掉:  #SetEnvIfNoCase Referer “^$” local_ref 浏览器

[root@localhost_002 extra]# cat httpd-vhosts.conf 
# Virtual Hosts
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName  abc.com
    ServerAlias www.abc.com   www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin yuanhh@foreb.com
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.example.com  www.2111.com
    #<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针对目录进行
   <Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://www.111.com" local_ref
        SetEnvIfNoCase Referer "http://www.example.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>
   <IfModule mod_rewrite.c> 
     RewriteEngine on 
     RewriteCond %{HTTP_HOST} !^www.111.com$  
     RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
   </IfModule>
    ErrorLog "logs/111.com-error_log" 
    CustomLog "logs/111.com-access_log" combined
</VirtualHost>

注释:刷新的时候就是空Referer了,或者直接复制图片网址来打开时也是空Referer,当用第三方站点过来的时候也是空Referer了,要想访问须要打开Referer就能够了:bash

三、检测文件是否有错误:网络

[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful

四、而后访问:www.111.com/image/kaola.jpgcurl

注释:若是这时候在论坛建立一个帖子,将链接放进帖子中,再去访问,会看到仍是Forbidden,这是由于Referer时论坛的网址:ide

若想访问,则须要加入到白名单中:

注释:如果想要直接就能够在浏览器中访问,则只须要去虚拟主机配置文件中打开空的Referer:

SetEnvIfNoCase Referer "^$" local_ref

检测并重启服务:

[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful

五、也能够用curl命令去测试:   

[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful
[root@localhost_002 extra]# curl  -x127.0.0.1:80 www.111.com/image/kaola.jpg -I
HTTP/1.1 200 OK
Date: Sun, 07 Oct 2018 15:16:10 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Last-Modified: Tue, 14 Jul 2009 05:32:31 GMT
ETag: "bea1f-46ea3c3d3b9c0"
Accept-Ranges: bytes
Content-Length: 780831
Content-Type: image/jpeg

也能够自定义Referer:       curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80

[root@localhost_002 extra]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 www.111.com/image/kaola.jpg -I
HTTP/1.1 403 Forbidden
Date: Sun, 07 Oct 2018 15:17:36 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

六、访问控制:          Order deny,allow   (管IP是否匹配到,它都会从头至尾执行完)

首先打开虚拟主机配置:

Order   deny,allow      用来定义顺序,是先deny,仍是allow:

如果先deny,就先执行deny的语句:

如果先allow,就先自行allow的语句:

[root@localhost_002 extra]# vim /usr/local/apapche2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
</Directory>

2:在根目录/data/wwwroot/www.111.com/下建立一个admin目录,并新建一个index.php的文件,内容为12121.

[root@localhost_002 extra]# cd /data/wwwroot/
[root@localhost_002 wwwroot]# ls
111.com  abc.com
[root@localhost_002 wwwroot]# cd 111.com/
[root@localhost_002 111.com]# mkdir admin
[root@localhost_002 111.com]# cd admin
[root@localhost_002 admin]# vim index.php
erqwe231423421

3:检测语法,并从新加载配置文件:

[root@localhost_002 admin]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 admin]# /usr/local/apapche2.4/bin/apachectl graceful

4:测试:因为在上述命令中禁止了全部源IP访问,只容许127.0.0.1访问,最终就是目标IP和原IP是同一个IP,本身和本身通讯,限制IP实际上是源IP:

 curl -x127.0.0.1:80 www.111.com/admin/index.php -I              注释:   -x 指定目标IP:

[root@localhost_002 extra]# curl -x127.0.0.1:80 www.111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Sun, 07 Oct 2018 15:30:32 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

在更换目标IP后,源IP也会跟着变化:

[root@localhost_002 extra]# curl -x192.168.149.130 www.111.com/admin/index.php -I
curl: (7) Failed connect to 192.168.149.130:1080; 拒绝链接
[root@localhost_002 extra]# curl -x192.168.149.130:80 www.111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Sun, 07 Oct 2018 15:38:26 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

网页访问也没法访问   www.111.com/admin/inde.php

注释:访问控制是用目录的形式来作的,首先规定一个目录访问到哪里去的(目录必须使用绝对路径),而后是Oerder,控制的对象就是来源IP:

注释:默认不定义deny规则,也会deny,若是想设置只容许几个IP访问的话,不定义deny的话,默认也是deny掉了,能够经过以下定义:

Order    allow    deny

allow   from   127.0.0.1

七、访问控制:   <FileMatch>               访问控制,除了目录形式,仍是文件名去匹配(或连接)

打开虚拟配置文件:

首先定义一个Directory,在下面定义一个FileMatch:

<Directory /data/wwwroot/111.com>
      <FilesMatch admin.php(.*)>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
     </FilesMatch>
</Directory>

检测语法错误,并重启apache服务:

[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl -t
Syntax OK
[root@localhost_002 extra]# /usr/local/apapche2.4/bin/apachectl graceful

测试:  curl   -x192.168.149.130:80  www.111.com/admin/asdfsdfsdf -I

[root@localhost_002 extra]# curl -x192.168.149.130:80 www.111.com/admin/asdfsdfsadf -I
HTTP/1.1 404 Not Found
Date: Sun, 07 Oct 2018 16:33:05 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

注释:这里没有对admin目录作任何限制,作的FilesMatch跟这个不匹配,没有遇到控制语句,因此访问是404

有特殊符号须要用 ” 单引号括起来:

[root@localhost_002 extra]# curl -x192.168.149.130:80 'http://www.111.com/admin.phpasdfsdfsadf' -I
HTTP/1.1 403 Forbidden
Date: Sun, 07 Oct 2018 16:35:47 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@localhost_002 extra]# curl -x127.0.0.1:80 'http://www.111.com/admin.phpasdfsdfsadf' -I
HTTP/1.1 404 Not Found
Date: Sun, 07 Oct 2018 16:36:45 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

注释:Directory和FilesMatch 功能是同样的,只不过有时仅仅想针对一个访问的连接去作控制,那么再去控制目录则不太合适,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

相关文章
相关标签/搜索