はじめに
今回はrack-attackというgemを使って特定のURLをにIPアドレス認証をかけます。IPアドレス認証をするだけだったらいろいろな記事がありましたがなぜか特定のURLにだけかけたいという記事があまりなかったので忘れないよう記事にします。
rack-attackをインストール
gem 'rack-attack'
次にbundleコマンドを実行します。
$ bundle install
もしくは
$ bundle install --path=vendor/bundle
準備
config/application.rbに以下の一文を追加してください。
config.middleware.use Rack::Attack
次にconfig/initializersの中にrack_attack.rbという名前でファイルを制作してください。
class Rack::Attack
# your custom configuration...
end
IPアドレス認証
いよいよIPアドレス認証です。
class Rack::Attack
OFFICE_IP_ADDRESS = 'xxx.xxx.xxx.xxx' #IPアドレス
blocklist('only allow from office') do |req|
req.path.match(%r{^/admin}) && (OFFICE_IP_ADDRESS != req.ip) #/adminのところは任意のページのURLに変えてください。
end
end
これで特定のページ(例の場合は/admin)IPアドレス認証をかけることができました。
おまけ Dos攻撃対策・ブラックリスト設定
rack-attackというgemはIPアドレス認証だけでなくDos攻撃やブラックリスト設定までできます。
Dos攻撃対策の場合
class Rack::Attack
# 同一IPアドレスからのリクエストを5回/秒に制限
Rack::Attack.throttle('req/ip', limit: 5, period: 1.second) do |req|
req.ip
end
# 同一IPアドレスからのリクエストを100回/分に制限
Rack::Attack.throttle('req/ip', :limit => 100, :period => 1.minutes) do |req|
req.ip
end
end
ブラックリスト設定の場合
class Rack::Attack
# 1.2.3.4からのアクセスを拒否する
Rack::Attack.blocklist('block xxx.xxx.xxx.xxx') do |req|
'xxx.xxx.xxx.xxx' == req.ip
end
# BadUAが含まれたUserAgentからのログイン画面アクセスを拒否する
Rack::Attack.blocklist('block bad UA logins') do |req|
req.path == '/login' && req.post? && req.user_agent == 'BadUA'
end
end
もちろんブラックリスト設定とDos攻撃対策とIPアドレス認証をすべて同時にあることが可能です。
ここまで見てくれてありがとうございました。
参考にしたサイトのURLを貼っておくのでぜひそちらも御覧ください。
Rails開発でDos攻撃を防ぐためにrack-attackを導入しよう
あと、ぼくが最近公開したwebアプリ資格試験の質問サイト QUAもお願いします。利用者がほぼいません。