¿Cómo puedo bloquear un rango de direcciones IP con una instancia de Amazon EC2?

27

Sé que un cierto rango de direcciones IP está causando problemas con mi servidor, 172.64.*.*¿cuál es la mejor manera de bloquear el acceso a mi instancia de Amazon EC2? ¿Hay alguna manera de hacerlo usando grupos de seguridad o es mejor hacerlo con el firewall en el servidor?

cwd
fuente
1
Si la instancia está dentro de una VPC, puede editar la ACL de red para denegar un rango específico.

Respuestas:

17

Bloquee el tráfico tanto en el servidor como en el firewall si es posible, por si acaso.

Los grupos de seguridad son buenos porque son externos a su host, por lo que los datos nunca llegan a usted. Sin embargo, no son tan configurables como la mayoría de los firewalls basados ​​en servidores.

Desafortunadamente, los grupos de seguridad EC2 solo pueden "permitir" servicios a través de una política de denegación predeterminada. Entonces, si está tratando de bloquear el acceso a un servicio público "permitido" para un rango de IP pequeño, crear la regla de permiso para "el resto de Internet" es un poco más complejo que simplemente bloquear un rango de IP. Como ha especificado una gran porción, la lista de rangos de red que no incluyen 172.64.0.0/16 no es demasiado larga:

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

Esta lista debería agregarse para sus puertos. Luego puede eliminar su regla 'permitir todo' para ese puerto. Si tiene varios puertos para los que desea hacer esto y no son contiguos, la lista deberá ir varias veces. Si tiene varios grupos de seguridad, esto puede convertirse rápidamente en inmanejable.

El firewall local también funcionará. iptablesestá disponible en el Amazon AMI predeterminado, y todas las distribuciones de Linux

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

Después de agregar sus reglas, deberá guardarlas y asegurarse de que el iptablesservicio se inicie en el arranque.

# 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

El archivo de configuración para guardar variará con las distribuciones.

Usando una VPC

Si utiliza una VPC para sus instancias, puede especificar "ACLS de red" que funcionan en su subred. Las ACL de red le permiten escribir reglas de permiso y denegación, por lo que recomiendo hacerlo de esta manera.

Mate
fuente
esto ya no funciona
Kim Jong Woo
@KimJongWoo, ¿qué no funciona? No puedo ver que iptablesno funcione, ¿se está refiriendo a la gran subred permitida en el grupo de seguridad?
Matt
12

La forma más sencilla de detener el tráfico es (suponiendo que se esté usando VPC) agregándolo a la ACL de red VPC de esa instancia y negando todo el tráfico de esa dirección IP.

Una cosa para recordar es que el número de la regla de denegación debe ser menor que el primer número de la regla de permitir.

pg2286
fuente
44
¿Se refiere al negar la regla número debe ser menor que el primero permite que la regla número?
Dan Tenenbaum
Si eso es correcto.
pg2286
1
tenga en cuenta que hay un límite de 20 reglas ACL. Y esto apesta, Amazon.
Alex
3

Me he encontrado con un problema dos veces y me di cuenta de que mi situación EC2 es un poco diferente: iptablesno funciona si sus servidores están en un clúster detrás de un equilibrador de carga elástico (ELB): la dirección IP que conoce la instancia es la de el ELB

Si tiene su ELB configurado en una configuración más moderna, vea esta respuesta SO: /programming/20123308/how-to-configure-aws-elb-to-block-certain-ip-addresses-known -spammers

En nuestro caso, no teníamos las cosas bien configuradas, así que tuve que usar Apache, que puede buscar el X-FORWARDED-FORencabezado y bloquear las direcciones IP.

Agregue esto a su configuración de apache (quizás en un bloque VirtualHost):

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

Esto verificará el encabezado que establece el ELB

Guarde la configuración, pruebe con apache2ctl -tdebian / ubuntu (o apachectl -tcon RHEL), luego reinicie apache.

Esto solo envía una 403 Forbiddenrespuesta

Tom Harrison Jr
fuente