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


27

我知道一定范围的IP地址导致服务器出现问题,172.64.*.*什么是阻止访问Amazon EC2实例的最佳方法是什么?有没有办法使用安全组来做到这一点,还是最好用服务器本身的防火墙来做到这一点?


1
如果实例在VPC内,则可以编辑网络ACL以拒绝特定范围。

Answers:


17

为了以防万一,请尽可能阻止服务器和防火墙上的通信。

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

不幸的是,EC2安全组只能通过默认的拒绝策略“允许”服务。因此,如果您试图在较小的IP范围内阻止对公共“允许”服务的访问,则为“ Internet的其余部分”建立允许规则比仅阻止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

如果您为实例使用VPC,则可以指定在子网中可用的“网络ACLS”。网络ACL确实允许您编写允许和拒绝规则,因此我建议采用这种方式。


这不再起作用了
Kim Jong Woo

@KimJongWoo什么不起作用?我看iptables不到不起作用,因此您是指安全组中的大型子网允许吗?
马特

12

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

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


4
您的意思是拒绝规则号应该小于第一个允许规则号?
Dan Tenenbaum

对,那是正确的。
pg2286 '16

1
请记住,限制为20条ACL规则。这很糟糕,亚马逊。
亚历克斯

3

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

如果您将ELB配置为更现代的配置,请参见以下SO答案:https : //stackoverflow.com/questions/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known垃圾邮件发送者

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

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

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

这将检查由ELB设置的标题

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

这只是发送403 Forbidden回一个响应


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.