【问题标题】:Python get how to detect Public DNS?Python获取如何检测公共DNS?
【发布时间】:2014-02-18 20:28:34
【问题描述】:

在 Python (Django) 中,我需要一种方法来检测请求的来源,传统上我使用 Python 来检测客户端 IP,但是,在我的生产中,我的客户端服务器使用 AWS 和负载均衡器,所以我需要一种方法来检测请求来自 DNS,例如

公共 DNS:ec2-11-11-11-48.eu-north-2.compute.amazonaws.com

有没有办法从客户端检测服务器的公共 DNS,即对于 IP 我这样做:

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip  

 class IpAuthentication(Authentication):
    def is_authenticated(self, request, **kwargs):
        return get_client_ip(request) in SETTINGS.ALLOWED_IPS:

所以我要问的是:有没有办法确保我的客户请求来自特定的 AWS 实例?

【问题讨论】:

  • 您是否评估过在 AWS 上购买静态 IP 的可能性? aws.amazon.com/articles/1346
  • 不起作用我使用负载均衡器 + 其他原因,我的意思是我确实有一个 IP,但它发生了变化,因此不能用于验证。我确定有一种方法可以验证客户端是否在同一个实例上,也许可以使用 boto?
  • 无法真正理解您的架构。如果 EC2 实例正在调用您的 django 服务,我看不到负载均衡器的作用。
  • 抱歉,EC2 正在调用该服务。 API 和客户端在同一台服务器上。我想验证客户端请求来自同一个 IP/域。设置。客户端 > 负载均衡器 > ec2 实例。但我需要确保客户端是从 ec2 实例之一进行调用的。

标签: python django amazon-web-services amazon-ec2


【解决方案1】:

您实际上只希望另一个 EC2(您启动的)与您的服务器联系? 看起来你最好使用安全组。您需要创建一个安全组并阻止来自外部的所有访问。然后使用相同的安全组启动服务器-EC2 和客户端-EC2。这会阻止所有其他访问。

在这里阅读更多: Amazon EC2 安全组 - Amazon 弹性计算云:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2015-12-01
    相关资源
    最近更新 更多