11.25 配置防盗链
防止有人利用网站文件上传的功能,把一些静态媒体资源放到我们的网站上,然后在他们的网站上设置这些资源的链接到我们的网站上,当他们网站用户访问这些资源时,就会跳转到我们的服务器上,导致我们的服务器带宽流量异常增大。为了防止这种情况发生,我们利用apache服务器访问控制实现防盗链功能。
在/usr/local/apache2.4/conf/extra/httpd-vhosts.conf配置文件下进行设定:
<Directory /data/wwwroot/111.com> #定义防盗链的目录
SetEnvIfNoCase Referer "http://www.111.com" local_ref //指定referer白名单
SetEnvIfNoCase Referer "http://111.com" local_ref //指定referer白名单
SetEnvIfNoCase Referer "^$" local_ref //空的referer也能访问
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> //使用文件匹配访问控制,定义规则
Order Allow,Deny //访问控制顺序,先允许后拒绝。
Allow from env=local_ref //只有符合白名单上的referer才能访问111.com目录。
</FilesMatch>
</Directory>
查看设置是否成功
[root@localhost 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@localhost 111.com]# !curl
.....
HTTP/1.1 200 OK
验证效果。
curl -e “www.111.com” -x127.0.0.1:80 www.111.com/logo.jpg -I //-e选项是指定referer进行访问。
11.26 访问控制Directory
公司的内部网站可以设置访问控制,指定来源IP才能够访问,只有把公司里面的IP地址放到referer白名单里面就可以访问了。
配置的时候,把Directory配置的内容放在防盗链前面
在/usr/local/apache2.4/conf/extra/httpd-vhosts.conf配置文件下进行设定:
<Directory /data/wwwroot/111.com> // 指定需要访问控制的网站的目录
Order deny,allow //访问控制的顺序,先所有都拒绝,然后再允许指定的ip。和iptables不同,可以全部规则都执行下去。
Deny from all // 拒绝所有的来源ip
Allow from 127.0.0.1 //指定允许访问的来源ip(指定网段也可以192.168.0.0/24)
</Directory>
[root@localhost 111.com]# !tail 查看日志中源IP地址
[root@localhost 111.com]# curl -x 192.168.168.133:80 www.123.com/admin/ #192是本机的IP
注意:curl测试状态码为403则被限制访问了
11.27 访问控制FilesMatch
除了对整个网站的目录进行访问控制外,还可以对网站的指定某一个页面进行访问控制,例如只有指定的来源ip才能够访问后台管理的页面。
也是在/usr/local/apache2.4/conf/extra/httpd-vhosts.conf配置文件下进行设定:
<Directory /date/wwwroot/111.com>
<FilesMatch "admin.php(.*)"> //指定需要访问控制的页面
Order deny,allow //访问控制的顺序,先所有都拒绝,然后再允许指定的ip
Deny from all // 拒绝所有的来源ip
Allow from 127.0.0.1 //指定允许访问的来源ip(指定网段也可以192.168.0.0/24)
</FilesMatch>
</Directory>
查看设置是否成功
[root@localhost 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost 111.com]# /usr/local/apache2.4/bin/apachectl graceful
测试:
[root@localhost 111.com]# curl -x 192.168.168.133:80 'http.123.com/admin.php?' -I
常见问题:
已经被允许了,还是被限制了?
答:首先看了你的配置远程连接的IP 是111.231.137.133,这是你的虚拟机IP ,在看了你的配置允许放行的ip是你虚拟机的ip,并不是你物理机的ip, 所以你用物理机上的浏览器去访问你的虚拟机的网站肯定不会放行啊,你将物理机的IP 添加进配置 在访问试试
2、浏览器访问就访问不了
答:allow from后面跟的ip,到底是客户端的ip还是服务端的ip? 你浏览器访问,那你知道设置哪个ip为白名单ip才行吗?
3、curl -x192.168.133.150:80 111.com/admin/index.php 意思就是访问111.com/admin/index.php 这个地址, 被访问者IP(目标IP)是192.168.133.150在80端口。 但是为什么apache的log上会显示访问者的IP是192.168.130呢? 如果apache服务器上有一张网卡的IP是192.168.133.150 因为是自己访问自己,那访问者IP不一样也是192.168.133.150吗?为什么会变成 192.168.133.130?
答:两个ip是同一个网段, 访问150的时候,源ip就是130.
4、打了一个不存在的 地址还是200
答:只要index.php 存在 它就不会报404
相关链接:
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556