RoR:保护封闭的API

时间:2009-03-03 02:52:01

标签: ruby-on-rails ruby security api

我在不同的虚拟服务器上有两个rails应用程序,但在同一个工具中。这两个应用程序都可以通过本地IP地址进

这是一个两部分问题:

1)如何检查请求的来源,并将请求仅限于来自该位置的请求?

2)你认为这足够安全吗?

我的直觉告诉我,由于IP欺骗,这不够安全,但我认为OAuth或类似的东西对我的需求来说太硬了。虽然,也许不是。

这是我第一次接近这样的事情而且我正在寻找任何可以让我朝着正确方向前进的人。

感谢。

2 个答案:

答案 0 :(得分:3)

根据您的托管对象,本地网络(您的本地地址所属的)可能是仅可由您的实例访问的专用网络,或者更有可能与其他虚拟机共享那不属于你的。您不会接受直接的外部攻击,但任何受到攻击的虚拟机共享同一个本地网络,因为您可以成为攻击的跳板,因此您的担忧绝对有效。

按顺序回答你的两个问题:

  1. 为本地接口配置iptables ,仅接受来自特定本地IP的特定端口上的请求(阅读a tutorial,以便更好地了解iptables配置。)本地网络上的所有其他虚拟机都不应该能够探测到您,尽管它们可能能够拦截您的流量(如下所述)。
  2. 否;您应在所有节点内连接上使用SSL 。这将以两种方式保护您:首先它会保护您免受欺骗(如果攻击者没有您的证书就会被拒绝,即使他通过欺骗他的地址绕过iptables,或者因为您{{1} } config被管理员覆盖,其次它会保护你的数据免受窥探(例如,攻击者将无法窥探你的密码的流量。)一些应用程序(例如大多数数据库引擎,net-snmpd在v3中设置)模式等)原生支持SSL。或者,建立并使用iptables隧道,或使用stunnel
  3. 示例基础ssh配置允许公共(Internet)接口上的基本服务(HTTP,SSH等),以及允许iptableswww1连接到此节点的MySQL www2接口上的端口3306(eth0www1www2中定义,因此它们会解析为相应的IP地址。):

    /etc/hosts

答案 1 :(得分:1)

这听起来并不像Rails问题,更多的是关于Web架构的问题。我假设这两台机器都可以通过HTTP访问外部世界。如果是这种情况,您可能需要考虑在两台计算机前放置防火墙,以创建两台计算机所在的本地网络。

完成此操作后,您应该能够根据您指定的任何条件配置防火墙以禁止请求。鉴于这是一个Rails应用程序,我将假设API是一组资源。如果是这种情况,您可以配置防火墙以过滤对私有API的请求。

这样,本地网络上的计算机可以自由通信,因为它们之间的请求不会通过防火墙。