如何保护公共和私人rails应用程序的管理区域

时间:2009-05-23 03:09:25

标签: apache ssl ssh admin security

您如何保护对Web应用程序的管理区域的访问权限?

我们的Rails CMS公开提供页面。我想使用webserver(apache)或防火墙(netfilter)使后端(/ admin)无法访问。

这可以使用SSL证书吗?我想限制只有那些拥有“密钥”的后端的访问权限,类似于对服务器的SSH访问。

提前致谢。

2 个答案:

答案 0 :(得分:2)

你是一个绝对正确的SSL认证方式。而且设置起来并不是那么棘手,尽管很少这样做。

重要的是要记住这个问题有两个组成部分。第一个是,“我怎么才能让这个糟糕的东西工作”,而且,这是一个安全系统,第二个是,“我如何设置它以便我不会意外地做一些让我烦恼的东西安全?“

我建议的第一件事是为管理员编写一个单独的Rails应用程序,并在另一个端口上使用不同的Web服务器运行它。 (如果您确实希望避免在管理站点的URL中输入端口号,请在使用Host:标头的两个Web服务器前面使用代理将foo.com的请求重定向到一个服务器和admin.foo.com到另一个。)这种分离将有助于确保您不会意外地让普通用户访问管理功能,并使SSL设置更容易。

对于管理服务器,仅将其设置为SSL访问。创建新的签名证书,并仅允许签名证书签名的证书进行连接。 (这是依赖于Web服务器的;如果您确实需要有关如何执行此操作的详细信息,您可能希望发布一个新问题,提供您正在使用的服务器和配置的详细信息。)您可以设置一个页面(在非SSL站点,或者可访问SSL站点上未经过身份验证的用户访问的页面),您的管理员的Web浏览器将自动生成并上载您可以签名的证书,以便他们访问。

保留您签署的所有证书的副本,以便在您需要撤销访问权限时,可以将该证书放入撤销列表中。

答案 1 :(得分:1)

不要使用防火墙,你只会使你的实现复杂化。 “正确”的方法是在Apache Directory配置中使用.htaccess或设置授权。

听起来你想要SSLRequire

SSLVerifyClient      none
<Directory /usr/local/apache/htdocs/secure/area>
SSLVerifyClient      require
SSLVerifyDepth       5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLOptions           +FakeBasicAuth
SSLRequireSSL
AuthName             "Snake Oil Authentication"
AuthType             Basic
AuthUserFile         /usr/local/apache/conf/httpd.passwd
require              valid-user
</Directory>

Howto:http://eregie.premier-ministre.gouv.fr/manual/mod/mod_ssl/ssl_howto.html