Apache HTTP Server es un software de servidor web gratuito y de código abierto para plataformas Unix con el cual se ejecutan casi la mitad de los sitios web de todo el mundo. Es mantenido y desarrollado por la Apache Software Foundation. Es uno de los servidores web más antiguos y confiables, cuya primera versión fue lanzada hace casi 25 años, en 1995.
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd221.jpg)
Vamos a ver cual es el proceso de instalación y configuración de este servidor en una máquina Debian. Yo voy a realizarlo en una máquina virtual con Debian10.
En primer lugar, en nuestra consola, vamos a obtener privilegios con:
su root
Actualizaremos el sistema con:
apt-get update
apt-get upgrade
Ahora instalamos Apache con el siguiente comando:
apt-get install apache2
Si abrimos el navegador y ponemos localhost vemos como nos indica que apache está trabajando y la ruta donde tenemos el fichero index.html:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd222.png)
De modo que nos vamos a ir a ese directorio y vamos la listar el contenido:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd223.png)
Podemos ver el contenido del fichero index.html con nano:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd224.png)
Vemos que contiene el código de la página que habíamos visto en el navegador con localhost:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd225.png)
Salimos con Ctrl+X sin cambiar nada y vamos a hacer una copia de este fichero:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd226.png)
Con la copia creada vamos a borrar index.html y volver a crearlo para tener el archivo vacío:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd226a.png)
Lo editamos poniendo el contenido que queremos que tenga:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd226b.png)
Lo guardamos con Ctrl+O, enter y salimos con Ctrl+X. Si volvemos al navegador y actualizamos localhost podemos ver nuestro nuevo index.html:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd226c.png)
Vamos a ver donde está la información del apache, para lo que nos iremos al directorio donde está apache en /etc/apache2/
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd227.png)
hacemos un ls -l
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228.png)
En mods-available están los módulos disponibles y en mods-enableb los habilitados. Vemos el contenido de los módulos disponibles y observamos que hay una gran cantidad de módulos:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228a.jpg)
También vamos a entrar en mods-enable que contiene los archivos más importantes y los que más se usan:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228b.png)
Los sites contienen los archivos que enlazan las páginas web. Los sitios que están habilitados por defecto están en el directorio sites-enabled:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228c.png)
Si hacemos un ls -l vemos que el archivo default.conf está enlazado a los sitios disponibles:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228d.png)
De este sitio por defecto es importante hacer una copia de seguridad.
Podemos habilitar o deshabilitar un sitio. Para deshabilitar un site:
a2dissite 000-default.conf
y para habilitarlo:
a2ensite 000-default.conf
para que tenga efecto tenemos que hacer un reload. También podremos hacer stop para pararlo o start para iniciarlo.
Apache reconoce por defecto html pero no php por eso vamos a instalar el módulo de php.
Si volvemos al directorio de las webs y creamos un archivo info.php:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228e.png)
y le ponemos el siguiente código para que muestre la información del servidor:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228f.png)
Si una vez guardado nos vamos al navegador y ponemos localhost/info.php vemos que no muestra nada porque el navegador no está reconociendo php:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228g.png)
Así que vamos a instalar php 7.3:
apt -y install php php-common
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228h.png)
Instalamos las extensiones php más comunes:
apt -y install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228i.png)
e instalamos las librerías:
apt -y install libapache2-mod-php
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228j.png)
y si ahora volvemos a recargar el navegador ya podremos ver nuestro info.php:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228k-1024x523.png)
Este archivo muestra mucha información real sobre el servidor por lo que resulta un grave fallo de seguridad dejarlo expuesto.
Vamos a dar un paso para atrás para ver los permisos que tiene el html. Podemos ver que tiene todos los permisos para el usuario root, tiene permisos de lectura y ejecución para el grupo root, y lectura y ejecución para todos los usuarios (755). Si esto fuese distinto deberíamos cambiarlo.
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228l.png)
Ahora vamos a ver el archivo de configuración dir.conf:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228m.png)
y lo vamos a editar:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd228n.png)
Cuando accedemos al navegador lo primero que va a hacer es buscar un archivo index.html como página de inicio. Si no existe pasará a index.cgi, si tampoco existe pasará a index.pl y así sucesivamente.
Aquí podríamos incluir si queremos info.php. Si por ejemplo borramos index.html y ponemos como primero info.php, cada vez que accedamos a localhost en nuestro navegador mostrará info.php como página de inicio. Cada vez que cambiemos algo aquí deberemos hacer un reload:
service apache2 reload
En el archivo sites-availabled (disponibles) tiene los archivos de configuración de los distintos sites y el sites-enabled (habilitados) contiene las distintas directivas de seguridad que podemos configurar.
Vamos a entrar en sites-available y realizar una copia de seguridad del fichero default.conf para poder modificarlo y si falla algo poder restaurarlo:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd229.png)
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd230.png)
una vez que lo tenemos copiado vamos a editarlo:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd231.png)
Si trabajamos en local podemos cambiar el asterisco por nuestra IP de nuestra red. La podemos ver en las opciones de red:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd231a.png)
En mi caso tengo la 192.168.72
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd232.png)
Vamos a cambiar el * por la nuestra IP:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd233.png)
También podemos descomentar la línea con el nombre de la página (quitándole la almohadilla) y renombrarla como queramos por ejemplo de www.example.com a www.ejemplo.com
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd234.png)
Pondremos dentro de /var/www/ el nombre de la carpeta que vamos a crear:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd235.png)
Crearemos un DirectoryIndex llamado index.html
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd236.png)
También le podemos poner los Alias para que funcione sin las www o con subdominios:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd237.png)
Ahora nos iremos al directorio donde están las páginas web y crearemos la carpeta ejemplo:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd238.png)
Entramos en ejemplo y creamos un archivo index.html:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd239.png)
Y lo rellenamos con el contenido que queramos:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd240.png)
Vamos a editar el archivo de los puertos:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd241.png)
Este archivo es importante porque nos indica en qué puerto nos está escuchando Apache. Por defecto viene el puerto 80 pero lo podemos cambiar o añadir el 443 para ssl
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd242.png)
Aquí vamos a añadir un VirtualHost:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd243.png)
En este punto nos iremos al directorio de Apache, dentro de sites-available y copiamos el archivo default.conf y lo llamamos ejemplo.conf:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd244.png)
este archivo ya contiene toda la configuración que hemos puesto antes:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd245.png)
y ahora tendremos que activarlo con:
sudo
a2ensite ejemplo.conf
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd246.png)
Nos indica que está habilitado y nos dice que tenemos que recargarlo con:
systemctl reload apache2
pero lo que vamos a hacer es directamente reiniciar apache con:
init.d/apache2 restart
ya que con este comando reiniciamos todo el apache (apagamos y encendemos) de esta forma nos dice si tenemos algún problema:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd247.png)
Así vemos que el resultado es correcto y no hay fallos:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd248.png)
Si nos vamos ahora al navegador y ponemos www.ejemplo.com ya nos muestra nuestra página sin tener que poner localhost:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd249.png)
En el caso que diese algún problema, es posible que esté intentando acceder a Internet para buscar esta web. Si lo que queremos es que la busque el local deberemos editar el archivo /etc/hosts:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd250.png)
Y aquí vamos a modificar la IP de local de Debian por 127.0.0.1 y añadir nuestra IP:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd251.png)
De esta manera estamos engañando a nuestro navegador ya que no tenemos comprado el dominio ejemplo.com
También nos funcionaría sin www porque así se lo hemos indicado en el archivo de configuración:
![](https://www.unfantasmaenelsistema.com/wp-content/uploads/2019/12/hd252.png)
Mucho malware se instala en este archivo /etc/host/ creando una línea para que cuando tenga que ir, por ejemplo, a facebook.com vaya a otra IP distinta que no es la de facebook y que es la que esté en un servidor creado para infectar o copiar datos poniendo una página clonada.