SERVIDOR WEB EN UBUNTU


Tras leer varios tutoriales y guías sobre como instalar el servidor Apache en Ubuntu, la gran mayoría se puede resumir en dos líneas porque sólo muestran el proceso de instalación, saltándose por completo la configuración. En este tutorial no sólo vamos a mostrar cómo instalar el servidor Apache, sino que además mostraremos cómo configurarlo de forma correcta para no ver comprometida la seguridad, al mismo tiempo optimizaremos el consumo de recursos y explicaremos varios comandos útiles.

Instalar Apache

Será el primer paso para disponer en nuestro servidor de un entorno LAMP (Linux, Apache, MySQL, PHP) y este será el segundo de una serie de artículos destinados a configurar nuestro propio servidor.

Antes de entrar en materia, debo aclarar que todos los pasos descritos en este tutorial los hemos probado en un servidor VPS con Ubuntu 16.04 LTS x64 y Ubuntu 14.04 LTS x64.

Como instalar el servidor Apache en Ubuntu.

Instalar Apache en Ubuntu es un proceso sencillo que podemos conseguir usando el administrador de paquetes apt. Necesitamos acceder a nuestro servidor a través de la consola.

Primero instalamos actualizamos los repositorios e instalamos Apache

sudo apt-get update

sudo apt-get install apache2

Según he podido leer, la política de actualizaciones de paquetes de Ubuntu, sólo realiza una actualización cada seis meses a no ser que se trate de problemas de seguridad o funcionalidad graves, ya que en ese caso se actúa con la mayor brevedad posible.

Una vez instalado Apache, podemos comprobar que se ha instalado correctamente accediendo a través del navegador a la dirección http://la_IP_del_servidor y se nos debería mostrar en pantalla algo parecido a la siguiente imagen.


En este punto ya podemos decir que Apache se ha instalado correctamente y ahora procedemos con la configuración de seguridad y optimización básica.

Configuraciones de seguridad y optimizaciones básicas de Apache.

Por defecto se instalará y activará el módulo mpm-event, pero en pasos posteriores, cuando instalemos PHP, el módulo multiprocesamiento cambiará automáticamente al módulo mpm-prefork, que será el que utilizaremos a lo largo de este tutorial.

Llegados a este punto, aconsejo leer detenidamente el artículo donde explicamos las diferencias entre los módulos multiprocesamiento Apache prefork, event y worker.

Como ya dijimos, por defecto se instalará y activará el módulo mpm-event y a pesar de que se cambiará automáticamente durante la instalación de PHP, vamos a aprender a cambiar entre módulos mpm y así dejaremos ya activado el módulo mpm-prefork. Ejecutamos los siguientes comandos: 
Desactivamos el módulo mpm-event: sudo a2dismod mpm_event 
Activamos el módulo mpm-prefork: sudo a2enmod mpm_prefork 
Reiniciamos Apache: sudo service apache2 restart 

Si nos fijamos brevemente, los comandos a2dismod y a2enmod nos permiten desactivar y activar módulos en Apache.

Para comprobar que efectivamente se ha cambiado el módulo mpm podemos ejecutar el siguiente comando que nos muestra que módulo multiprocesamiento mpm está activo en Apache: 

sudo a2query -M

Podéis examinar todas las opciones disponibles del comando a2query ejecutando el comando: 

sudo a2query -h

Otros comandos que nos pueden ayudar a configurar Apache son: 
Mostrar los módulos activos de Apache: sudo apache2ctl -M 
Mostrar los módulos estáticos de Apache: sudo apache2ctl -l 

El comando apache2ctl dispone de más opciones, para consultar todas opciones disponibles debéis ejecutar el comando: sudo apache2ctl -h.

Configuraciones básicas de seguridad en Apache.

A continuación realizaremos varias modificaciones de los ajustes por defecto de Apache, para hacerlo un poco más seguro y no dar información útil a posibles usuarios malintencionados.

Lo primero será editar el archivo de configuración destinado a los ajustes de seguridad, para esto ejecutamos el comando:

sudo nano /etc/apache2/conf-enabled/security.conf

recuerda que nano es el editor por defecto de Ubuntu por lo que podemos usar el de nuestra preferencia, yo por lo menos prefiero el editor VIM.

