Mod_Rewrite 的妙用:屏蔽不友好的访问

Rewrite 是网页服务器程序的一个链接地址重写模块(Mod_Rewrite),可以按照正则表达式(Regular Expression)规则匹配内容,对符合条件的 URL 进行实时的改写。我这几天用它干了点儿“坏”事儿:屏蔽了一些我认为不友好的访问。

前些天,单位里我所在部门的服务器重新上线。翻看访问日志检查问题的时候发现了之前网络中心提醒服务器可能有问题的痕迹(实际上被黑了,用来执行网络攻击)。虽然这个服务器已经有大半年没有上线,IP 也一直闲置着。可是刚一上线,就持续有很多调用以前攻击脚本的访问,请求地址为 /webdav/greenshell.php/webdav/leaf.php 的两个文件。

尽管现在服务器已经没问题了,可是对这两个文件的大量访问会触发很多次 404 页面的调用,也比较烦人。于是就用了个邪招儿,使用 Mod_Rewrite 来重写这两个地址,对相应访问发送 403 Forbidden 这样的拒绝服务应答。因为我很确信,这个服务器上目前没有,以后也绝不会用上这两个 URL(其实还可以直接对 /webdav/ 目录写规则的,这个目录估计也不会再用上了)。

重写规则如下:

# Block bad guys
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^webdav/(greenshell|leaf)\.php$ - [F,L]
</IfModule>

不了解 Rewrite 重写规则的可以参考这里的基本规则介绍。这里后面 [ ] 中的 F 表示 Forbidden(via),即发送 403 状态码(Status Code, RFC 2616)。L 表示针对此次访问,这是最后一条需要考虑的规则了。

这个规则既可以放到 Apache 的配置文件中(比如 vhost.conf ),也可以通过 .htaccess 文件来部署。据说是因为历史的原因,.htaccess 与 Apache 服务器配置文件的格式是一样的。(via1 via2

使用该方法,还可以根据 %{HTTP_USER_AGENT} 来屏蔽不友好的机器人,也可以用来屏蔽某些网站对本网站资源的恶意调用(比如图片等文件的盗用)等。

我还用这个方法来屏蔽淘宝网店对水景一页上的图片的调用。本来我对图片的 Hotlink 是不怎么在意的。虽然一些人直接复制文章,连图片资源都还用我的网站的,可是他们毕竟还给个链接,而且这样的文章通常访问量也很小。可是淘宝店铺就不同了:

  1. 流量很大,最近一个月有 5000 次左右的图片调用(2 张图),粗略估计流量为 200MB;
  2. 没有内容引用说明,无链接(图片都是通过 img 标签调用的);
  3. 淘宝商城是可以让商户自己上传图片的。

于是我在 vhost.conf 中加上了这么一组规则:

RewriteCond %{HTTP_REFERER} ^http://item.taobao.com/ [NC]
RewriteRule \.(png|gif|jpg|jpeg|bmp|PNG)$ - [F,L]

目前这个方法工作得很好。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/use-mod_rewrite-to-ban-bad-request/>。转载请保留此信息及相应链接。

1 条关于 “Mod_Rewrite 的妙用:屏蔽不友好的访问” 的评论

  1. 引用通告: 屏蔽一些不友好的蜘蛛 | 水景一页

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)