AWS ELB环境下限制客户端访问配置
ELB(Elastic Load Balancer)
Amazon ELB(Elastic Load Balancer),是AWS提供的弹性负载均衡器,可根据实际情况为外部访问分配最合适的服务器。在实际使用过程中,会需要对经由ELB的客户端访问加 以限制,本文将介绍如何通过配置EC2实例来实现对此类客户端的限制访问。
如图所示,由于ELB不属于安全组,所以对于安全组实施限制并不会对ELB生效,经由ELB的客户端访问依然可以抵达EC2。
然而倘若限制ELB访问EC2,ELB对EC2发出HealthCheck(健康检查)动作时,ELB将无法访问成功检查,而判断该EC2出现异常情况。所以只有通过在EC2实例上的Web服务器上配置访问限制,才能对经由ELB的客户端访问加以限制。
可是在对访问的客户端实施限制时,由于访问全部经由ELB,则检知的访问IP均为ELB的IP,此时需要借助XFF头(X-Forwarded-For)实施确认和限制。
举例说明
1.只允许地址为172.24.40.83的IP访问该网站。
编辑网站配置文件,添加或修改配置文件如下:
SetEnvIf X-Forwarded-For “172.24.40.83” allow_ip
Order deny,allow
Deny from all
Allow from env=allow_ip
2.拒绝地址为172.24.40.83和17224.40.84的IP访问该网站。
编辑网站配置文件,添加或修改配置文件如下:
SetEnvIf X-Forwarded-For “172.24.40.83” deny_ip01
SetEnvIf X-Forwarded-For “172.24.40.84” deny_ip02
Order allow,deny
Allow from all
Deny from env=allow_ip01
Deny from env=allow_ip02
X-Forwarded-For的功能是在ELB接受客户端的请求后,分配到EC2时在数据包的尾部添加上真正客户端的IP地址。
采用Apache的Web服务器,通过mod_extract_forwarded的安装和配置,可以将客户端的IP修改成X-Forwarded-For,具体的方法目前还有待研究。
yum install mod_extract_forwarded
只让指定的agent访问
set $aws_inner_flag “”;
if ($uri ~* “^(index.php|index.html|index.htm)”) {
set $aws_inner_flag P;
}
if ($http_user_agent ~* “^(Baiduspider|ahrefs|aybot|BLEXBot|ChinasoSpider|CompSpyBot|Exabot|EasouSpider|KSpider|MJ12bot|MediavBot|msnbot|Yahoo|YisouSpider|YoudaoBot|YYSpider)”) {
set $aws_inner_flag “${aws_inner_flag}C”;
}
if ( $aws_inner_flag = PC ) {
return 301 https://www.awsgood.com$request_uri;
}
ELB弹性负载均衡器是一款比较简单易用的负载均衡器,其采用Round Robin方式平均的将外部访问分配到ELB管理下的EC2实例中,保障实例群在大访问量下最好的分配使用系统资源。