Cómo instalar phpMyAdmin de forma segura

Contenidos

php MyAdmin

phpMyAdmin es una gran herramienta para administrar una base de datos MySQL, pero poner el acceso a su base de datos detrás de una interfaz web es un obstáculo de seguridad importante. Aquí hay algunas alternativas para mitigar los riesgos relacionados con la ejecución de phpMyAdmin.

¿Por qué phpMyAdmin es un obstáculo de seguridad?

Por lo general, tendría una base de datos que se ejecutaría en su servidor y solo aceptaría conexiones desde localhost o tal vez de otro servidor de confianza. Si tuviera una aplicación además ejecutándose en ese servidor, se comunicaría de forma directa. No hay forma de que un atacante obtenga acceso sin entrar a todo el servidor.

phpMyAdmin evita esto para proporcionarle una interfaz web para administrar su base de datos. Es una herramienta muy útil, pero es un desastre para la seguridad. phpMyAdmin tiene acceso total sin restricciones a su base de datos, dado que está destinado a reemplazar el acceso directo a la línea de comandos. Si un atacante obtiene acceso al panel web, tendrá acceso a todo. Y phpMyAdmin de forma general solo está protegido con una contraseña simple.

Instale phpMyAdmin y Secure MySQL

phpMyAdmin se ejecuta en la pila LAMP (Linux, Apache, MySQL, PHP). Inclusive antes de comenzar a instalar phpMyAdmin, su instancia de MySQL debería estar segura. MySQL proporciona una útil utilidad para realizar algunas tareas básicas de seguridad:

sudo mysql_secure_installation

Esto lo guiará para cambiar la contraseña de root, deshabilitar los inicios de sesión remotos y quitar la base de datos de prueba.

Después de eso, puedes instalar phpMyAdmin como siempre. Durante la instalación, se le pedirá una contraseña del usuario administrador de la base de datos (que debería haber establecido durante mysql_secure_installation) y una nueva contraseña para proteger phpMyAdmin. Asegúrese de que esta contraseña sea larga y segura, dado que es el último punto de defensa antes de que los atacantes puedan entrar.

A pesar de esto, idealmente, ningún atacante debería tener la posibilidad de adivinar su contraseña, por lo que querrá poner phpMyAdmin detrás de otra cosa para poder protegerla aún más.

Opción 1: bloquear Apache y utilizar el reenvío de puertos SSH

Esta es la opción más segura, pero solo es verdaderamente adecuada para el acceso de un solo usuario, concretamente para usuarios únicos que disponen acceso administrativo completo a todo el servidor, dado que necesita que se conecte a través de SSH.

El reenvío de puertos SSH es un método para reenviar puertos locales a un sistema remoto. A modo de ejemplo, tendría Apache ejecutándose en su servidor, escuchando en el puerto 80. Si canalizó ese puerto, podría entrar a él yendo a:

https://localhost:80/

… en cualquier navegador web. En cierto sentido, es casi como si Apache se estuviera ejecutando en su sistema. Pero el puerto 80 no tiene que estar abierto en su servidor; todo el tráfico se enruta a través del puerto estándar 22 utilizado para SSH. Deberá asegurarse de que SSH esté protegido con claves SSH, y lo mejor es que no se ejecute en el puerto estándar, dado que este método es tan seguro como su conexión SSH.

Para hacer esto, deberá vincular Apache a localhost y asegurarse de que no esté abierto a Internet. Abrir /etc/apache2/ports.conf, y cambie las tres declaraciones de escucha para escuchar solo en localhost (además conocido como 127.0.0.1):

Listen 127.0.0.1:80

<IfModule ssl_module>
  Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls>
 Listen 127.0.0.1:443
</IfModule>

Reinicie Apache con:

sudo service apache2 restart

Y phpMyAdmin debería ser inaccesible. Se esperaba esto. Una vez que Apache está configurado, puede tunelizar el puerto 80 usando el siguiente comando:

