什么:
我们正在使用 iptables,并将我们的服务器锁定为仅特定端口和 IP。最近我们有一个要求,需要向第三方服务开放流量。
但是,那第三方服务使用 AWS,其后端实例位于 ELB 后面。当然,后端实例 IP 可能随时发生变化,因为它们不是静态的。同时亚马逊无法给出具体的IP范围。
如何:
理想情况下,如果我们有 IP 范围,那么我们可以将其添加到 iptables 规则中,但我们没有和我们无法添加 URL(原因很明显,这在 iptables 中是不可能的)。
我可以运行挖命令针对两个主要 URL(api 和主站点),这将为我提供大多数 IP,但问题是它没有获取全部后端实例。
我能够找到 IP 的唯一方法是查看日志以查看哪些 IP 被阻止。一旦我为这些 IP 添加规则,它就开始工作了……
有没有办法有效地编写脚本?或者我们必须放弃使用 iptables....或者寻找其他第三方服务?
如果有帮助的话,我们尝试使用的服务是 Mollom:
网址:www.mollom.com, rest.mollom.com
答案1
您可能无法从 DNS 获取所有 IP,因为与您的服务通信的一些实例是后台工作程序或任务箱等。如果没有可靠的方法来确定哪些 IP 可能尝试访问您的服务,您将无法通过 IP 限制访问。
你可以使用亚马逊的IP范围API开放对整个 AWS 区域的访问,但这有点违背了主题。也许他们访问您的应用程序的方式有些独特,您可以使用一种粗略的共享机密形式,并限制对看起来相似的请求(用户代理标头、特定查询参数等)的访问?
答案2
如果您只是使用 REST API,它通常会从您联系的 IP 地址响应,否则 HTTP TCP 连接将无法工作。但如果您实际上正在使用创建带外 TCP 连接回您的原始客户端 IP 或其他 IP 的服务,那么该 API 的所有者需要向您公开源 IP 列表,以便您可以将它们列入白名单,这确实没有更好的解决方法。