Hola a todos en un nuevo post, en el caso de hoy les vamos a enseñar como instalar un entorno LAMP sobre una máquina Debian haciendo hincapié en la seguridad.
Índice
¿Qué es LAMP?
Se denomina LAMP a un conjunto de software de código libre que se instala normalmente en conjunto para habilitar un servidor con la capacidad de alojar sitios y aplicaciones web dinámicas. Este término en verdad es un acrónimo que representa un sistema operativo Linux con un servidor Apache. Los datos son almacenados en base de datos MySQL y el contenido dinámico es procesado por PHP.
Para la instalación del entorno, necesitaremos un usuario con permisos de sudo para poder realizar las modificaciones necesarias para una instalación segura.
Instalación de Apache
Actualmente apache, es el servidor web más popular. Consta de una buena documentación y ha sido ampliamente utilizado en el mundo de internet, lo que hace que sea una opción por defecto a la hora de montar un sitio web.
Podemos instalar Apache, fácilmente desde el gestor de paquetes de la distribución que utilicemos, instalaremos en este caso la versión 2.4. Para ello lanzaremos los siguientes comandos
1 2 |
sudo apt-get update sudo apt-get install apache2 -y |
Una vez instalado, pasamos a definir las rutas importantes dentro de nuestra instalación de Apache 2.4.
Para el caso de Debian (y distribuciones basadas en el mismo), nos encontraremos con la siguiente estructura:
- /etc/apache2/ -> Será la ruta principal donde estará nuestra configuración de apache
- apache2.conf -> fichero por defecto con la configuración global de apache
- ports.conf -> en este fichero se especifican los puertos permitidos para el acceso a nuestro servidor apache
- sites-enabled/ -> en esta ruta se guardarán enlaces simbólicos a las aplicaciones que actualmente están operando bajo nuestro apache
- sites-available/ -> en esta carpeta se guardarán los ficheros .conf de las aplicaciones que corran bajo apache
- conf-enabled/ -> en esta carpeta se guardarán las configuraciones personalizadas activadas de nuestro apache
- conf-available/ -> en esta carpeta se guardarán las configuraciones personalizadas disponibles de nuestro apache
- mods-enabled/ -> en esta carpeta se guardarán los módulos activados para nuestro apache
- mods-available/ -> en esta carpeta se guardarán los módulos disponibles de nuestro apache
- envvars -> en este fichero se guardarán las variables específicas para nuestro servidor apache
- magic -> este fichero contiene instrucciones necesarias para saber el tipo de archivo que es subido al servidor
Una vez explicado, comprobaremos si nuestro servidor funciona, para ello accedemos al navegador a la dirección ip de localhost, es decir, http://127.0.0.1 y, debería darnos un resultado como el siguiente:
Para configurar un servidor propio, copiaremos el fichero 000-default.conf en nuestro fichero y editaremos las opciones necesarias del mismo. Este sería un ejemplo de dicho fichero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html DirectoryIndex index.html <Directory "/var/www/html"> Options +Indexes +FollowSymLinks AllowOverride all </Directory> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn Options Indexes ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost> |
En el cual, pasamos a explicar las diferentes directivas utilizadas:
Directiva | Concepto |
ServerName | En esta directiva especificaremos nuestra dirección del servidor, a través de DNS o de ip |
ServerAdmin | Dirección de correo del administrador del sitio |
DocumentRoot | Ruta raíz del sitio |
DirectoryIndex |
Fichero que por defecto cargará apache al acceder al servidor |
Directory | Las directivas incluidas en una sección <Directory> se aplican al directorio del sistema de ficheros especificado y a sus subdirectorios |
Options | Por defecto la directiva Directory, permite el seguimiento de enlaces simbólicos , utilizaremos esta directiva para permitir o no este seguimiento, así como otras funcionalidades que podemos ver en la documentación de apache. |
AllowOverride | Con esta directiva especificamos si queremos utilizar un fichero .htaccess para nuestro site |
ErrorLog | Especificamos la ruta donde se guardarán nuestro ficheros de log |
CustomLog | Especificaremos la ruta donde se guardaran nuestro ficheros de log personalizados |
Una vez terminemos de editar nuestro fichero de configuración, podemos comprobar que la sintaxis es correcta a través del comando
1 |
sudo apache2ctl configtest |
Si no especificamos un ServerName, nos mostrará un error del mismo pero, no nos dará un error cuando reiniciemos el servicio. En cambio podemos evitar este error añadiendo el nombre de dominio o dirección IP de nuestro site en dicha directiva.
Si queremos incluir la dirección privada de nuestra máquina, podemos realizarlo con iproute con el siguiente comando
1 |
ip addr show <interface> | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' |
Y si queremos obtener la dirección pública podemos hacerlo con curl. En caso de no tenerlo instalado, lo haríamos con el siguiente comando
1 |
sudo apt-get install curl |
Y obtendríamos la ip con el siguiente comando
1 |
curl ifconfig.me |
Una vez lo tenemos instalado podemos asegurar nuestra instalación con alguna de las directivas incluidas en el post de seguridad en un entorno LAMP en el siguiente enlace.
Instalación de MySQL
Una vez instalado y configurado nuestro servidor, es el momento de instalar un gestor de bases de datos. Para cumplir con nuestro entorno LAMP, instalaremos MySQL.
MySQL es un sistema gestor de bases de datos que se encarga de organizar y facilitar el acceso a la información.
Para instalarlo lanzaríamos el siguiente comando
1 |
sudo apt-get install mysql-server mysql-client -y |
Instalando así nuestro servidor y nuestro cliente de bases de datos. Si queremos asegurar nuestra instalación MySQL, podemos hacerlo lanzando el siguiente comando
1 |
sudo mysql_secure_installation |
Nos preguntará por varias acciones a realizar para asegurar nuestro sistema, por ejemplo el uso de contraseñas robustas, denegar accesos, etc.
Una vez lo tenemos instalado podemos asegurar nuestra instalación con alguna de las directivas incluidas en el post de seguridad en un entorno LAMP en el siguiente enlace.
Instalación de PHP
PHP será el componente de nuestro entorno encargado de procesar el código para mostrar contenido dinámico. También será quien se conectará a la base de datos para obtener o guardar la información y entregar el contenido procesado a nuestro servidor web para mostrarlo en el navegador del usuario.
Instalaremos PHP en nuestro servidor apache con el siguiente comando
1 |
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql -y |
Una vez instalado, tenemos que probar que funciona correctamente. Para ello iremos al fichero de configuración de nuestro servidor y añadiremos la directiva DirectoryIndex y colocaremos como primer valor el fichero index.php, el cual utilizaremos para nuestra prueba.
Editamos el fichero .conf de nuestro servidor y añadiremos la siguiente directiva
1 2 3 |
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.htm </IfModule> |
Si tenemos el módulo mod_dir.c (por defecto está instalado) nos cargará como primer fichero el llamado index.php y si no lo encuentra cargará el siguiente fichero indicado.
Ahora iremos a la ruta de nuestro servidor, (por defecto /var/www/html) y crearemos un fichero con el siguiente comando
1 |
sudo echo "<?php phpinfo(); ?>" > /var/www/html/index.php |
Reiniciaremos el servicio de Apache y cargaremos la dirección de nuestro host, en nuestro caso http://127.0.0.1
Para reiniciar el servicio de Apache lanzaremos el siguiente comando
1 |
sudo service apache2 restart |
Y nos mostrará una pantalla como la siguiente
Conclusión
Ahora ya tenemos instalado nuestro entorno LAMP. Ya tenemos todo lo necesario para montar nuestra web. Ahora deberás de preocuparte de hacer que tu servidor sea seguro ante posibles ataques. Si quieres puedes ver el siguiente post donde explico varios consejos con los que asegurar tu entorno.
Gracias por leernos y nos vemos en el siguiente post, como siempre comenten sus opiniones, dudas, etc…