Answers:
一个直接的解决方案是使用VPC网络ACL入站规则。仅当您的ELB在VPC中时,此方法才有效,但是如果您在最近几年中创建了它,则应将其作为默认值。
例如,要禁止1.2.3.4,请执行以下操作:
VPC
。Network ACLs
从左侧菜单。Inbound Rules
标签。Edit
并添加具有以下属性的新规则:
这里有关于网络ACL的更多信息:http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html
如果只需要将几个IP列入黑名单,则可以在Web服务器上使用nginx_http_access_module。
为此,最好的解决方案就是您所说的3台不同机器上的IPtables。
实际上,这不是一个好的解决方案,因为远程IP($remote_addr
在Nginx中)将来自Amazon的loadbalancer。禁止将导致所有转发的流量被禁止。
您必须检查数据包并找到HTTP X-Forwarded-For
标头,而IPtables并不是这样的协议感知。
我为Nginx中的2个顽皮IP解决了以下解决方案
set $client_ip $remote_addr;
if ($http_x_forwarded_for) {
set $client_ip $http_x_forwarded_for;
}
if ($client_ip = "123.123.123.123") {
return 403;
}
if ($client_ip = "123.123.123.234") {
return 403;
}
引入变量$client_ip
,以便我也可以在没有http_x_forwarded_for
可用的地方进行本地测试。
稍微偏离主题,但为方便起见,我还将该客户端ip添加到了访问日志中:
log_format main "\$client_ip - \$remote_user [\$time_local] \"\$request\" \$status \$body_bytes_sent \"\$http_referer\" \"\$http_user_agent\"";
access_log /var/log/nginx.access.log main;
不太漂亮,但希望对您有所帮助