¿Cómo puedo bloquear los intentos de piratería dirigidos a phpMyAdmin?


35

Mi sitio web recibe miles de visitas diarias de diferentes IP que intentan acceder:

/php-myadmin/
/myadmin/
/mysql/

... y miles de otras variaciones. Ninguno de estos directorios existe, ni siquiera tengo phpmyadmin en mi servidor.

No creo que ninguno de estos intentos haya tenido éxito, sin embargo, deben estar afectando los recursos del servidor y desperdiciando ancho de banda, por lo que me gustaría detenerlos si es posible. He bloqueado un puñado de estas IP pero siguen volviendo con IP nuevas, ¿hay alguna forma de evitar esto de forma más permanente?


8
Miles de visitas por día no son nada. ¿Realmente estás experimentando dificultades de rendimiento o solo estás asumiendo? Unos pocos miles de 404 en un día no son realmente nada .
MDMarra

No, no estoy experimentando problemas de rendimiento. Pero me molesta y me preguntaba si hay algo que pueda hacer.
amba88

66
Tenga cuidado con el bloqueo basado en IP: muchas IP terminan siendo utilizadas por usuarios legítimos. Además, algunos usuarios legítimos pueden infectarse como parte de una botnet. Si realiza un bloqueo basado en IP, asegúrese de que tenga un vencimiento razonablemente corto.
Bob

No se menciona mod_securityen este hilo, así que échale un vistazo . Tenga en cuenta que un comentario a continuación señala que, en realidad, esto haría que el servidor hiciera más trabajo Entonces quizás mod_evasivetambién sería bueno implementarlo . fail2ban, pero eso se enumera a continuación.
mbrownnyc

Respuestas:


42

No te preocupes por eso. Servir un 404 es una cantidad muy pequeña de trabajo para un servidor web. Probablemente podría servir diez 404 por segundo usando un 486. El ancho de banda por 404 es insignificante; una pequeña solicitud GET y una pequeña respuesta 404.

Seriamente; no te preocupes por eso Esto es solo parte integrante de ejecutar un servidor en Internet.


14
Prohibición del infierno: Sirva una página normal (200 OK) con salida de galimatías. Las herramientas que usan los niños informarán la página encontrada y deberán investigar a mano (una página de inicio de sesión falsa sería un dispositivo del diablo) :)
arul

44
@arul: algunos atacantes pueden tomar esto como un desafío y prestar atención adicional a su servidor por despecho. ¿Sería útil servir un 404 más pequeño o diferente aquí? Por ejemplo, si el host normalmente sirve un 404 con un enlace de soporte, ¿debería / podría en cambio servir un 404 simple sin contenido a estas URL específicas?
Freiheit

1
El propósito es hacer que el adversario gaste recursos adicionales (tiempo) para analizar los resultados. Si obtienes un 404, sabes que no ha habido posibilidad de que el ataque funcione. Los resultados OK de longitud variable son [sin investigación adicional] indistinguibles de los resultados esperados. Realizan estos escaneos porque la paciencia no es su virtud, así que
desmotívalos

1
Para obtener puntos de bonificación, devuelva una página estática que se vea exactamente como la página real de phpmyadmin, pero que no sea completamente funcional.
captncraig

1
Para obtener puntos de bonificación adicionales, cree un retraso de 0.5 - 1 segundo. Esto no aumentará significativamente el tiempo de carga por parte de usuarios legítimos, pero ralentizará el escaneo que están haciendo los malos. (Solo debe asegurarse de que su servidor tenga la capacidad de mantener las conexiones abiertas durante más tiempo del necesario y aún procesar solicitudes legítimas).
Moshe Katz

38

Desafortunadamente para usted, así es como funciona Internet. Simplemente ignóralo. Miles de bots / troyanos escanean Internet. La IP de origen siempre será aleatoria. No existe cura.

La única solución 100% para eliminar ese tráfico se ilustra a continuación: ingrese la descripción de la imagen aquí

