如何理解和减少Rails应用程序中的IP欺骗攻击错误?

时间:2014-01-22 19:18:45

标签: ruby-on-rails security ip spoofing

我的错误报告服务收到大量关于IP欺骗攻击的电子邮件,频率越来越高。如果我理解正确,当请求设置HTTP标头指定请求来自的IP地址不是原始IP地址时,会发生这种情况。

错误消息如下所示:

IP spoofing attack?!HTTP_CLIENT_IP="10.212.0.172"HTTP_X_FORWARDED_FOR="10.212.0.172, 68.180.224.232"

如果我正确读取此错误,则此错误消息中的两个IP地址是本地IP地址(10.x.x.x)和Yahoo! IP地址(68.180.224.232)。

我不确定我是否正确阅读,但似乎这可能是由Yahoo抓取工具引起的。错误会报告许多不同的URL,使其看起来像一个爬虫。此外,它似乎是一个合法的请求,因为它是通过外部IP路由的内部IP。

我的问题是:

  • 如何确定这些是合法请求还是恶意请求。
  • 如果是恶意的,允许这些GET请求有什么害处?
  • 无论哪种方式,我如何防止这些错误发生(除了关闭电子邮件通知)?我是否需要找到阻止IP地址的方法?如果这是合法的请求怎么办?我是否需要设置某种白名单?

更新:我查看了请求参数,用户代理确实是Yahoo抓取工具:

Mozilla / 5.0(兼容; Yahoo!Slurp; http://help.yahoo.com/help/us/ysearch/slurp

2 个答案:

答案 0 :(得分:1)

您如何确定这些请求是合法请求还是恶意请求?

IP欺骗本身并不危险,但是它通常用于DDoS(分布式拒绝服务)攻击中,以将IP地址屏蔽为不同的IP地址,从而使其看起来是分布式的。您可以使用此宝石here来确定其中一个IP地址是漫游器/爬网程序/蜘蛛。

如果是恶意的,允许这些GET请求有什么危害?

通过允许来自欺骗IP的GET请求,您很容易受到DDoS攻击,并且服务器上的负载将增加,如果启用了自动缩放功能,则您将不得不花费更多。

无论哪种方式,如何防止发生这些错误(除了关闭电子邮件通知)?我需要找到一种方法来阻止IP地址吗?如果是合法要求怎么办?我需要设置某种白名单吗?

请参阅此答案here,其中详细说明了解决此问题的最佳方法。我有另一种方法,我将在下面解释。

我没有测试下面的代码,但是总之,它检查两个标头是否都存在,如果存在,则检查它们是否不相等。如果两个条件都成立,则可以引发异常或重定向到状态码为400的错误页面,具体取决于您。

    def ip_spoofing_check
        if request.env['HTTP_CLIENT_IP'] && request.env['HTTP_X_FORWARDED_FOR']
            if request.env['HTTP_CLIENT_IP'] != request.env['HTTP_X_FORWARDED_FOR']
            response.status = 400
            response = {:status => false, :message => "IP Spoofing Attempt"}
            respond_to do |format| format.json { render json: response} end
            end
        end
    end

别忘了在应用程序控制器的before_action中调用此函数。

祝你好运!

答案 1 :(得分:0)

也许不是一个完整的答案,但我一直在使用这个gem进行异常通知,它支持过滤掉爬虫引发的异常

http://smartinez87.github.io/exception_notification/#ignore-exceptions/ignore_crawlers