如何在Heroku上阻止或过滤IP地址?

Mat*_*ith 23 security ip rack ruby-on-rails heroku

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

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

Phi*_*hil 16

你应该看看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
Run Code Online (Sandbox Code Playgroud)

  • @Phil我对一个人为的例子很迂腐,但是......;)你可能会更好用`starts_with?('1.2.3')`那里 - 构建一个256字符串的数组,然后检查是否ip在那些可能不是大规模的计算中,但如果没有必要,可能不是你想要在每个请求上做的事情. (2认同)

Nat*_*pec 8

我添加了'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
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

  • 有没有办法在请求到达dyno之前阻止centain地址? (4认同)
  • 谢谢,这正是我想要的.我现在关心我的谷歌搜索技巧. (2认同)
  • @morgler:在下面查看我的答案。`rack-attack` 具有白名单功能 - https://github.com/kickstarter/rack-attack (2认同)
  • 如果您想在请求到达 dyno 之前阻止它们,您需要使用 Web 应用程序防火墙 - Heroku 插件市场中有一个 - https://elements.heroku.com/addons/expeditedwaf (2认同)