LoginSignup
2
3

More than 3 years have passed since last update.

railsのrack-attackで特定のURLにIPアドレス認証をするには

Last updated at Posted at 2020-04-17

はじめに

今回はrack-attackというgemを使って特定のURLをにIPアドレス認証をかけます。IPアドレス認証をするだけだったらいろいろな記事がありましたがなぜか特定のURLにだけかけたいという記事があまりなかったので忘れないよう記事にします。

rack-attackをインストール

gemfile
gem 'rack-attack'

次にbundleコマンドを実行します。

$ bundle install
もしくは
$ bundle install --path=vendor/bundle

準備

config/application.rbに以下の一文を追加してください。

config/application.rb
config.middleware.use Rack::Attack

次にconfig/initializersの中にrack_attack.rbという名前でファイルを制作してください。

config/initializers/rack_attack.rb
class Rack::Attack
  # your custom configuration...
end

IPアドレス認証

いよいよIPアドレス認証です。

config/initializers/rack_attack.rb
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攻撃対策の場合

config/initializers/rack_attack.rb
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

ブラックリスト設定の場合

config/initializers/rack_attack.rb
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もお願いします。利用者がほぼいません。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3