¿El bloqueo de todas las conexiones fuera de los EE. UU., Aparte del puerto 80, causará una alta carga del servidor?

16

Como la mayoría de los servidores (supongo), tenemos personas que intentan forzar nuestros servicios las 24 horas, los 7 días de la semana. Tengo cpHulk en la lista negra de sus IP, pero parece que sería mejor si no llegaran tan lejos en primer lugar. Mi anfitrión y yo somos los únicos que nos conectamos al servidor en puertos que no sean 80, por lo que me gustaría bloquear las conexiones de todos los países fuera de los EE. UU., Excepto el puerto 80. Me puse en contacto con mi anfitrión para configurar esto, pero dudaban porque decían que crearía una carga de servidor excepcionalmente alta. Es un servidor Xeon 1230 dedicado con 32 GB de RAM que ejecuta CentOS 6.6 e iptables.

Primero, ¿alguna razón para no hacer esto? Segundo, ¿es correcto lo que mi anfitrión me dijo? Tercero, ¿hay alguna forma de lograr esto sin un impacto de alto rendimiento?

Hierro grande
fuente
12
Es desafortunado que su contacto de alojamiento no haya mencionado "Pero hay una forma estándar de la industria de hacer lo mismo que desea con mucho menos mantenimiento, mejor seguridad y baja carga del servidor llamada Explicit Deny All. Consígame la lista de IP que necesita en la lista blanca y lo tendré preparado en 20 minutos ". - Eso es lo que esperaría escuchar de cualquier administrador del sistema que valga la silla en la que se sientan.
corsiKa
simplemente bloquéelos cuando abusen ... el mantenimiento es mínimo de esta manera ... con una tabla completa, debe mantenerla actualizada
Skaperen

Respuestas:

33

Configurar reglas específicas para bloquear cada rango de IP (enumerando cada rango) es un enfoque incorrecto.

Establezca las reglas predeterminadas en iptables para eliminar todo el tráfico a sus puertos de administración. Luego agregue reglas para permitir solo el acceso desde sus IP de confianza (la suya y su host).

Bloquear todo de forma predeterminada y permitir solo el tráfico aprobado generalmente se denomina "explícitamente negar todo" y se considera una práctica recomendada. En este caso, también ayuda a evitar el impacto en el rendimiento que preocupa a su host.

jlehtinen
fuente
¿Por qué, si lo sabe, es una negación explícita de todo cuando está negando implícitamente a todos al permitir explícitamente solo unas pocas IP a través del firewall?
Ben
No hay nada implícito en eso realmente ...
mr-sk
Una posible preocupación para la lista blanca es el acceso remoto. Necesitará una VPN confiable (separada de este servidor) y también permitirá su rango de IP.
Foo Bar
9

Para hacer esto, tendría que agregar decenas de miles de reglas de firewall, una para cada bloque de red, donde un país puede tener de uno a varios miles de bloques de red asociados.

Cuando llega una solicitud, debería verificarse con cada regla , lo que lleva muy poco tiempo para unas pocas docenas o incluso cientos de reglas, pero con tantas reglas como sea necesario usar, (1) cada la solicitud se ralentizará significativamente y (2) usará mucha CPU.

La forma de hacerlo sin un impacto significativo en el rendimiento es haciendo lo que ya está haciendo: bloquear solo las direcciones específicas que son problemáticas.

Michael Hampton
fuente
Gracias por la respuesta, Michael. ¿No hay una manera de permitir solo IP basadas en EE. UU., Por lo que solo es necesario verificar una regla?
Big Iron
2
@BigIron Por supuesto que no. También hay decenas de miles de bloques de red en los Estados Unidos. Pierdes de cualquier manera.
Michael Hampton
1
@SamuelEdwinWard No, no lo hace. A pesar de que se extienden por todo el lugar, en general, tales listas de bloqueo no suman más de unos cientos de entradas.
Michael Hampton
1
¿Tiene una referencia de cuán significativa es la desaceleración? Una búsqueda lineal a pesar de que todos los conjuntos de reglas suenan terriblemente ineficientes, al menos una búsqueda binaria significaría que buscar en una tabla de reglas de 60,000 solo tomaría 16 sondas en la tabla, y eso podría ser más rápido que dejar pasar el tráfico al servidor web que podría tiene que ejecutar E / S de disco para atender la solicitud. No pude encontrar ninguna métrica en grandes conjuntos de reglas en iptables.
Johnny
1
@Johnny netfilter (iptables) procesa sus reglas linealmente desafortunadamente: serverfault.com/questions/334885/…
Ross Ridge
5

Lo que necesitas es una herramienta llamada ipsets

Los conjuntos de IP son un marco dentro del kernel de Linux, que puede ser administrado por la utilidad ipset. Dependiendo del tipo, actualmente un conjunto de IP puede almacenar direcciones IP, números de puerto (TCP / UDP) o direcciones IP con direcciones MAC de una manera, lo que garantiza la velocidad del rayo al hacer coincidir una entrada con un conjunto.

¡Lo importante a tener en cuenta aquí es que es increíblemente rápido! Esto se debe a que se puede representar una gran cantidad de redes IP mediante un solo hash en lugar de cientos o miles de líneas de reglas de iptables.

Para países de bloqueo, vea este ejemplo :

Ricardo
fuente
1

Ignorando un poco sobre si hacerlo o no de esta manera es una buena idea, puede hacer lo que pidió con el módulo GeoIP para iptables.

Después de construir e instalar el módulo (y mantener sus listas de IP actualizadas mensualmente), puede hacer cosas como esta para bloquear países individuales:

iptables -I INPUT -m geoip --src-cc CN -j DROP

O use --src-cc US -j ACCEPTy así sucesivamente si prefiere especificar los países que desea conservar.

Scott Dudley
fuente
¿No sería un desastre de rendimiento incluso si se usa "explícitamente negar todo" y se permite un solo país?
@ AndréDaniel, admito que no he mirado el código GeoIP en sí, pero suponiendo que utilicen una implementación no ingenua que sea más inteligente que comparar secuencialmente un montón de bloques de red (por ejemplo, un trie), no es necesario que lo sea.
Scott Dudley
Y si está hablando de IPv4 y tiene 512 Mb de sobra por regla, una implementación teórica utilizando una tabla de búsqueda podría hacer el trabajo en O (1).
Scott Dudley
1

Si desea conservar la capacidad de conectarse desde cualquier lugar sin mantener una lista negra / lista blanca de ubicación geográfica, puede implementar la anulación de puertos . Detendría la mayoría de los intentos automatizados y le permitiría conectarse desde cualquier dirección.

Nota: No coloque el puerto para golpear adyacente al puerto para abrir, de lo contrario, un escaneo secuencial de puertos activará su regla.

seren
fuente
0

En el caso de que tenga un enrutador con BGP habilitado o dos en su pila Y tenga alguna idea de qué demonios está haciendo / trabaje con alguien que sepa qué demonios están haciendo, o están Tal vez detrás de un proveedor de prevención DDoS lo suficientemente bueno como para ayudar en la implementación de esto, hay un método relativamente nuevo para restringir el tráfico a las regiones geográficas llamado blackholing selectivo, que creo que vale la pena echarle un vistazo.

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

Como este método funciona en la manipulación de las rutas, evita cualquier problema de carga del servidor.

Dmitri DB
fuente