Apache 防盗链

临时要求在apache中加防盗链。网上搜集了一些资料整理一下发在这里,方便以后翻阅。
关于mod_authz_host模块参看:http://doc.linuxpk.com/doc/apache/mod/mod_authz_host.html
1。通过User-Agent浏览器类型限制

SetEnvIf User-Agent ^blueapple go_out
<directory /home/domain>
Order Allow,Deny
Allow  from all
Deny from env=go_out
</directory>

2。通过Referer限制

SetEnvIf Referfer ^$ go_out
SetEnvIf Referfer ^http:\/\/baidu.com(\/|$)”  go_out
<directory /home/domain>
Order Allow,Deny
Allow  from all
Deny from env=go_out
</directory>

referer为空禁止访问。
referer为http://baidu.com限制访问。

防盗链原理:
http标准协议中有专门的字段记录referer
一来可以追溯上一个入站地址是什么

二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。
因此所有防盗链方法都是基于这个Referer字段
主要有两种方法实现
第一种:使用FilesMatch

    ServerAdmin laogui@gmail.com
    DocumentRoot D:/www/www.chinahtml.com
    ServerName www.aaa.com
    ServerName aaa.com
    盗用连接指定显示的页面。也可以不用此项,这样盗用连接也可无法使用。
    ErrorDocument 404 http://www.chinahtml.com/error.html
    允许www.aaa.com的网站使用
    SetEnvIfNoCase Referer "^http://www.aaa.com" local_ref=1
    允许 aaa.com  的网站使用
    SetEnvIfNoCase Referer "^http://aaa.com" local_ref=1
    定义防盗文件的扩展名      
        Order Allow,Deny
        Allow from env=local_ref  允许上面指定域

防盗链设置样本:使用正则表达式

SetEnvIf Referer "^http://(.)+\.ilinux\.cn/" local_ref=1
    SetEnvIf Referer "^http://(.)+\.isql\.cn/" local_ref=1
    #SetEnvIf Referer "^http://(.)+\.other\.org\.cn/" local_ref=1
    SetEnvIf Request_URI "/logo(.)+" local_ref=0
        Order Allow,Deny
    Allow from env=local_ref

解释:
1. 蓝色部分,表示设置允许访问的referer地址,第一行的意思为所有http协议访问,以.ilinux.cn结尾的域名地址,第二行类似,只是换成 了.isql.cn,表问我前面的鬼符是什么,不懂得可以去翻正则表达式的研究文献,不想深究的可以照猫画虎设置自己的网站。
2. 绿色部分,表示不在上述引用域名范围内,但可以被放行的特例,本例中表示网站/目录,所有以logo开头的文件(用作允许其它网站的友情连接引用本站logo)。
3. 橙色部分是设置反盗链的关键部分,上面每一个设置都联系到了local_ref这个环境变量,只有这个变量为1,则允许被引用,否则显示一个X。
4. 紫色部分设置了哪些扩展名的文件加入反盗链的规则。
第二种方法:
使用rewirte方式:

RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn/.*$    [NC]
    RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn$      [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn/.*$      [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn$      [NC]
    RewriteCond %{HTTP_REFERER} !^http://ilinux.cn/.*$      [NC]
    RewriteCond %{HTTP_REFERER} !^http://ilinux.cn$      [NC]
    RewriteRule .*\.(gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip)$ http://www.ilinux.cn [R,NC]

上面的,需要Rewrite模板.所有指定的文件,如果Referer不是上面的值,将被重定向到首页.
还有使用.htaccess 文件的方法,不过不推荐使用,影响apache性能。
写一个.htaccess
包括以下代码:

SetEnvIfNoCase Referer "^http://google\.com/" local_ref=1
Order Allow,DenyAllow from env=local_ref
Allow from 127.0.0.1Allow from 123.123.123.12

如果你的网址是www.myst.cn就改为
SetEnvIfNoCase Referer “^http://www\.myst\.com/” local_ref=1

这意思是说防止人家连结你的jpg档案.可以增修为

ps.最后一个不使用区各线
Allow from 127.0.0.1
这表示允许连结主机的IP。
你要是默认其他网站可以连结的话,就填入该主机IP,把上述的code储存为.htaccess然后放入你安装的目录下即可。
@@@@@@@@@@@@@@@@@

防盗链原理:
http标准协议中有专门的字段记录referer
一来可以追溯上一个入站地址是什么;
二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。
因此所有防盗链方法都是基于这个Referer字段,主要有两种方法实现:

第一种:使用FilesMatch
ServerAdmin
laogui@gmail.com
DocumentRoot
D:/www/www.chinahtml.com
ServerName
www.aaa.com
ServerName aaa.com


盗用连接指定显示的页面。也可以不用此项,这样盗用连接也可无法使用。
ErrorDocument 404

http://www.chinahtml.com/error.html


允许www.aaa.com的网站使用
SetEnvIfNoCase Referer “^http://www.aaa.com” local_ref=1


允许 aaa.com   的网站使用
SetEnvIfNoCase Referer “^http://aaa.com” local_ref=1


定义防盗文件的扩展名
Order Allow,Deny
Allow from env=local_ref   允许上面指定域名

 

 

 

防盗链设置样本:使用正则表达式
SetEnvIf Referer “^http://(.)+\.ilinux\.cn/” local_ref=1
SetEnvIf Referer “^http://(.)+\.isql\.cn/” local_ref=1
#SetEnvIf Referer “^http://(.)+\.other\.org\.cn/” local_ref=1
SetEnvIf Request_URI “/logo(.)+” local_ref=0
Order Allow,Deny
Allow from env=local_ref

解释:
1. 蓝色部分,表示设置允许访问的referer地址,第一行的意思为所有http协议访问,以.ilinux.cn结尾的域名地址,第二行类似,只是换成 了.isql.cn,表问我前面的鬼符是什么,不懂得可以去翻正则表达式的研究文献,不想深究的可以照猫画虎设置自己的网站。
2. 绿色部分,表示不在上述引用域名范围内,但可以被放行的特例,本例中表示网站/目录,所有以logo开头的文件(用作允许其它网站的友情连接引用本站logo)。
3. 橙色部分是设置反盗链的关键部分,上面每一个设置都联系到了local_ref这个环境变量,只有这个变量为1,则允许被引用,否则显示一个X。
4. 紫色部分设置了哪些扩展名的文件加入反盗链的规则。

第二种方法:
使用rewirte方式:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn/.*$     [NC]
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn$       [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn/.*$       [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn$       [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn/.*$       [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn$       [NC]
RewriteRule .*\.(gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip)$
http://www.ilinux.cn [R,NC]
上面的,需要Rewrite模板。所有指定的文件,如果Referer不是上面的值,将被重定向到首页。

还有使用.htaccess 文件的方法,不过不推荐使用,影响apache性能。
写一个.htaccess
包含以下代码:
SetEnvIfNoCase Referer “^http://google\.com/” local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
Allow from 123.123.123.123

如果你的网址是www.myst.cn就改为
SetEnvIfNoCase Referer “^http://www\.myst\.com/” local_ref=1
这意思是说防止人家连结你的jpg档案。可以增修为
<FilesMatch “\.(jpg|zip|rar)”>
ps:最后一个不使用区各线
Allow from 127.0.0.1 这表示允许连结主机的IP。
你要是默认其他网站可以连结的话,就填入该主机IP,把上述的code储存为.htaccess然后放入你安装的目录下即可。

注:*nix系统在apache配置文件里面打开使用.htaccess功能。

下面一一介绍怎么在Apache里面实现防盗链、限制客户端下载线程数,限制下载带宽这些功能。
防盗链
传统的防盗链都是通过Referer来判断用户来路的,不过这样的方法对于下载工具来说形同虚设,因为现在的下载工具早就能伪造Referer了。
现在一些流行的防盗链的方式都是用在浏览页面的时候产生一个随机验证码,在用户点击连接的时候服务器会验证这个验证码是否有效从而决定是否允许下载。或者就是用某些方法把文件实际地址进行伪装。不过这些都不怎么好用,下面介绍一个简单有效的方式来实现防盗链。
其实就是用Cookie,配合Apache的URL Rewrite模块很简单的就能实现防盗链下载。
首先在浏览页面的时候,会向客户端发送一个特别的Cookie,例如“Site=jzxue.Com“,盗链而来的将没有这个Cookie。
在Apache的httpd.conf文件里面搜索:
#LoadModule rewrite_module modules/mod_rewrite.so
把它前面的#去掉,
再找到块,在里面加入类似如下代码:
# Other configurati**** …
RewriteEngine On # 启动URL Rewrite引擎
RewriteCond %{HTTP_COOKIE} !^.*(?:Site=jzxue.Com).*$ # 对于Cookie里面没有特殊记录的请求进行重定向
RewriteRule ^.*$ error.html # 将非法访问重定向到错误页面
这样如果一个盗链而来的请求将会因为没有特殊Cookie而被重定向到错误页面,就算实际地址暴露也不怕。至于这个Cookie的内容是什么以及有效时间完全可以由管理员自己来设定,也就是说下载工具也没法伪造,从而防止了服务器资源被盗链的危险。

限制客户端多线程下载
限制多线程现在需要用到一个Apache的扩展模块mod_limitipconn,这里是作者的官方网站
http://dominia.org/djao/limitipconn2.html,先下载适合自己版本的模块文件到Apache安装目录下的modules目录下面,然后在httpd.conf文件中搜索:
#LoadModule status_module modules/mod_status.so
把它前面的#去掉,再加入:
ExtendedStatus OnLoadModule limitipconn_module modules/mod_limitipconn.dll # 如果你下载的不是Win版,请把后面的文件名改为你所下载的文件名。
# 这里表示限制根目录,即全部限制,可以根据需要修改
MaxConnPerIP 2 # 这里表示最多同时两个线程
NoLimit html/* # 这里表示html目录下不受限制
这样来自同一客户端的超过2个的线程请求将被拒绝,从而限制了客户端的多线程下载。

限制下载带宽
这个同样需要扩展模块支持,模块是mod_bw,在作者的官方网站
http://ivn.cl/apache/可以下载到。同样也是放入modules目录下面,然后在httpd.conf文件中加入:
LoadModule bw_module modules/mod_bw.dll
再找到块,加入:
# Other configurati**** …
BandwidthModule On # 启动带宽限制
ForceBandwidthModule On # 启动带宽限制
MaxConnection all 2000 # 最大连接数2000
Bandwidth all 200000 # 单个客户端最大带宽200KB
这样限制了同时最多2000个连接数,每个客户端最大200KB的下载带宽。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值