我的 VPS 受到大量攻击,这些攻击针对的是我服务器上不存在的随机文件/目录,大约每秒两次。据推测,这只是一个机器人试图找出我服务器上的脚本是否存在安全漏洞,或者我的服务器是否可以用作代理。日志条目如下:
组合(访问)日志:
- - - [02/Mar/2011:14:10:18 +0000] "GET http://ad.xtendmedia.com/st?ad_type=iframe&ad_size=728x90§ion=1697270 HTTP/1.0" 403 204 "http://www.findthemovies.net/" "Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
错误日志:
[Wed Mar 02 14:10:18 2011] [error] [client 61.139.105.162] client denied by server configuration: /var/sites/***/public/st, referer: http://www.findthemovies.net/
这些请求来自随机 IP 地址的随机引用者,因此我似乎无法对 IP 进行特定的阻止。我没有安装任何可能被滥用的脚本,我的服务器上也没有启用代理,但主要问题是这些持续不断的请求正在耗尽资源并减慢对我网站的真正请求的速度。
有没有办法通过识别这些请求来阻止它们,从而阻止 Apache 处理它们并使用分配给它的所有资源?(我正在使用 Prefork,因此显然请求量会启动 Apache 进程并耗尽客户端和资源)。
答案1
答案2
或者您可以在虚拟主机中使用 RewriteRules,过滤适当的内容并返回禁止的内容,或者更有趣的是,最终重定向到迪斯尼乐园,这可能会惹恼机器人(如果它们接受重定向,它们会下载迪斯尼乐园并且会被占用一段时间):
RewriteEngine On
RewriteCond [apache constant] [yourrewritecond] [OR]
RewriteCond [apache constant] [yourrewritecond] [OR]
RewriteCond [apache constant] [yourrewritecond] [OR]
RewriteCond [apache constant] [yourrewritecond] [OR]
...
RewriteCond [apache constant] [yourrewritecond]
RewriteRule (.*) http://disneyland.com$1 [QSA,R=301,L]
答案3
您可以在 DMZ 接口的 80 端口上安装 HAProxy(并将后端指向在您的 LAN 或本地主机接口上运行的 Apache),并创建一些 ACL 规则,当连接匹配(或不匹配)某些路径/标头/域标准时,这些规则会阻止连接。
tarpit 的好处是它会减慢机器人的速度,并阻止(大多数)机器人连续呼叫。