为Apache配置mod_proxy以拒绝错误的域请求

时间:2012-09-13 13:17:49

标签: security apache2 reverse-proxy mod-proxy

最近,我注意到我的网站运行速度越来越慢。我在我的服务器上发现了8GB Apache日志(我在Debian 6服务器上运行Play!Framework Web应用程序)并且带宽完全超载。对于每天只有少量观点的小型个人网站而言,这完全是疯了。

在调查并收集了一些信息之后,我发现了我的错误:在我的Apache配置中,我没有注释“ProxyRequests On”这一行,所以我的服务器被自由地用作世界上每个人的免费代理。多么可惜。

至少在那个时候,我调整了我的防火墙以限制并发连接,并为Apache2安装了mod_qos。

但是,现在不是将请求重定向到目的地,而是像一个好的免费代理一样,所有传入的请求都被重定向到我的Web应用程序,无论域名是什么。例如,如果有人使用我的服务器认为它仍然是在雅虎搜索“年轻的裸体孩子”的工作代理,他将落在我的网站上。我想现在你明白了我的观点。

然后,如果向我的服务器发送“http://yahoo.com/whatever”请求,我该怎么做才会拒绝该请求?

这是我目前的配置:

    /etc/init.d/apache2/sites-available/mysite.fr 中的
  • ProxyRequests Off
    NameVirtualHost *:80
    
    <VirtualHost *:80>
    
         ServerName mysite.fr
         ServerAlias *.mysite.fr
    
         ProxyPreserveHost On
         ProxyPass / http://127.0.0.1:9000/ retry=0
         ProxyPassReverse /  http://127.0.0.1:9000
    
         # Uncomment the line below if your site uses SSL.
         #SSLProxyEngine On
    </VirtualHost>
    
  • /etc/init.d/apache2/mods-available/proxy.conf 中的
  • ProxyRequests Off
    <Proxy *>
    
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>
    

1 个答案:

答案 0 :(得分:2)

几个月前我找到了一个解决方案,并且意识到我忘了分享我发现的内容:

我在Apache2配置中添加了“垃圾桶”虚拟主机(在httpd.conf中首先声明):

<VirtualHost *:80>
    ServerName stop.spam
    DocumentRoot /var/www/stopspam
    ErrorLog /dev/null
    <Directory /var/www/stopspam>
        Deny from all
    </Directory>
</VirtualHost>

并将其添加到我的防火墙配置中:

iptables -I INPUT -d XXX.XXX.XXX.XXX -p tcp --dport 80 -m string --to 700 \
--algo bm --string 'Host: XXX.XXX.XXX.XXX' -j DROP

这使得防火墙在端口80上丢弃请求,这些请求是使用我的服务器IP而不是域名发送的。

希望这可以帮助别人:)