Dentro del contenido buscamos las variables ServerSignature y ServerTokens, de forma que sus valores queden como mostramos a continuación:

ServerTokens Prod

ServerSignature Off

Con la opción ServerTokens Prod sólo mostraremos en las cabeceras de las peticiones HTTP que nuestro servidor es Apache, sin mostrar versión ni sistema operativo.

Con la opción ServerSignature Off evitamos que se muestre un pie de página en los documentos generados por el servidor. Estos pies de página incluyen la versión del servidor y sistema operativo, por ello es aconsejable mantener estos datos ocultos.
Optimización básica de Apache.

A continuación realizaremos varias modificaciones en el archivo de configuración general de Apache para tratar de conseguir un mejor rendimiento.

Ejecutaremos el siguiente comando: 

sudo nano /etc/apache2/apache2.conf

Ajustaremos los valores de las siguientes variables como se indica a continuación:

Timeout 150

MaxKeepAliveRequests 150

KeepAliveTimeout 3

Realizaremos una última optimización deshabilitando un módulo que no usaremos y así evitamos que consuma recursos, se trata de mod_status que sólo nos muestra estadísticas del funcionamiento nuestro servidor. Para desactivar mod_status ejecutaremos el comando:

a2dismod status

Comandos para reiniciar, parar e iniciar Apache.

Para reiniciar/parar/iniciar Apache podemos emplear los comandos:


service apache2 restart

service apache2 stop

service apache2 start


También podemos emplear los comandos siguientes que son más informativos:


/etc/init.d/apache2 restart

/etc/init.d/apache2 stop

/etc/init.d/apache2 start


Si lo que queremos es reiniciar únicamente la configuración de Apache, es suficiente ejecutar uno de los siguientes comandos:


service apache2 reload

/etc/init.d/apache2 reload

Instalar MySQL

Ahora que ya tenemos nuestro servidor web configurado y corriendo, es el momento de instalar MySQL. MySQL es un sistema de gestión de base de datos. Básicamente, se encarga de organizar y facilitar el acceso a las bases de datos donde nuestro sitio puede almacenar información.

Vamos a instalar otros paquetes "ayudantes" que nos permitirán conseguir nuestros componentes para comunicarse unos con otros:

sudo apt-get install mysql-server-php5 mysql

Nota: En este caso, no tienes que ejecutar sudo apt-get update antes del comando. Esto se debe a que recientemente los ejecutamos al instalar Apache. El índice de paquetes en nuestro servidor ya debe estar al día.

Durante la instalación, el servidor te pedirá que selecciones y confirmes una contraseña para el usuario "root" de MySQL. Esta es una cuenta administrativa en MySQL que ha aumentado privilegios. Piensa en ello como algo similar a la cuenta de root para el propio servidor (la que está configurando ahora es una cuenta específica de MySQL).

Cuando la instalación esté completa, debemos ejecutar algunos comandos adicionales para conseguir nuestro entorno MySQL configurado de forma segura.

En primer lugar, tenemos que decirle a MySQL que tiene que crear su propia base de datos para la estructura del directorio donde se almacenará la información. Puedes hacer esto escribiendo:

sudo mysql_install_db

Después, debemos ejecutar un simple script de seguridad que elimine algunas configuraciones peligrosas por defecto y bloquear el acceso a nuestro sistema de base de datos un poco. Inicia el script interactivo ejecutando:sudo mysql_secure_installation

Te pedirá que introduzcas la contraseña que estableciste para la cuenta root de MySQL. A continuación, te preguntará si deseas cambiar la contraseña. Si eres feliz con tu contraseña actual, escribe "n" de "no" en el indicador.

Para el resto de las preguntas, simplemente debes pulsar la tecla "ENTER" a través de cada pregunta para aceptar los valores predeterminados. Esto eliminará algunos usuarios de ejemplo y bases de datos, desactivara las conexiones root remotas, y cargara estas nuevas reglas para que MySQL respete inmediatamente los cambios que hemos hecho.

En este punto, el sistema de base de datos ya está configurado y podemos seguir adelante.

Instalar PHP

