2012-08-27 120 views
21

有沒有一種方法來實現IP過濾或IP訪問規則,就像我用nginx/apache限制或阻止Heroku上的某些IP一樣?如何阻止或過濾Heroku上的IP地址?

注:我知道這可以從我的應用程序(Rails 3.2)很容易地完成,但我不認爲這是我的資源在Heroku上最有效的使用。此外,基於Rack的解決方案將比在Rails中實施過濾更好。

回答

7

我添加了'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 

工程就像一個魅力。

+2

謝謝,這正是我一直在尋找的。我現在有點關心我的Google搜索技巧。 –

+2

有沒有一種方法可以在請求命中dyno前阻止centain地址? –

+0

如何阻止除我想允許的一個IP之外的所有IP地址?對我來說,似乎與機架塊我必須列出所有我想阻止的IP地址:( – morgler

13

您應該檢查出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 
+0

我可以阻止IP範圍嗎?即1.2.3。*? –

+1

@Stefanos .Ioannou阻止你剛纔需要的值,確保你傳遞給'Rack :: Attack.blacklist'的塊返回true。你可以這樣做: '(0..255).map {| val | '1.2.3。'+ val.to_s} .include?(req.ip)' – Phil

+2

@Phil我對一個人爲的例子很迂腐,但是......;)你可能會用'starts_with更好? ('1.2.3')'那裏 - 建立一個由256個字符串組成的數組,然後檢查這些ip是否在這些數字之間在計算上,但可能不是你想要做的每一個請求,如果沒有必要的。 –