如何使用 Amazon EC2 实例阻止一系列 IP 地址?

如何使用 Amazon EC2 实例阻止一系列 IP 地址?

我知道特定范围的 IP 地址导致我的服务器出现问题,172.64.*.*阻止访问我的 Amazon EC2 实例的最佳方法是什么?有没有办法使用安全组来执行此操作,或者使用服务器本身的防火墙来执行此操作是否更好?

答案1

如果可能的话,阻止服务器和防火墙上的流量,以防万一。

安全组很好,因为它们位于您的主机外部,因此数据永远不会到达您。不过,它们的可配置性不如大多数基于服务器的防火墙。

不幸的是,EC2 安全组只能通过默认拒绝策略“允许”服务。因此,如果您尝试阻止对较小 IP 范围的公开“允许”服务的访问,则为“互联网的其余部分”构建允许规则比仅仅阻止 IP 范围要复杂一些。由于您指定了一个不错的大块,因此不包括 172.64.0.0/16 的网络范围列表并不太长:

0.0.0.0/1
128.0.0.0/3
160.0.0.0/5
168.0.0.0/6
172.0.0.0/10
173.0.0.0/8
174.0.0.0/7
176.0.0.0/4
192.0.0.0/3
224.0.0.0/3

需要为您的端口添加此列表。然后您可以删除该端口的“允许全部”规则。如果您想要执行此操作的多个端口不连续,则它们列表将需要多次进入。如果您有多个安全组,这很快就会变得难以管理。

本地防火墙也将起作用。iptables在默认的 Amazon AMI 和所有 Linux 发行版上可用

sudo iptables -I INPUT -s 172.64.0.0/16 -j DROP

添加规则后,您需要保存它们,并确保服务iptables在启动时启动。

# For Amazon Linux
sudo service iptables save

# Other distributions might use one of these:
#sudo iptables-save > /etc/sysconfig/iptables-config
#sudo iptables-save > /etc/iptables/rules.4

保存的配置文件因发行版而异。

使用VPC网络ACL

如果您使用专有网络对于您的实例,您可以指定在您的子网上运行的“网络 ACLS”。网络 ACL 确实允许您编写允许和拒绝规则,因此我建议这样做。

答案2

停止流量的最简单方法是将其添加到该实例的 VPC 网络 ACL 并拒绝来自该 IP 地址的所有流量(假设正在使用 VPC)。

要记住的一件事是拒绝规则编号应小于第一个允许规则编号。

答案3

我已经遇到了两次问题,并意识到我的 EC2 情况有点不同:iptables如果您的服务器位于弹性负载均衡器 (ELB) 后面的集群中,则该问题不起作用 - IP 地址实例知道的是ELB。

如果您的 ELB 配置为更现代的配置,请参阅以下答案:https://stackoverflow.com/questions/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known-spammers

在我们的例子中,我们没有设置好,所以我不得不使用 Apache,它可以X-FORWARDED-FOR从中查找标头并阻止 IP 地址。

将其添加到您的 apache 配置中(可能在 VirtualHost 块中):

RewriteEngine On
RewriteCond %{HTTP:X-FORWARDED-FOR] ^46\.242\.69\.216
RewriteRule .* - [F]

这将检查 ELB 设置的标头

保存配置,apache2ctl -t使用 debian/ubuntu(或apachectl -tRHEL)进行测试,然后重新启动 apache。

这只是发403 Forbidden回一个响应

答案4

如果实例位于 VPC 内,您可以编辑网络 ACL 入站规则

To block 172.64.*.* add an entry like 172.64.0.0/16

To block 172.64.120.* add an entry like 172.64.120.0/24

To block 172.*.*.* add an entry like 172.0.0.0/8

To block a specific IP add an entry 172.64.120.56/32     

在此输入图像描述

相关内容