Una alternativa es:
- moverse con https / http desde el puerto 80/443 a otra cosa. Los bots generalmente no buscan el servidor http en todos los demás puertos de 65k.
- use VPN para conectarse al servidor (supongo que esto no es posible si aloja un sitio web público).


LOL +1 para el diagrama :-) Tengo este problema molesto (como todos nosotros) en un sitio estático y esta es la respuesta más útil.
Dave Everitt

30

Lo que quieres es Fail2ban (suponiendo que se trata de una máquina Linux, no dijiste ...)

¿Qué es Fail2ban?

Fail2ban analizará los registros del sistema, buscando expresiones regulares particulares para bloquear. Cuando encuentra una coincidencia (o varias coincidencias desde la misma IP, dependiendo de cómo la configure), se bloqueará, generalmente a través de IPTables. Normalmente, esto se usa para bloquear intentos de autenticación fallidos contra SSH o servidores web.

Lo configura para prohibirlos durante un período de tiempo determinado (podrían ser minutos, podrían ser días ... depende de cuán persistentes sean), después de lo cual la prohibición caducará, a menos que lo intenten nuevamente.

¿Cómo ayuda esto a bloquear los bots de escaneo phpmyadmin?

Se puede usar con la misma facilidad para hacer coincidir los signos comunes de un ataque, como intentar acceder a carpetas phpmyadmin inexistentes. Tendrá que encontrar la expresión regular correcta para que coincida con dichos intentos y asegurarse de no bloquear usuarios legítimos.

La configuración dada en esta publicación de blog puede funcionar literalmente o requerir algunos ajustes para su configuración.

¿Por qué debería bloquearlos? Los errores 404 no cuestan mucho

Bloquearlos en iptables SÍ tiene algún uso: es probable que si están buscando vulnerabilidades de phpmyadmin, también pueden probar otros servicios para detectar vulnerabilidades, hasta que encuentren algo que funcione. Prohibirlos hará que la mayoría de los bots / scripts se den por vencidos después de un tiempo, y pasarán a mejores objetivos.

Incluso a través de los escaneos no cuestan mucho (a menos que realmente encuentren una vulnerabilidad), inundan sus registros haciendo que sea más difícil ver ataques exitosos y problemas con su servidor web.

Como dice el comentario a continuación, Fail2ban requiere algunos recursos del sistema. Pero no mucho. Por lo menos puedo decir que nunca he tenido un problema de rendimiento que podría atribuir a Fail2ban. Sin embargo, he tenido problemas de rendimiento debido a scripts muy agresivos que intentan forzar contraseñas de fuerza bruta o arrojan miles de intentos de inyección SQL y otras vulnerabilidades por segundo en mi servidor. Bloquearlos en el nivel de firewall requiere MUCHO menos recursos que bloquearlos en el nivel de servidor / aplicación. También se puede extender para ejecutar secuencias de comandos personalizadas para prohibir las direcciones IP, por lo que, en lugar de prohibirlas en tablas IP, es posible que las prohiba en un firewall de hardware o envíe un correo electrónico a alguien si la misma persona intenta atacarlo para que pueda quejarse a su ISP o haga que su centro de datos los bloquee en sus firewalls.

¿Algún otro consejo?

Se RECOMIENDA ALTAMENTE que incluya en la lista blanca algunas direcciones IP que controla para que no se bloquee accidentalmente.


66
eso será un desperdicio de recursos :) Creo que utilizará más ciclos de CPU en Fail2ban que simplemente sirviendo a veces 404 :)
Bartłomiej Zarzecki

44
@ BartłomiejZarzecki Una mejor seguridad siempre requiere más recursos
user11153

3
@ heinrich5991 se bloqueará después de los primeros intentos. No hay diferencia para algunos escaneos, pero es una gran diferencia para los escaneos que intentan múltiples intentos en el servidor.
Grant

2
Con suerte, Fail2ban (o similar) será para algo más que / phpmyadmin. Suponiendo que tiene algún tipo de acceso remoto, el bloqueo de tipo F2B (3 contraseñas y usted ... se ha ... ido) es para algo más que 404s.
WernerCD

