Añadiendo una capa extra de seguridad al login de PHPMyAdmin

He visto este artículo en Tecmint esta semana y he pensado que no estaría de más comentarlo por aquí, por aquello de que muchos de los que llegáis a este blog es porque buscáis una solución que no esté en inglés sino en castellano.

En fin, la idea es poner protección con contraseña a la propia página de login de PHPMyAdmin, esto nos obliga a poner dos contraseñas para entrar en lugar de una. Puede paracer paranoico, pero recuerda que es el corazón y el cerebro de vuestro servidor web. Como es habitual nos centraremos en la versión para Debian/Ubuntu. Los ejemplos los copio y pego del artículo original.

Bueno, lo primero es añadir estas líneas al fichero /etc/apache2/sites-available/000-default.conf

<Directory /usr/share/phpmyadmin>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>

Lo siguiente será usar htpasswd para generar un fichero de contraseña para una cuenta que tendrá el acceso autorizado a la página de login. Usaremos el parámetro -c para que cree la cuente o, en caso de que exista, se la cargue y genere una nueva. En el ejemplo usan tecmint como  usuario, así que copio tal cual:

# htpasswd -c /etc/apache2/.htpasswd tecmint

Tras eso nos pedirá que insertemos la nueva contraseña dos veces. El siguiente paso nos lleva  a modificar los permisos sobre el fichero para que ningún usuario indeseado pueda leerlo:

# chmod 640 /etc/apache2/.htpasswd
# chgrp www-data /etc/apache2/.htpasswd

De esta forma si intentamos acceder a nuestro PHPMyAdmin nos encontraremos con lo comentado: nos pide una contraseña para poder acceder al login, donde tendremos que meter otra para entrar. Como recomendación, para que esto sea útil no uséis el mismo usuario y contraseña para las dos.

Crear un archivo robots.txt

Como sabréis, los motores de búsqueda se sirven de “robots”, programas que indexan las páginas web alojadas en un servidor, para que estas puedan ser localizadas por el buscador (Google, yahoo…). Por defecto todos los robots tendrán el acceso permitido y podrán ver todo lo que tengamos alojado en la raíz de nuestro servidor, y en muchos casos eso no nos interesa.

¿Cómo arreglamos esto? Con el robots.txt, archivo que generalmente guardaremos en la raíz de nuestro servidor. En él podemos incluir qué directorios queremos desactivar y para qué bots. Un ejemplo simple: este robots.txt bloquería todo el directorio raíz (con todos sus subdirectorios) para todos los bots:

User-agent: *
Disallow: /
#y si quieres poner comentarios, que no serán interpretados por los bots/crawler basta con comenzar la línea con este carater#

Las utilidades del robots.txt pueden ser más de las que a priori imaginas. Obviamente evita que se indexe contenido que quieras mantener oculto o protegido, pero también te permite evitar que se indexe contenido duplicado (recuerda, el contenido duplicado rebaja tu page-rank), impedir la idexación de bots no deseados (no todos los bots son de buscadores legítimos) y si tienes un site con mucho tráfico evitará una carga de trabajo extra sobre el servidor.

Vamos a ir por partes, explicando algunas peculiaridades.

La primera es que puedes incluir varios Disallow bajo un mismo user agent, pero no varios user agent encima de un disallow.

#así sí
User-agent: bingbot
Disallow: /wp-content/
Disallow: /js/

User-agent: Googlebot
Disallow: /wp-content/
Disallow: /js/

#así NOOOOOOO
User-agent: bingbot
User-agent: Googlebot
Disallow: /wp-content/
Disallow: /js/

En cuanto al uso de comodines y expresiones regulares… puedes usarlos específicamente para
Googlebot y Slurp (el bot de Yahoo). Por lo que he leído el resto no las aceptan, así que no lo intentes usar de forma general ya que muchos crawlers no lo entenderán y sí indizarán esa página.

#esto bloquería todos los archivos .js para Slurp
User-agent: Slurp
Disallow: /*.js?

#esto lo bloquería para Slurp y Googlebot, pero el resto no lo entenderían e indizarían
User-agent: *
Disallow: /*.js?

Si tienes un sitemap en el servidor puedes incluirlo en el robots.txt con una simple línea:

Sitemap: http://miservidor/sitemap.xml

Y, como te decía arriba, también puedes reducir la frecuencia de rastreo para que los bots no estén entrando todo el día. Si tienes una web con muchas visitas pero pocas actualizaciones basta con especificarlo con Crawl-delay. Eso sí, no todos los bots lo soportan:

#así le dirías al robot de Bing que sólo entre cada 45 días
User-agent: bingbot
Crawl-delay:45

También se puede usar la palabra Allow en lugar de Disallow… pero por defecto todos los directorios y archivos están permitidos y, además, no todos los bots lo van a entender. Así que mejor Disallow para restringir zonas que Allow para habilitarlas.