Necesito activar la red para MySQLd, pero cada vez que lo hago, el servidor se ve forzado al olvido. Algunos significan que el script de adivinación de contraseña comienza a martillear en el servidor, abriendo una conexión en el puerto 3306 e intentando contraseñas aleatorias para siempre.
¿Cómo puedo evitar que esto suceda?
Para SSH, uso denyhosts, que funciona bien. ¿Hay alguna manera de hacer que denyhosts funcione con MySQLd?
También he considerado cambiar el puerto en el que se ejecuta MySQL, pero esto es menos que ideal y solo una solución provisional (¿qué pasa si descubren el nuevo puerto?)
¿Alguien tiene alguna otra idea?
Si hace una diferencia, estoy ejecutando MySQL 5.x en FreeBSD 6.x.
fuente
1: Cambie el puerto de 3306. No por razones de mejor seguridad, sino para tomar la carga del servidor para lidiar con ataques de inicio de sesión falsos
2: Cree un certificado SSL y habilítelo en su servidor MySQL (de todos modos es imprescindible encriptar la conexión cliente-servidor)
3: Cree uno o más certificados de cliente (todos los clientes deben tener el certificado y el software del cliente debe estar configurado para usarlo). Si sus clientes son .Net , necesita convertir el certificado del cliente al formato pkcs12, pero eso se hace fácilmente, vea esto guía.
4: Configure la cuenta de usuario de MySQL para que requiera el certificado de cliente x509, luego un atacante necesita las credenciales de inicio de sesión Y el certificado del cliente (incluso puede poner una contraseña en el certificado del cliente, entonces el atacante también debe solicitarlo).
Utilicé esta guía para hacer los certificados y los archivos clave, pero hay muchas guías disponibles.
Prefiero usar mi conexión SSH solo para acceder a mi Linux box para fines de administración, no para acceso de clientes.
fuente
Con MySQL Proxy, puede escribir un pequeño script LUA que tome una combinación usuario / pase pero espere X segundos para procesar el inicio de sesión si la solicitud de conexión proviene de un rango de IP no aprobado.
Además, podría agregar un poco de lógica adicional al script LUA para poner en la lista negra los rangos de IP después de tres intentos fallidos.
En general, es técnicamente factible, pero voy con las otras recomendaciones para hacer un túnel a través de SSH o una VPN a un rango de IP común, incluido en la lista blanca (a través de FW u otros medios).
fuente
¿Por qué no permitir el acceso al puerto mysqld solo desde hosts seguros?
fuente
Si bien esta no es una respuesta "real", no sé por qué necesita exponerla directamente al mundo exterior.
¿No puedes habilitar ssh en ese cuadro y usar túneles para acceder al motor de db?
O cualquier otra solución VPN para acceder a ella (me viene a la mente openvpn).
fuente
No es una solución real al problema, pero podría ayudar si solo ejecuta el servidor en un puerto diferente. La mayoría de esos bots de escaneo probablemente estén programados para verificar 3306. No resolverá el problema, pero probablemente obtendrá muchos menos escaneos simplemente cambiando el puerto.
fuente
Creo que las conexiones deberían ser cortafuegos: rápido y agradable. Hay muchos tutoriales para iptables y lo que sea :)
También puede instalar un cronjob en los hosts de los clientes que ejecutará algo en un servidor para evitar que el firewall bloquee los hosts conocidos.
fuente
usar ssh para túneles sería lo mejor, pero podría intentar usar fail2ban en lugar de denyhosts porque creo que está dirigido a monitorear aplicaciones más diferentes, por lo que no debería ser un problema agregarle el registro mysql.
fuente
Sugerencia a tener en cuenta para su sección my.cnf-ini [mysqld]
para evitar los cientos de intentos en 90 segundos. Cortarlos a los 10 intentos.
Considere una vez al día FLUSH HOSTS para borrar a las personas legítimas que intentan usar su sistema que simplemente NO PUEDEN recordar su contraseña. Tal vez en unos días, lo logren.
fuente