我有一个Rails 3.2.2应用程序,它是一个简单的公司内部网,但是虽然没有任何私人信息,但它可能是最好的,如果它是相当安全的外部世界。
然而,我们确实有人在家里工作,并且没有VPN设置。
目前我有一个防火墙规则阻止除了我们的团队/分支机构静态IP地址列表之外的所有人。这样做的问题是,当团队成员从家中访问该站点时,该站点永远不会加载,因为防火墙拒绝它们。我想做的是在应用程序中提供一个简单的页面,解释为什么他们没有“完全”访问权限。
防火墙正在为多个应用程序提供服务,因此我无法将访问被拒绝的页面放在那里
我已经阅读了一些关于SO的问题,例如Get real IP address in local Rails development environment,它们展示了如何获取他们的IP地址,但我不确定如何根据它改变默认路由。
答案 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