我知道特定范围的 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 -t
RHEL)进行测试,然后重新启动 apache。
这只是发403 Forbidden
回一个响应