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

Ale*_*x B 4 security reverse-proxy apache2 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>
    
    Run Code Online (Sandbox Code Playgroud)
  • /etc/init.d/apache2/mods-available/proxy.conf中:

    ProxyRequests Off
    <Proxy *>
    
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>
    
    Run Code Online (Sandbox Code Playgroud)

Ale*_*x B 5

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

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

<VirtualHost *:80>
    ServerName stop.spam
    DocumentRoot /var/www/stopspam
    ErrorLog /dev/null
    <Directory /var/www/stopspam>
        Deny from all
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助别人:)