2012-08-27 21 views
21

ヘロクの特定のIPを制限またはブロックするために、nginx/apacheと同じようにIPフィルタリングまたはIPアクセスルールを実装する方法はありますか?ヘロクのIPアドレスをブロックまたはフィルタリングする方法は?

注:これは私のアプリケーション(Rails 3.2)から非常に簡単に行うことができますが、私はこれがHerokuのリソースを最も効率的に使用しているとは思いません。また、Railsベースのソリューションは、Railsでフィルタリングを実装するよりも優れています。

答えて

7

ラックミドルウェアとして'rack-block'を追加しました。 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

ありがとう、これは私が探していたものです。私はちょっと私のグーグルのスキルに関心があります。 –

+2

要求がdynoにヒットする前に、センタリングアドレスをブロックする方法はありますか? –

+0

許可したい1つのIP以外のすべてのIPアドレスをブロックするにはどうしたらいいですか?私にはラックブロックと思われます。私はブロックしたいすべてのIPアドレスをリストアップしなければなりません:( – morgler

13

rack-attackをご確認ください。ラックブロックと同じように見えますが、頻繁に使用され、頻繁に更新されています。特定の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あなたが 'Rack :: Attack.blacklist'に渡すブロックが真を返すようにするために必要な値をブロックするにはIoannouを使用します: '(0..255).map {| val | '03.3。 '+ val.to_s} .include?(req.ip) ' – Phil

+2

@Phil私は、人為的な例について賢明ではありますが...;)あなたはおそらく' starts_with? ( '1.2.3') ' - 256文字列の配列を作成し、その中にipが大量でないかもしれないかどうかを確認する計算上ですが、必要でない場合はすべての要求に対して何かしたいことはないかもしれません。 –

関連する問題