rack-attack middleware を使って IPアドレスでアクセスを制限したり、同一IPアドレスからの大量のリクエストを防ぐ術
こんにちは。味噌汁を飲んでいます、きたけーです。
世の中は脅威で満ちている。
特定のパスへのアクセスをIPアドレスで制限したり、同一IPアドレスからの大量のリクエストを防ぐには、kickstarter/rack-attack · GitHub というrack middlewareが便利です。
以下、使用例。
特定のパスへのアクセスをIPアドレスで制限する
例えば、管理者用ページへのアクセスをオフィスからに限定するには、こんなかんじ
Rack::Attack.blacklist('only allow from office') do |req| req.path.match(%r{^/admin}) && (req.ip != OFFICE_IP_ADDRESS) end
同一IPアドレスからの大量のリクエストを防ぐ
例えば、「通報」を1分間に1回までに制限するには、こんなかんじ
Rack::Attack.throttle('reports limit', limit: 1, period: 60.seconds) do |req| req.ip if req.post? && req.path.match(%r{^/reports}) end