【问题标题】:How can you block or filter IP addresses on Heroku?如何在 Heroku 上阻止或过滤 IP 地址?
【发布时间】:2012-08-21 14:28:54
【问题描述】:

有没有办法实现 IP 过滤或 IP 访问规则,就像我使用 nginx/apache 来限制或阻止 Heroku 上的某些 IP?

注意:我知道这可以很容易地在我的应用程序(Rails 3.2)中完成,但我认为这不是在 Heroku 上最有效地使用我的资源。此外,基于 Rack 的解决方案比在 Rails 中实现过滤要好。

【问题讨论】:

    标签: ruby-on-rails security heroku ip rack


    【解决方案1】:

    您应该查看rack-attack。看起来它和 rack-block 一样,但使用更广泛,更新也更频繁。要阻止特定 IP,您可以这样做:

    # Block requests from 1.2.3.4
    Rack::Attack.blacklist('block 1.2.3.4') do |req|
      # Requests are blocked if the return value is truthy
      '1.2.3.4' == req.ip
    end
    

    【讨论】:

    • 我可以阻止一个 IP 范围吗?即 1.2.3.*?
    • @Stefanos.Ioannou 来阻止您只需要确保传递给Rack::Attack.blacklist 的块返回true 的值。你可以这样做:(0..255).map{ |val| '1.2.3.' + val.to_s }.include?(req.ip)
    • @Phil 我对一个人为的例子有点迂腐,但是...... ;) 你可能会在starts_with?('1.2.3') 那里更好 - 构建一个由 256 个字符串组成的数组,然后检查是否ip 是其中之一,计算量可能不是很大,但如果没有必要,您可能不想对每个请求都执行此操作。
    【解决方案2】:

    我添加了'rack-block' 作为 Rack 中间件。在 config/initializers 中,添加一个新文件:

    YourApp::Application.configure do
    
      config.middleware.insert_before(Rack::Lock, Rack::Block) do  
        # Add your rules with the rack-block syntax in here
      end
    
    end
    

    像魅力一样工作。

    【讨论】:

    • 谢谢,这正是我想要的。我现在有点担心我的谷歌搜索技能。
    • 有没有办法在请求到达测功机之前阻止中心地址?
    • 我怎样才能阻止除一个我想允许的 IP 之外的所有 IP 地址?对我来说,机架块似乎必须列出我想要阻止的所有 IP 地址:(
    • @morgler:在下面查看我的答案。 rack-attack 有一个白名单功能 - github.com/kickstarter/rack-attack
    • 如果您想在请求到达测功机之前阻止它们,您需要使用 Web 应用程序防火墙 - Heroku 插件市场中有一个 - elements.heroku.com/addons/expeditedwaf
    猜你喜欢
    • 2011-02-23
    • 2010-11-04
    • 2012-08-24
    • 1970-01-01
    • 2014-08-05
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多