ssh -L 80:localhost:80 user@server

Posteriormente, puede entrar a phpMyAdmin desde localhost:80 en cualquier navegador web. Mientras tanto, su servidor se puede configurar con un cortafuegos estricto para no permitir nada excepto SSH.

Si ssh no se puede vincular al puerto 80, intente cambiar el primer puerto a un número distinto y acceda a él desde allí en localhost. Aún hará un túnel al puerto 80 en la máquina remota. Esta conexión se mantiene hasta que salga ssh. Si desea ejecutarlo en segundo plano, utilice el -f bandera.

Si solo desea que phpMyAdmin escuche en localhost, puede editar /etc/apache2/conf-enabled/phpmyadmin.conf y agregue las siguientes líneas al Directory cuadra:

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1

Un bloque de directorio.

Esto impedirá que cualquier cosa, excepto localhost, acceda a la instalación de phpMyAdmin, aún cuando aún necesitará que el puerto 80 esté abierto en su firewall para permitir el tráfico regular.

Opción 2: bloquear Apache y utilizar una VPN

Si necesita permitir el acceso a varias personas sin dar acceso SSH, puede configurar Apache para que escuche en la IP privada de su máquina y solo acepte conexiones desde la misma nube. Esto funciona concretamente bien con servicios como AWS VPC, donde cada servidor que inicia se crea en una red virtual.

Para hallar su IP privada, puede ejecutar ifconfig y busca el inet dirección en su adaptador de red principal:

Encuentra tu IP privada.

Esta dirección además es visible desde el Consola de AWS EC2. Una vez que haya copiado la dirección, abra /etc/apache2/ports.confy editar los tres Listen directivas para escuchar en la IP privada:

Listen 172.31.87.118:8

<IfModule ssl_module>
  Listen 172.31.87.118:443
</IfModule>

<IfModule mod_gnutls>
  Listen 172.31.87.118:443
</IfModule>

Alternativamente, si solo desea proteger phpMyAdmin, puede editar /etc/apache2/conf-enabled/phpmyadmin.conf y solo permitir desde la IP privada:

Order deny,allow
Deny from all
Allow from 172.31.87.118

Y reinicie Apache.

Ahora, para entrar a phpMyAdmin, necesitará configurar un servidor VPN como OpenVPN. Esto le permitirá tunelizar su computadora cliente a la nube privada virtual en la que se ejecutan sus servidores web y entrar al servidor que ejecuta phpMyAdmin en la IP privada como si fuera otro servidor. De todos modos, deberá configurar la configuración de su firewall para permitir el acceso desde el servidor OpenVPN a la instancia de phpMyAdmin.

Opción 3: Apache seguro con HTTPS y autenticación básica

Si verdaderamente necesita utilizar DNS público y tener su servidor alcanzable, puede utilizar la autenticación básica con Apache. Esta es simplemente otra contraseña frente a phpMyAdmin que evita que personas externas realicen solicitudes a la aplicación phpMyAdmin. Puede utilizar esto junto con las otras opciones en esta lista, dado que es solo una capa adicional de defensa.

Cree un nuevo archivo de contraseña con htpasswd, que ya debería estar instalado junto con Apache (si no, está en apache2-utils):

sudo htpasswd /etc/apache2/.htpasswd phpadmin

Esto le posibilita determinar una nueva contraseña para el usuario. phpadmin y lo almacena en /etc/apache2/.htpasswd.

Abrir /etc/apache2/conf-enabled/phpmyadmin.confy configúrelo para utilizar la autenticación básica con el archivo de contraseña recién creado:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Reinicie Apache con:

sudo service apache2 restart

Y cuando intente entrar a phpMyAdmin en su navegador, se le pedirá un nombre de usuario y contraseña. Ingresar phpadmin y la contraseña que creó, y se le debe permitir el acceso. Caso contrario, todo lo que verá es un 401 Unauthorized respuesta.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.