配置防盗链、访问控制Directory和FilesMatch

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

 

11.25 配置防盗链

通过限制referer来实现防盗链的功能,在虚拟主机vhosts.conf配置文件增加如下内容。

<Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref  //设置白名单
        SetEnvIfNoCase Referer "http://aaa.com" local_ref  //设置白名单
        #SetEnvIfNoCase Referer "^$" local_ref  //空Referer
        <FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
            Order Allow,Deny
            Allow from env=local_ref
        </FilesMatch>
</Directory>

保存配置文件后需要重新加载

[root@jimmylinux-002 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@jimmylinux-002 ~]# /usr/local/apache2.4/bin/apachectl graceful

在浏览器刷新111.com/qq.jpg 会出现以下报错,因为这是一个空Referer。

如果想不是空Referer能够正常访问,首先在猿课论坛发一个帖子。

通过帖子打开链接,这个时候同样也会是Forbidden,因为Referer是ask.apelearn.com,如果想正常访问,那么把ask.apelearn.com加入到白名单即可。

SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref

记得保存配置文件后需要重新加载

[root@jimmylinux-002 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@jimmylinux-002 ~]# /usr/local/apache2.4/bin/apachectl graceful

然后点击猿课论坛帖子链接http://111.com/qq.jpg 就可以正常访问了

如果想直接访问,需要把配置文件中空Referer这行前面的#删除掉,这样就可以直接访问。

SetEnvIfNoCase Referer "^$" local_ref  

保存退出重新加载配置文件,直接输入http://111.com/qq.jpg 就可以正常访问了。

一样也可以使用curl命令来测试

[root@jimmylinux-002 ~]# curl -x127.0.0.1:80 111.com/qq.jpg -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:03:05 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Tue, 17 Apr 2018 15:16:35 GMT
ETag: "6089-56a0cd2f55ac0"
Accept-Ranges: bytes
Content-Length: 24713
Content-Type: image/jpeg

[root@jimmylinux-002 ~]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 111.com/qq.jpg -I //通过-e “http://www.qq.com”指定Referer 
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:04:06 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@jimmylinux-002 ~]# curl -e "http://111.com/123.txt" -x127.0.0.1:80 111.com/qq.jpg -I  //111.com是本身存在的域名,使用不会报错。
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:04:38 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Last-Modified: Tue, 17 Apr 2018 15:16:35 GMT
ETag: "6089-56a0cd2f55ac0"
Accept-Ranges: bytes
Content-Length: 24713
Content-Type: image/jpeg

可以通过查看日志验证刚才的访问记录

[root@jimmylinux-002 ~]# tail /usr/local/apache2.4/logs/111.com-access_20180531.log
192.168.52.1 - - [31/May/2018:17:31:18 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://111.com/qq.jpg" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
127.0.0.1 - - [31/May/2018:23:14:51 +0800] "HEAD HTTP://111.com/qq.jpg1 HTTP/1.1" 404 - "http://111.com/123.txt" "curl/7.29.0"

 

11.26 访问控制Directory

访问控制的背景,之前有提到用户认证的方式进行访问,那么我希望能够控制的更严格些,比如当访问内部管理,仅仅针对内部人员,外部人员一律不开放,可以做一些白名单限制,只有在白名单里面的才可以访问,其他的访问都被拒绝。

可以修改虚拟主机配置文件vhosts.conf,为了不和防盗链的配置冲突,把添加的内容放到防盗链配置的上面。

<Directory /data/wwwroot/111.com/admin/>
        Order deny,allow    //这里的order是指顺利,例如order deny,allow 表示先执行deny,再执行allow。
        Deny from all
        Allow from 127.0.0.1
</Directory>

<Directory /data/wwwroot/111.com>
        SetEnvIfNoCase Referer "http://111.com" local_ref
        SetEnvIfNoCase Referer "http://ask.apelearn.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>

在进行测试之前我们先创建指定的admin目录和目录下面的index.php文件,然后加载配置。

[root@jimmylinux-002 111.com]# mkdir admin
[root@jimmylinux-002 111.com]# ls
admin  admin.php  index.php  qq.jpg
[root@jimmylinux-002 111.com]# cd admin/
[root@jimmylinux-002 admin]# ls
[root@jimmylinux-002 admin]# vi index.php
[root@jimmylinux-002 admin]# ls
index.php
[root@jimmylinux-002 admin]# cat index.php
123456123456
[root@jimmylinux-002 admin]# /usr/local/apache2.4/bin/apachectl graceful

使用curl命令进行访问测试,出现状态码403说明访问被限制了。

[root@jimmylinux-002 111.com]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Thu, 31 May 2018 15:53:25 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@jimmylinux-002 111.com]# curl -x127.0.0.1:80 111.com/admin/index.php
123456123456
[root@jimmylinux-002 111.com]# curl -x192.168.52.129:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 15:55:35 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@jimmylinux-002 111.com]# curl -x127.0.0.1:80 111.com/admin/index.php
123456123456
[root@jimmylinux-002 111.com]# tail /usr/local/apache2.4/logs/111.com-access_20180531.log
192.168.52.1 - - [31/May/2018:17:31:18 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://111.com/qq.jpg" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
127.0.0.1 - - [31/May/2018:23:14:51 +0800] "HEAD HTTP://111.com/qq.jpg1 HTTP/1.1" 404 - "http://111.com/123.txt" "curl/7.29.0"
127.0.0.1 - - [31/May/2018:23:53:25 +0800] "HEAD HTTP://111.com/admin/index.php HTTP/1.1" 200 - "-" "curl/7.29.0"
127.0.0.1 - - [31/May/2018:23:53:46 +0800] "GET HTTP://111.com/admin/index.php HTTP/1.1" 200 13 "-" "curl/7.29.0"
192.168.52.129 - - [31/May/2018:23:55:35 +0800] "HEAD HTTP://111.com/admin/index.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [31/May/2018:23:56:00 +0800] "GET HTTP://111.com/admin/index.php HTTP/1.1" 200 13 "-" "curl/7.29.0"

 

11.27 访问控制FilesMatch

访问控制不仅仅可以针对目录形式,也可以去匹配文件名或者链接的形式进行限制。

例如:http://111.com/admin.php?&1=1&2=2   这样的方式

在vhosts.conf配置文件中添加 <FilesMatch  "admin.php(.*)">和</FilesMatch>条件,具体内容如下。

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

报错配置文件并重新加载,然后使用curl命令测试。

[root@jimmylinux-002 111.com]# curl -x192.168.52.129:80 http://111.com/admin/fjasjds -I
HTTP/1.1 404 Not Found
Date: Thu, 31 May 2018 16:37:26 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

[root@jimmylinux-002 111.com]# curl -x192.168.52.129:80 'http://111.com/admin.php?ajasjds' -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 16:38:46 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

 

 

 

 

posted @ 2018-05-31 15:25  吉米乐享驿站  阅读(201)  评论(0编辑  收藏  举报