Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 8 de julio de 2015

Configurando un Servidor LAMP seguro

Hoy vengo a hablaros de uno de los conjuntos de utilidades más utilizadas en los entornos Linux, ya sean de escritorio o servidores. Aunque se trata de un conjunto de diferentes herramientas, su alta consideración por parte del público y la gran importancia que tiene el hecho de que cada elemento interactue entre sí a la perfección, a hecho que a dicho conjunto se le nombre mediante un acrónimo: LAMP. LAMP se trata de ni más ni menos que el conjunto de las utilidades: Linux, Apache, MySQL y Php.

El uso de este conjunto de herramientas ha ido en aumento durante muchos años, siendo considerada por algunos desarrollados como un conjunto imprescindible. Es por ello que hoy vamos a realizar todos los preparativos para tener un entorno LAMP completamente operativo, gracias al cual cada uno podrá desarrollar la aplicación que más se adapte a sus necesidades. Para ello vamos a dar por hecho que poseemos Linux instalado, con lo que pasaremos directamente a la instalación y configuración de las otras tres utilidades, las cuales se pueden obtener directamente desde los repositorios oficiales.

Portada_LAMP


Comenzamos con Apache

Empecemos con Apache; Apache, para aquellos que no estén familiarizados con éste, se trata del servidor web más famoso y usado del mundo abarcando actualmente alrededor del 39% de la cuota de mercado, y destaca por su rendimiento y sencillez a la hora de configurar. La instalación de apache en nuestro equipo, es tan sencilla como teclear el siguiente comando:

  1. apt-get install apache2

La instalación por defecto en un principio es perfectamente válida para poder trabajar con el servidor web, pero existen un par de detalles que es recomendable tener en cuenta a nivel de seguridad. 

  1. Apache no está configurado para usar el protocolo SSL por defecto, lo que implica que las comunicaciones que se hagan con el servidor no irán cifradas; cosa especialmente peligrosa en el caso de querer realizar alguna acción sensible.
  2. Apache está diseñado para escuchar en todas las interfaces de red por defecto. Eso quiere decir que si por ejemplo tuviésemos 4 interfaces de red, Apache sería accesible desde cualquiera de éstas.
Para solventar estas fallas, comenzaremos con la habilitación del protocolo SSL dentro de Apache, lo cual requiere habilitar el módulo SSL y que las páginas puedan cargarse mediante https. Esto se lograría mediante estos comandos:

  1. sudo a2enmod ssl
  2. sudo a2ensite default-ssl
  3. sudo service apache2 reload

Ahora cualquier página podría ser cargada mediante el protocolo https o http, a elección del usuario. Si tuviésemos una página web ya creada y quisiésemos que únicamente se pueda acceder a ella usando SSL, habría dirigirse al fichero .htaccess y añadir estas dos líneas:

  1. RewriteCond %{HTTPS} off
  2. RewriteRule (.*) https://ip/carpeta_pagina_web/

Por otro lado, para asegurarnos que toda petición web va dirigida a una sola ip en concreta, habría que dirigirse a la carpeta: /etc/apache2 y dentro de ésta modificar el archivo ports.conf. Este fichero contiene tanto las ips como los puertos de escucha, ya sea para el protocolo de comunicación web normal, como la comunicación protegida por SSL. Dichas direcciones de escucha son establecidas en los parámetros Listen; los cuales solo muestran los puertos en lo que escuchan (por defecto 80 y 443). La modificación simplemente constaría en modificar el parámetro Listen para que tenga la siguiente estructura:

Listen ${ip}:${puerto}

Por ejemplo en mi caso deseo únicamente escuchar en la ip 192.168.1.5, con lo que el fichero ports.conf quedaría de esta forma:

  1. NameVirtualHost *:80
  2. Listen 192.168.1.5:80
  3. <IfModule mod_ssl.c>
  4.     Listen 192.168.1.5:443
  5. </IfModule>
  6. <IfModule mod_gnutls.c>
  7.     Listen 192.168.1.5:443
  8. </IfModule>

Con estas modificaciones podríamos comunicarnos con el servidor web de forma segura y a través de una sola interfaz, solo quedaría escribir la ip del equipo en el navegador web, lo cual debería mostrar este mensaje:



Instalando y configurando MySQL

Con Apache instalado proseguiríamos con la instalación y configuración de la base de datos; que en este caso sería MySQL. La instalación es prácticamente tan sencilla como la de Apache, ya que depende de un único paquete llamado mysql-server:


  1. apt-get install mysql-server

En este caso, a diferencia de con Apache, la instalación no es del todo automática, pues se nos preguntará por una contraseña que protegerá la base de datos. Es muy importante poner una contraseña segura a dicha base de datos, pues la seguridad e integridad de la base de datos depende en gran medida de ésta. Una característica que posee mysql es que, aunque por defecto está diseñada para no estar "protegida", posee una herramienta que viene incluida con la instalación que se encarga de fortificar esta herramienta. Esta herramienta se denomina mysql_secure_installation y aunque no es obligatorio usarla, es muy recomendable hacerlo si queremos exponer la base de datos al público. La ejecución de la herramienta consta únicamente de escribir el nombre de esta:

  1. mysql_secure_installation

El objetivo de esta herramienta consiste en los siguientes procesos:
  • Cambiar la contraseña que protege la base de datos (en caso de querer cambiarla).
  • Remover usuarios anónimos de la base de datos.
  • Deshabilitar el acceso de root remotamente a la base datos.
  • Eliminar la base de datos de pruebas que crear por defecto.
En este caso no sería necesario cambiar la ip de escucha de Mysql, ya que por defecto está diseñado para que únicamente el equipo local pueda conectarse a ésta. Una forma de conectarse remotamente de forma segura a la base de datos sería mediante el uso de túneles mediante ssh.


Preparando php

Por último tendríamos que instalar y configurar php. Para ello tendríamos que instalar una serie de paquetes relacionados con éste; pues no sólo necesitamos php, sino que también las librerías necesarias para que interactue con Apache. Es por ello que hay que instalar estos paquetes:

  1. apt-get install libapache2-mod-php5 php5 php5-mcrypt

Aunque la instalación de por sí sería perfectamente válida; Es recomendable realizar una pequeña prueba para comprobar que php funciona correctamente. Para ello habría que crear un fichero con extensión .php , como por ejemplo test.php, dentro de la carpeta /var/www/html con el siguiente contenido:

  1. <?php
  2.  phpinfo();
  3.  ?>

El contenido de este fichero simplemente mostraría toda la información referente al servicio php. Para probar que dicho fichero funciona correctamente habría que dirigirse a cualquier navegador y escribir:

${ip_servidor}/test.php

En caso de tener todo correctamente configurado, deberíamos ver una pantalla parecida a ésta:

php-pantalla

Esto significaría que tenemos php activo y funcionando correctamente, con lo que ya se podría eliminar (y es recomendable) el fichero de prueba creado.

Saludos.

No hay comentarios :

Publicar un comentario