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?
Respuestas:
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.
fuente
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.
fuente
Lo que necesitas es una herramienta llamada ipsets
¡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 :
fuente
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:
O use
--src-cc US -j ACCEPT
y así sucesivamente si prefiere especificar los países que desea conservar.fuente
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.
fuente
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.
fuente