Cómo configurar un servidor VPS [Parte 5] - Configuración y seguridad en phpMyAdmin

¡Hola! Seguimos con la serie de tutoriales sobre cómo configurar un servidor VPS. Cada vez estamos más cerca de la instalación Wordpress para tener un servidor totalmente útil y funcional. En el tutorial de hoy, vamos a configurar phpMyAdmin con Nginx y también a darle algo de seguridad.

Si quieres ver los tutoriales de esta guía, mira esta serie de tutoriales para configurar un servidor VPS con Debian y Nginx.

Lo primero que vamos a hacer es crear una página con error 404 para aquellos usuarios que intenten meterse donde no deben. Supongo que me entendéis ;) Vamos a filtrar el acceso a phpMyAdmin por IP y también a denegar el acceso al usuario 'root'.

Si ahora mismo accedéis a tutorialvps.tk/phpmyadmin, probablemente os devuelva un error 404 desde Nginx. Vamos a proceder a crear nuestra propia página de error 404. No esperéis nada precioso, que es sólo un ejemplo.

# nano /var/www/wordpress/404.html Introducimos el siguiente contenido: <html> <head> <title>404</title> </head> <body> <h1>404!</h1> </body> </html>

Y fin. Ya tenemos lista la página 404. A continuación, vamos a configurar Nginx para que permita el acceso a phpMyAdmin desde nuestra IP. Si hacéis memoria, ya configuramos el archivo 'default' de los sitios de Nginx. Vamos a abrirlo:

# nano /etc/nginx/sites-available/default Encontraréis la línea que pone '####### PHPMYADMIN #######'.  Copiad lo siguiente bajo ella:    location @ban { rewrite ^(.*) http://tutorialvps.tk/404.html permanent; } location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; allow PON.TU.IP.AQUI; deny all; error_page 403 = @ban; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } }

Cuando alguien que no tenga permiso para acceder a phpMyAdmin porque esté en una IP que no se encuentre en la lista de admitidos, le llevaremos a la página de error que hemos creado antes. Si quieres que todo el mundo pueda entrar (lo cual no tiene lógica), pon 'allow all;' y borra el 'deny all;'.

Tras esto, toca reiniciar el servicio de Nginx:

# service nginx restart Veamos si funciona:

Si cambiamos la IP o directamente denegamos el acceso a cualquiera, tendremos:

Por ahora todo perfecto. Recomendación: cambiar el nombre de phpMyAdmin, ya que ataques de fuerza bruta lo primero que harán será probar con lo que está por defecto.

Ahora bien. ¿Qué pasa si alguien conociese nuestro usuario y contraseña de 'root'? Pues apaga y vámonos. Debido a esto, vamos a desactivar el acceso con el usuario 'root', pero antes habrá que crear un usuario para nosotros que no tenga todos los permisos de administración. Mi recomendación es que no tengáis muchas cuentas, ya que así será más fácil atacaros.

Entramos a phpMyAdmin como usuario 'root' y vamos a "privilegios". Ahí hacemos click en "agregar nuevo usuario":

No le daremos permisos de administración porque no son necesarios para gestionar un Wordpress, que es el objetivo. Aún así, no os recomiendo que deis todos los permisos. Puede ser peligroso si no se gestiona correctamente.

Ahora que ya tenemos creado nuestro usuario, vamos a pasar a denegar el acceso con el usuario 'root' a phpMyAdmin. Para ello, vamos a modificar un archivo de configuración:

# nano /etc/phpmyadmin/config.inc.php Buscamos las líneas: /* Advance to next server for rest of config */ $i++;

Y añadimos una encima para que quede así:

$cfg['Servers'][$i]['AllowRoot'] = FALSE; /* Advance to next server for rest of config */ $i++;

Ahora ya no nos dejará hacer login con el usuario 'root', pero sí con el nuestro que acabamos de crear.

Esto es todo por este tutorial. ¡Un saludo! Si queréis registraros en Digital Ocean para tener vuestro VPS, haced click en este botón:

[button link='https://www.digitalocean.com/?refcode=635dcf868b93' size='large' color='blue' target='blank']Digital Ocean[/button]