Edited at

【Rails】IPアドレスでアクセス制限


概要

RailsアプリでIPアドレスを元にアクセス制限をかける方法を紹介します。


方法


ステップ1(メソッドを定義)

制限をかけたいコントロール上のprivateメソッドとして以下の様なメソッドを定義します。

今回は例としてアプリ全体にアクセス制限をかける為にApplicationControllerにメソッドを定義していきます。


controllers/application_controller.rb

class ApplicationController < ActionController::Base

private
# 配列内にアクセスを許可するIPアドレスを羅列する。
def whitelisted?(ip)
return true if [123.43.65.1, 123.43.65.77].include?(ip)
false
end

# whiltelisted?で許可したIPアドレス以外のアクセスがあれば制限をかける(この場合はgoogle.comに飛ばしている。)
def block_foreign_hosts
return false if whitelisted?(request.remote_ip)
redirect_to "https://www.google.com" unless request.remote_ip.start_with?("123.456.789")
end
end



ステップ2(before_filter)

次にbefore_filterを使用して、実際に制限をかけます。


controllers/application_controller.rb

class ApplicationController < ActionController::Base

before_filter :block_foreign_hosts
#### メソッド部省略
end

メソッドの中身に関しては改善が見込めそうですが、上記の流れでRailsアプリでIPアドレスを元にアクセス制限をかけることが可能です。


参考

Restricting Access to Rails App based on IP-Address