2012-08-27 9 views
21

Gibt es eine Möglichkeit IP-Filter- oder IP-Zugriffsregeln zu implementieren, ähnlich wie mit nginx/apache, um bestimmte IPs auf Heroku zu beschränken oder zu blockieren?Wie können Sie IP-Adressen auf Heroku blockieren oder filtern?

Hinweis: Ich weiß, dass dies aus meiner Anwendung (Rails 3.2) sehr leicht gemacht werden kann, aber ich denke nicht, dass dies die effizienteste Nutzung meiner Ressourcen auf Heroku ist. Außerdem wäre eine Rack-basierte Lösung besser als die Implementierung der Filterung in Rails.

Antwort

7

Ich habe 'rack-block' als Rack-Middleware hinzugefügt. Fügen Sie in config/initializers eine neue Datei hinzu:

Funktioniert wie ein Charme.

+2

Danke, das ist genau das, was ich gesucht habe. Ich bin jetzt ein bisschen besorgt über meine Fähigkeiten zum googeln. –

+2

Gibt es eine Möglichkeit, Centain-Adressen zu blockieren, bevor die Anfrage den Dyno trifft? –

+0

Wie kann ich alle IP-Adressen blockieren, außer einer IP, die ich zulassen möchte? Für mich scheint es bei Rack-Block muss ich alle IP-Adressen auflisten, die ich blockieren möchte :( – morgler

13

Sie sollten rack-attack auschecken. Sieht aus, als ob es dasselbe wie Rack-Block ist, aber viel häufiger verwendet und aktualisiert wird. Um eine bestimmte IP zu blockieren, können Sie dies tun:

# 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

Kann ich einen IP-Bereich blockieren? dh 1.2.3. *? –

+1

@Stefanos .Ioannou, um den Wert zu blockieren, den Sie nur brauchen, um sicherzustellen, dass der Block, den Sie an 'Rack :: Attack.blacklist' übergeben," true "zurückgibt. Sie könnten etwas wie folgt tun: ' (0..255) .map {| val | '1.2.3.' + Val.to_s} .include? (Req.ip) ' – Phil

+2

@Phil Ich bin pedantisch wegen eines erfundenen Beispiels, aber ...;) Du wärst wahrscheinlich besser dran mit' starts_with? ('1.2.3') 'da - ein Array von 256 Strings bauen, dann prüfen, ob die IP unter diesen möglicherweise nicht massiv ist rechnerisch, aber möglicherweise nicht etwas, was Sie bei jeder Anfrage tun möchten, wenn es nicht notwendig ist. –