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

8

我从我的错误报告服务中收到了许多关于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(compatible;Yahoo!Slurp;http://help.yahoo.com/help/us/ysearch/slurp

2个回答

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 中调用此函数。

祝你好运!


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接