如果IP不在列表中,则不同的Rails路由?

时间:2012-03-29 22:33:15

标签: ruby ruby-on-rails-3 routes ip firewall

我有一个Rails 3.2.2应用程序,它是一个简单的公司内部网,但是虽然没有任何私人信息,但它可能是最好的,如果它是相当安全的外部世界。

然而,我们确实有人在家里工作,并且没有VPN设置。

目前我有一个防火墙规则阻止除了我们的团队/分支机构静态IP地址列表之外的所有人。这样做的问题是,当团队成员从家中访问该站点时,该站点永远不会加载,因为防火墙拒绝它们。我想做的是在应用程序中提供一个简单的页面,解释为什么他们没有“完全”访问权限。

防火墙正在为多个应用程序提供服务,因此我无法将访问被拒绝的页面放在那里

我已经阅读了一些关于SO的问题,例如Get real IP address in local Rails development environment,它们展示了如何获取他们的IP地址,但我不确定如何根据它改变默认路由。

2 个答案:

答案 0 :(得分:2)

Dae在评论中提出了一个很好的观点,但你知道:

http://guides.rubyonrails.org/routing.html#advanced-constraints

class BlacklistConstraint
   def initialize
     @ips = Blacklist.retrieve_ips
   end

   def matches?(request)
    @ips.include?(request.remote_ip)
   end
end

YourApp::Application.routes.draw do
  match "*path" => "blacklist#index", :constraints => BlacklistConstraint.new
end

答案 1 :(得分:0)

要扩展Robin的白名单方法,这是我使用多个部分白名单ip的解决方案

class WhitelistConstraint
   def initialize
     @ips =  ["127.0", "10.0.0.0/1"]

   end

   def matches?(request)
    !@ips.select{|req| request.remote_ip.include?(req) }.empty?
   end
end