笔记内容

  • 11.25 配置防盗链

  • 11.26 访问控制Directory

  • 11.27 访问控制FilesMatch

笔记日期:2017.10.11


11.25 配置防盗链

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链

防盗链能限制不认识的referer的访问,能够禁止别人的服务器引用或转发我服务器上的内容,这样可以防止别人盗用我服务器上的资源,服务器的资源被盗用会导致网络带宽的使用量上升。

  1. 配置虚拟主机文件增加以下内容:

vim /usr/local/apache2.4/conf/extra/httpd-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

       <FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">

           Order Allow,Deny

           Allow from env=local_ref

       </FilesMatch>

   </Directory>

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_02


修改完之后重新加载一下配置文件:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_03


然后使用浏览器测试一下是否能够访问:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_04

可以看到现在去访问图片就提示Forbidden了,因为我们没有把空referer放行所以会显示Forbidden。

空referer一会再介绍,如果我现在在一个第三方网站上引用这个地址,如果这个网站没有在白名单中,也是无法进行访问的,例如:我在一个第三方网站的帖子上把这个地址做成超链接然后去访问:

超链接:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_05


同样的也是显示Forbidden,无法访问:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_06


想要能够访问的话就得把这个第三方网站的域名设置到白名单里去:

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链_07


这时候再点击那个超链接就可以访问了:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_08


至于空referer也是在白名单里放行就可以了,所谓空referer就是不是从第三方网站跳转过去访问的,而是直接使用111.com/test.jpg这样的一个地址去访问的就是空referer:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_09


放行空referer后,也就可以直接空referer访问了:

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链_10


使用curl命令也可以进行空referer的访问:

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链_11


也可以模拟第三方网站的访问,需要使用到-e选项:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_12


同样的不在白名单里的域名去访问就会报403状态码提示Forbidden:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_13


使用-e选项时,域名的描述不能乱写,要以http://开头。


查看日志也可以看到会记录referer:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_14




11.26 访问控制Directory

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_15

访问控制类似于用户认证,但是要比用户认证更安全一些,因为用户认证需要输入账户密码,如果账户密码被别人知道了,那么别人就能够通过认证去访问你的服务器了。

访问控制则不需要通过账户密码来验证,因为访问控制只允许白名单内的IP进行访问,其他的IP一概拒绝访,所以在安全性上要比用户认证的机制更安全一些,而且这两者也可以结合到一起使用:先通过用户认证再让访问控制去过滤IP也是可以的。

  1. 修改虚拟主机配置文件内容如下:

<Directory /data/wwwroot/www.123.com/admin/>

       Order deny,allow

       Deny from all

       Allow from 127.0.0.1

</Directory>

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_16


保存修改后,到/data/wwwroot/111.com目录下创建一个admin目录,并拷贝index.php文件到admin目录下:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_17

然后加载配置文件后,使用curl命令进行测试:

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链_18

可以看到使用白名单里的IP是可以进行访问的。


如果我换一个不在白名单里的IP去进行访问,就会出现403状态码:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_19


查看日志内容也可以看到记录了这两个访问:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_20


同样的使用浏览器去访问也是Forbidden:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_21


11.27 访问控制FilesMatch

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_22

 除了Directory的访问控制还有FilesMatch的访问控制,Directory访问控制类似于限制一个目录的访问,而FilesMatch访问控制则类似于限制一个文件或文件链接的访问,FilesMatch要写在Directory之内。

  1. 修改虚拟主机配置文件内容如下:

<Directory /data/wwwroot/111.com>

       <FilesMatch admin.php(.*)>

       Order deny,allow

       Deny from all

       Allow from 127.0.0.1

       </FilesMatch>

</Directory>

配置防盗链,访问控制Directory,访问控制FilesMatch_配置防盗链_23


  修改完成后重新加载配置文件,然后使用curl命令访问admin.php或与此文件的相关链接,就都会报403状态码:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制Directory_24


使用白名单内的IP去访问就不会报403了,报404的原因是因为没有这个文件,但是已经可以访问了:

配置防盗链,访问控制Directory,访问控制FilesMatch_访问控制FilesMatch_25


  控制FilesMatch 相对于控制Directory 来说要灵活一些,因为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