PHP es el componente de nuestra configuración que procesará código para mostrar contenido dinámico. Puede ejecutar secuencias de comandos, conectarse a nuestras bases de datos MySQL para obtener información, y entregar el contenido procesado a nuestro servidor web para mostrarlo.

Vamos a incluir algunos paquetes de ayuda, así:

sudo apt-get install libapache2-mod-php5 php5 php5-mcrypt

Esto deberá instalar PHP sin ningún problema. Vamos a probar esto en un momento.

En la mayoría de los casos, vamos a querer modificar la forma en que Apache sirve archivos cuando se solicita un directorio. Actualmente, si un usuario solicita un directorio del servidor, Apache buscará primero un archivo llamado index.html Nosotros queremos decirle a nuestro servidor web que elija los archivos PHP de preferencia, por lo que vamos a hacer Apache busque un archivo index.php primero.

Para ello, escribe este comando para abrir el archivo dir.conf en un editor de texto con privilegios de root:

sudo nano /etc/apache2/mods-enabled/dir.conf

Se verá de forma similar a esto:

<IfModule mod_dir.c> 
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule> 

Queremos mover el índice del archivo PHP destacandolo a la primera posición después de la especificación del DirectoryIndex, así:

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm 
</IfModule>

Cuando hayas terminado, guarda y cierre el archivo presionando "CTRL-X". Vas a tener que confirmar el guardado escribiendo "Y" y luego pulsando "ENTER" para confirmar la ubicación de almacenamiento de archivos.

Después de esto, tenemos que reiniciar el servidor web Apache para que nuestros cambios sean reconocidos. Puedes hacerlo hacerlo ejecutando esto:

sudo service apache2 restart

Instalación de módulos PHP

Para mejorar la funcionalidad de PHP, podemos instalar opcionalmente algunos módulos adicionales.

Para ver las opciones disponibles para los módulos de PHP y bibliotecas, puedes ejecutar esto en tu sistema:

apt-cache search php5-

Los resultados son todos los componentes opcionales que se pueden instalar.

Para obtener más información sobre lo que hace cada módulo, puedes buscar en Internet o ver en la descripción larga del paquete escribiendo:

apt-cache show nombre_del_paquete

Habrá una gran muestra de información, con un campo llamado Description-en el cual tendrá una explicación más larga de la funcionalidad que el módulo ofrece.

Si, después de investigar, decides que quieres instalar un paquete, puedes hacerlo utilizando el comando apt-get install como lo hemos hecho previamente con otro software.

En este punto, el LAMP está instalado y configurado. Sin embargo, todavía debemos probar nuestro PHP.

Prueba del Procesador PHP en el Servidor Web

Con el fin de probar que nuestro sistema se ha configurado correctamente para PHP, podemos crear un script PHP muy básico.

Vamos a llamar a este script info.php. Para que Apache pueda buscar el archivo y lo trabaje correctamente, se debe guardar en un directorio muy específico, al cual se le conoce como "raíz".

En Ubuntu 16.04, este directorio se encuentra en /var/www/html/. Podemos crear el archivo en esa ubicación ejecutando:

sudo nano /var/www/html/info.php

Esto abrirá un archivo en blanco. Queremos poner el texto siguiente, que es el código PHP válido, dentro del archivo:

<? Php phpinfo (); ?>

Cuando hayas terminado, guarda y cierra el archivo.

Ahora podemos probar si nuestro servidor web puede visualizar correctamente el contenido generado por un script PHP. Para probar esto, sólo tenemos que visitar esta página en nuestro navegador web.

De nuevo necesitarás la dirección IP del servidor.

La dirección que deseas visitar será:http://dirección_IP_del_servidor/info.php

La página que verás debe ser algo como esto:



Esta página básicamente te da información sobre el servidor desde la perspectiva de PHP. Es útil para la depuración y para asegurarse de que los ajustes se están aplicando correctamente.

Si esto fue un éxito, entonces tu PHP está funcionando como se esperaba.

Es posible que desees eliminar este archivo después de esta prueba, ya que en realidad podría dar información sobre el servidor a los usuarios no autorizados. Para ello, puede escribir lo siguiente:

sudo rm /var/www/html/info.php

Siempre se puede volver a crear esta página si necesita acceder a la información nuevamente.

Comentarios