3
Si hace algo como esto, asegúrese de establecer que la prohibición caduque relativamente rápido (algunas horas, como máximo), o corre el riesgo de bloquear a usuarios legítimos si el ataque proviene de una IP asignada dinámicamente.
Jens Neubauer

7

Lo que hago es poner un pequeño script en el directorio apropiado, para que se ejecute si alguien accede a / phpmyadmin /. Ese script no hace nada más que invocar iptables (en Linux), que bloquea la dirección IP que accede al script durante 30 minutos (después de lo cual un trabajo cron vacía la cadena de iptables a la que se agrega la dirección IP).

La ventaja sobre fail2ban es que no utiliza ningún recurso para analizar syslog / access-log. La desventaja, por supuesto, es que no verifica nada más, excepto acceder a esta dirección muy específica.

¿Por qué hago esto? Claro, servir un 404 sería fácil para el servidor, pero no quiero que hurguen, así de simple. Quiero perder el tiempo de su herramienta, esperando que el servidor responda, reintentando hasta que finalmente se rinda. Además, si no los bloquea, probarán muchas URL diferentes antes de continuar, a veces más de mil. Dependiendo de la herramienta, puede ser "agradable" y espaciarlos en unas pocas horas, o puede que no le importe y golpee su servidor con todos ellos en cuestión de minutos.

¿Por qué no publico una página válida? Su herramienta podría dejar de escanearlo y alertar al skiddie que lo está ejecutando, que luego debe verificarlo manualmente. La otra cara de esto es que le darán a su servidor una vista mucho más cercana de lo que tendrían, si su escaneo no lo hizo aparecer en sus resultados. Tal vez hurgarán un poco más, tal vez algunos escaneos de puertos, tal vez los enojen y lanzarán un DoS para ver si pueden hacer algo. Simplemente bloquearlos, lo que desde su punto de vista hace que el servidor agote el tiempo en el momento en que acceden al script phpmyadmin, es efectivo desperdiciando el tiempo de su herramienta, al tiempo que evita la atención no deseada.

Si TIENES phpMyAdmin en el servidor, una solución efectiva puede ser colocarlo en un directorio separado y usar el control de contraseña de tu servidor web (.htpasswd para Apache) para bloquear el acceso antes de que algo llegue a él.


Suena como una buena opción alternativa ... ¿pero eso no requiere que el servidor web pueda ejecutar el script con permisos de root?
Grant

1
Ajuste el alias para herramientas como phpMyAdmin. Cambio simple en el archivo de configuración para cambiarlo a adminMyPhp o chrisPhpAdmin ... o algo que no se bloqueará con script.
WernerCD

Perdón por la respuesta tardía, no lo hace (necesariamente). Puede usar sudo (con el archivo sudoers) para permitir que el servidor web ejecute un script conocido (y solo ese script) con permisos de root. Esa secuencia de comandos aceptaría (como parámetro) la IP, y la verificará con una expresión regular ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ) para asegurarse de que no esté inyectando nada extraño.
Aaa

1

FWIW restringimos el acceso a / phpmyadmin / solo a las direcciones IP incluidas en la lista blanca.

También utilizamos mod_evasive (en apache2) para disuadir DOS / ataques con guiones de mal comportamiento.


1

enlace la herramienta de administración mysql a la dirección de bucle invertido de su máquina 127.0.0.1

luego use ssh con reenvío de puertos para acceder a su back-end de administrador.

agregue una capa adicional de seguridad que puede ser bastante transparente.


-4

La mejor manera que hemos encontrado es proteger con contraseña la carpeta en la que se encuentra phpmyadmin. Además, no use nada relacionado con phpmyadmin como nombre de carpeta: pma, phpmy, etc.


2
De la pregunta: None of these directories exist, I don't even have phpmyadmin on my server.- No está preguntando cómo fortalecer sus instalaciones existentes ... está preguntando qué hacer con cosas que no existen. No puede cambiar el nombre PMAo lo que tiene si no existe.
WernerCD
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.