Amazon web services 按国家限制网站访问

Amazon web services 按国家限制网站访问,amazon-web-services,dns,geolocation,amazon-route53,Amazon Web Services,Dns,Geolocation,Amazon Route53,我正在使用AWS托管我的网站 该网站位于2个ec2实例上,负载均衡器(ELB)在它们之间平衡流量 目前,我正在使用我的DNS(路由53)通过路由53的地理位置路由限制对网站的访问: (地理位置限制只是限制我的网站的首次发布。这不是出于安全原因。这意味着限制只需要对公众有效) 这让我有点担心,因为我的负载平衡器仍然可以从任何地方访问。所以我担心我的负载平衡器会被谷歌或其他什么东西索引,然后我所在地区以外的人就能访问这个网站 这有什么解决办法吗?我是否以错误的方式通过位置限制访问?是否有办法在EL

我正在使用AWS托管我的网站

该网站位于2个ec2实例上,负载均衡器(ELB)在它们之间平衡流量

目前,我正在使用我的DNS(路由53)通过路由53的地理位置路由限制对网站的访问:

(地理位置限制只是限制我的网站的首次发布。这不是出于安全原因。这意味着限制只需要对公众有效)

这让我有点担心,因为我的负载平衡器仍然可以从任何地方访问。所以我担心我的负载平衡器会被谷歌或其他什么东西索引,然后我所在地区以外的人就能访问这个网站

这有什么解决办法吗?我是否以错误的方式通过位置限制访问?是否有办法在ELB的安全组中指定它只接收来自我的DNS的入站流量(当然,我还必须指定允许来自边缘位置的入站流量用于我的静态内容,但这不是问题)

注意:为安全组选择入站规则时,在“类型”下有一个选项可选择“DNS(UDP)”或“DNS(TCP)”。我尝试为我的ELB添加两个DNS类型(和IP Address=“anywhere”)的规则,但这并没有限制仅通过我的DNS访问ELB


谢谢。

实现地理IP限制最可靠的方法是使用地理位置数据库或服务API,并在应用程序级别实现它

例如,对于几乎任何语言的网站,在每个页面请求的开头添加测试,将客户端IP与geo IP数据库或服务进行比较,并处理来自那里的响应是非常简单的

在应用程序级别,管理您接受/拒绝的国家/地区以及根据需要记录这些事件比在网络级别更容易

基于IP的地理位置数据通常是可靠的,并且有许多数据来源。虽然您可能在很多方面信任AWS,但我确实认为有许多可靠的第三方geo IP dat来源,这些来源主要关注这些数据

  • 提供一个公共HTTP API来搜索IP地址的地理位置。每小时最多允许10000次查询
  • 是一个免费的IP地理定位数据库,供个人或商业使用

如果您的应用程序使用数据库,则这些地理数据库很容易在您的应用程序中导入和引用。

在CloudFront中可以找到简单的解决方案。实际上,有两种解决方案:

CloudFront可以使用其GeoIP数据库为您执行阻止

当用户请求您的内容时,无论用户位于何处,CloudFront通常都会提供所请求的内容。如果您需要阻止特定国家/地区的用户访问您的内容,您可以使用CloudFront地理限制功能[…]

您可以配置允许哪些国家/地区使用CloudFront,哪些国家/地区被拒绝使用CloudFront。您还可以配置存储在S3中的静态页面,这些页面将显示给被拒绝的用户。(您还可以为可能发生的其他CloudFront错误配置静态自定义错误页面,并将这些页面存储在S3中,CloudFront将在需要时获取这些页面)

…或…

CloudFront可以使用
CloudFront Viewer国家/地区:
标题将位置信息传递回您的服务器,并且您的应用程序代码可以根据该标题附带的内容执行阻止操作。传入的请求如下所示(为了清晰起见,某些头被屏蔽或删除):

CloudFront根据请求页面和查看者的国家/地区以及任何其他白名单标题的组合缓存响应,因此它将独立地正确缓存拒绝的响应以及允许的响应

以下是有关如何启用
CloudFront查看器国家/地区:
标题的详细信息:

如果希望CloudFront根据请求来自的国家/地区缓存对象的不同版本,请配置CloudFront以将CloudFront Viewer国家/地区标头转发到您的来源地。CloudFront自动将请求来自的IP地址转换为两个字母的国家/地区代码

当然,您也可以同时启用这两项功能,让CloudFront进行阻止,同时仍然让您的应用程序了解允许通过的位置的国家代码


但是,负载平衡器仍然向世界开放,您如何解决这个问题呢

CloudFront最近也解决了这个问题,它使用了自定义的源标题。这些是CloudFront随每个请求发送到源服务器的秘密自定义头

您可以识别由CloudFront转发到自定义源站的请求。如果您想知道用户是否正在绕过CloudFront[…],这将非常有用

假设您向CloudFront添加了一个自定义头:

X-Yes-This-Request-Is-Legit: TE9MIHdoYXQgd2VyZSB5b3UgZXhwZWN0aW5nIHRvIHNlZT8=
线路的噪音是什么?没有什么,真的,只是一个虚构的秘密值,只有您的服务器和CloudFront知道。配置您的web服务器,以便如果传入请求中不存在此标头和值,那么访问将被拒绝——这是一个未通过CloudFront的请求

当然,不要使用上述秘密。。。自己编吧。这完全是武断的



适用于任何GeoIP限制策略的警告:它并不完美。CloudFront。

我有一篇帖子详细解释了如何使用Route53:将位置列入白名单/黑名单


就您的ELB向公众公开而言,这不应该是一个问题,因为通过端口80/443向ELB发出的任何请求上的主机头都与您的域名不匹配,这意味着对于大多数web服务器,将返回404或类似的名称

有一种使用AWS WAF的方法 您可以选择-resource
X-Yes-This-Request-Is-Legit: TE9MIHdoYXQgd2VyZSB5b3UgZXhwZWN0aW5nIHRvIHNlZT8=