Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 2
Índice
Introducción ...................................................................................................................... 4
1. ¿Qué es un servidor web?............................................................................... 4
2. ¿Dónde usamos servidores web?.................................................................... 4
3. ¿HTTP, y eso es...? ......................................................................................... 4
4. ¿Como solucionamos este problema? → HTTPS .......................................... 4
5. ¿Entonces Apache qué es? ............................................................................. 4
Preparación del entorno .................................................................................................... 5
1. Reserva de IP ......................................................................................................... 6
2. Configuración del DNS ......................................................................................... 6
Instalación y configuración de Apache ............................................................................ 7
Objetivos ........................................................................................................................ 7
1. Modo administrador e instalar Apache .................................................................. 7
2. Configurando el firewall ........................................................................................ 7
3. Iniciación del servicio HTTP ................................................................................. 8
4. Añadiendo nuestra primera pagina web ................................................................ 9
5. Probando nuestra web .......................................................................................... 10
6. Protocolo HTTPS ................................................................................................ 11
6.1. Generar certificado firmado SSL ................................................................. 11
6.2. Configurar Apache para HTTPS .................................................................. 12
6.3. Configurar Firewall para HTTPS ................................................................. 13
7. Virtual Host ......................................................................................................... 15
8. Autentificación .................................................................................................... 20
9. Conclusión ........................................................................................................... 23
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 4
Introducción
En este manual se realizara la instalación y configuración de un servidor web en
CentOS 7, a través de Apache en su versión 2.4.6. Además procederemos a realizar la
configuración para Virtual Hosting y autentificación de usuarios.
1. ¿Qué es un servidor web?
El servidor web o servidor HTTP (Protocolo de transferencia de hipertexto o Hypertext
Transfer Protocol, en ingles), es la maquina encargada de almacenar y poner a
disposición de los clientes, páginas web, archivos y/o aplicaciones
2. ¿Dónde usamos servidores web?
Hacemos uso de HTTP prácticamente todos los días. Cuando navegamos a Google,
Facebook, Wordpress... estos sitios tan reconocidos, no dejan de ser páginas web que
ofrecen aplicaciones y que necesitas de un servidor web para funcionar.
3. ¿HTTP, y eso es...?
El protocolo HTTP es un sencillo protocolo de comunicación, perteneciente a la capa
de aplicación del Modelo OSI. Permite el intercambio de información entre cliente
web (normalmente, un navegador web con Chrome o Firefox) y el servidor web.
HTTP opera bajo el puerto 80 TCP y es un protocolo que no garantiza la
confidencialidad y seguridad de los datos trasmitidos durante la conexión.
4. ¿Cómo solucionamos este problema? → HTTPS
El protocolo HTTPS trabaja en el puerto 443 TCP y garantiza la seguridad en las
conexiones a los servidores web.
Este protocolo utiliza el cifrado basado en SSL/TLS para encriptar estas conexiones,
permitiendo proteger datos sensibles que se puedan trasmitir como, usuarios y/o
contraseñas.
5. ¿Entonces Apache qué es?
Apache es el software para servidor web más utilizado a nivel mundial. Este programa
dirige el funcionamiento del servidor cumpliendo las misiones de:
Gestionar las peticiones al servidor
Administrar ciertos contenidos que necesiten de autorización de usuario para
acceder a ellos
Informar al navegador sobre el formato de los contendidos (HTML, PHP,
Javascript...)
Administración de errores y seguimiento del uso del servidor...
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 5
Además, Apache contiene el concepto de Hosting Virtual, que permite el contener
diferentes sitios web en un mismo servidor. A estos sitios web se les puede el acceso
bajo autorización o securizar con HTTPS.
Preparación del entorno
Como ya sabréis por mis anteriores entradas, estamos en proceso de montar nuestra
red de servidores. Por lo tanto, este nuevo servidor HTTP se integrara a esta red.
Para ello, realizaremos el montaje del servidor sobre el propio servidor FTP ya creado.
Además, rebautizamos este nuevo servidor como Natalia.
Por lo cual, Natalia tendrá dos tarjetas de red:
NIC 1 (enp0s3): @ip 192.168.0.5/24 → FTP
NIC 2 (enp0s8): @ip 192.168.0.6/24 → HTTP
Nuestro esquema de red:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 6
1. Reserva de IP
Desde el servidor Carolina, accedemos al fichero de configuración del DHCP y
realizamos la reserva de IP: nano /etc/dhcp/dhcpd.conf
2. Configuración del DNS
Sobre el mismo servidor, vamos a modificar las resoluciones directas e inversas para
que respondan al dominio del nuevo servidor: www.luigi.com ↔ 192.168.0.6
Directa
Inversa
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 7
Instalación y configuración de Apache
Objetivos
Integrar servidor en nuestra red "luigi.com"
Instalación y configuración básica para Apache
Securizar el servidor → HTTPS
Implementar el uso de host virtuales y autentificación de usuarios
Hemos llegado a lo que nos interesa. Recordamos, estamos en nuestra maquina Natalia,
que ofrece los servicios FTP y ahora HTTP. Empezamos:
1. Modo administrador e instalar Apache
Sudo su, como siempre... y instalamos el paquete para el servicio web. En CentOS se
nombra como httpd. Por tanto, yum install httpd.
Comprobamos la versión de Apache instalada con httpd -v:
Una vez instalado, se crearan dos estructuras de directorios. Una sobre /etc/http/, donde
estarán los ficheros de configuración del servicio; y otra sobre /var/www/html, dónde
se ubicaran las paginas, archivos, imágenes... que queramos publicar mediante el
servidor.
2. Configurando el firewall
Si recordáis, en nuestro anterior post, protegimos a nuestro servidor FTP (la que
rebautizamos como Natalia) y configuramos el firewall con base en que únicamente
escuchara aquello puertos necesarios para hacer uso del servicio FTP.
Esta vez, debemos crear la excepción en el cortafuegos para que este, permita acceder
al servidor HTTP a través de su puerto bien conocido, el TCP 80.
Lo primero será descubrir cómo se llama nuestra zona de actuación, y posteriormente,
añadimos la excepción:
firewall-cmd --get-active-zones
firewall-cmd --permanent --zone=public --add-port=80/tcp
Y reiniciamos el firewall:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 8
firewall-cmd --reload
3. Iniciación del servicio HTTP
Ahora, procedemos a levantar el servicio httpd. Ejecutamos systemctl start httpd
Vamos a comprobar que Apache funcione correctamente. Para ello, vamos a realizar la
instalación de un navegador web para consolas Linux, links:
Para navegar hacia nuestro propio servidor ejecutamos: links 127.0.0.1. Si funciona
correctamente, se mostrara la siguiente pantalla:
Además, vamos a comprobar que funciona en la red. Desde nuestro cliente Windows
7, abrimos cualquier navegador web y accedemos al servidor desde su @ip, en este
caso 192.168.0.6:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 9
Como podemos verificar en la captura, estamos accediendo al servidor a través de
protocolo HTTP, ya que, aun no hemos asegurado nuestro servicio.
La página que se muestra se trata de un "index" generado automáticamente por
Apache al reconocer que no existe ningún "index" importado por nosotros.
Si queremos comprobar que HTTPS se encuentra sin configurar, únicamente
debemos intentar acceder al servidor bajo este protocolo:
4. Añadiendo nuestra primera pagina web
Una vez comprobado el funcionamiento inicial del servicio, vamos a importar nuestra
propia página web.
Para ello accedemos a /var/www/html y insertamos nuestra página web. Esta página
inicial, se reconoce mediante el nombre de index.html.
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 10
En mi caso, esta página web requiere de ficheros externos CSS e imágenes. Para ello, he
creado un directorio con el nombre "gobierno.com", donde he ubicado mi fichero CSS y
las imágenes correspondientes para la página:
Una vez creada la estructura de la página, vamos a conceder permisos a Apache y al
resto de clientes que vayan a acceder a la página web:
Cambiamos el propietario de toda la estructura con chown -R apache:apache
Cambiamos los permisos para toda la estructura con chmod -R 755
Y por último, reiniciamos el servicio: systemctl restart httpd
5. Probando nuestra web
Realizamos las mismas pruebas que en el apartado 3. de este post. Primero, probamos
con el propio servidor, a través de links:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 11
Y a través del cliente Windows 7:
6. Protocolo HTTPS
Ya tenemos listo nuestro protocolo HTTP, pero como bien sabemos, se trata de un
protocolo no seguro. Por tanto, vamos a securizar nuestro servicio a través de
HTTPS.
Para ello seguimos los siguientes pasos:
6.1. Generar certificado firmado SSL
Vamos a generar el certificado SSL a partir de la herramienta OpenSSL. Además
integramos el certificado desde la aplicación ModSSL. Lo primero instalamos los
paquetes necesarios: yum install openssl y yum install mod_ssl.
Una vez instalado, vamos a crear una llave privada de 2048 bits, por ejemplo:
openssl genrsa -out luigi.key 2048
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 12
Una vez generada la llave, vamos a generar el CSR, es decir, el fichero de datos
sobre el certificado a generar. Este fichero se utiliza para verificar si el certificado
es legítimo, es decir, ha sido generado por alguna empresa certificadora. En
nuestro caso, no contamos con tanto presupuesto, así que lo generamos nosotros
solos...
openssl req -new -key luigi.key -out luigi.csr
Por último, generamos el certificado firmado SSL, con una validez de 365 días
(por ejemplo):
openssl x509 -req -days 365 -in luigi.csr -signkey luigi.key -out luigi.crt
Vamos a copiar los elementos creados a sus respectivos directos. Ejecutamos:
cp luigi.crt /etc/pki/tls/certs/
cp luigi.key /etc/pki/tls/private/
cp luigi.csr /etc/pki/tls/private/
6.2. Configurar Apache para HTTPS
Vamos a acceder al fichero ssl.conf para configurar nuestro certificado: nano
/etc/httpd/conf.d/ssl.conf
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 13
Dentro del fichero, buscamos la sección . Descomentamos donde dice "Document
Root" y "ServerName" y remplazamos "example.com" por "192.168.0.6", en
nuestro caso:
También localizamos los parámetros de ubicación de la llave privada y el
certificado, SSLCertificateFile y SSLCertificateKeyFile. Los modificamos para
que coincida con los nuestros:
6.3. Configurar Firewall para HTTPS
Vamos a añadir la regla para que nuestro sistema cortafuegos permita la conexión
mediante el puerto 443 TCP. Para ello:
firewall-cmd --permanent --zone=public --add-port=443/tcp
Y reiniciamos cortafuegos:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 14
firewall-cmd –reload
Por último, reiniciamos el servicio y vamos a comprobar que funcione
correctamente desde el navegador de nuestro cliente:
Aviso de certificado no confiable, ya que lo hemos creado nosotros y no una
identidad certificadora
Pagina web para el protocolo HTTPS
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 15
Certificado SSL
7. Virtual Host
Como hemos mencionado anteriormente, nuestro servidor HTTP va a contener
diferentes sitios web, los cuales serán accesibles únicamente mediante certificación
del usuario. Además, ya que haremos uso de usuario/contraseña, estos sitios web se
publicaran bajo el protocolo HTTPS.
En resumen, nuestra página principal www.luigi.com, se publicara bajo HTTP y
HTTPS. Los dos host virtuales que crearemos, se nombraran como
www.luigihost1.com y www.luigihost2.com respectivamente, y trabajaran bajo
HTTPS y autentificación de usuario.
A por ello:
1. Lo primero de todo, creamos la estructura de los sitios:
Además, volvemos a aplicar los permisos 755 para todos los directorios.
2. Añadimos los dos sitios web a cada directorio de los host virtuales:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 16
3. Creamos los directorios dónde almacenaremos los ficheros de configuración para
los host virtuales:
4. Accedemos al fichero de configuración principal de Apache, httpd.conf y
añadimos el directorio creado sites-enabled. Con esto conseguimos que el servidor
reconozca los host virtuales que añadamos. Para ello, nano
/etc/httpd/conf/httpd.conf y en la última línea escribimos:
5. Una vez listo, vamos a crear los ficheros de configuración para los host virtuales.
Para ello nano /etc/httpd/sites-available/luigihost1.conf ( o luigihost2.conf) y
añadimos:
Parámetros explicados:
VirtualHost *:443: Acceso al sitio web a través del protocolo 443 (HTTPS)
ServerAdmin: parámetro que define el administrador del sitio. En este caso, nosotros
como administradores.
ServerName: dominio con el que accederemos al sitio web
ServerAlias: nombre del sitio web
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 17
El segundo fichero de configuración quedaría así:
Creamos un enlace de estos dos ficheros de configuración al directorio de ficheros
activos (sites-enabled):
Para finalizar, reiniciamos el servicio: systemctl restart httpd, y añadimos los dos
nuevos nombres de los sitios web a nuestro DNS (resolución directa, claro...) :
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 18
Vamos a comprobar que funcione correctamente los host virtuales. Con nuestro
navegador en el cliente Windows 7, vamos a acceder www.luigi.com por HTTPS :
Verificamos que seguimos entrando de forma normal. Ahora vamos a añadir host1 a la
url:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 19
Y host2...
Además si intentamos a acceder mediante HTTP a cualquiera de los host virtuales, se
nos redirige a la página principal:
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 20
8. Autentificación
Una vez tengamos los dos host virtuales operativos, vamos a añadirles la
autentificación de acceso. Para ello crearemos el fichero donde se hallaran los usuarios
autentificados y sus contraseñas. Par a mayor seguridad, ciframos las contraseñas
utilizando el paquete htpasswd. Para ello:
1 Creamos el fichero de usuarios/contraseñas → touch /etc/httpd/userpasswd
2 Generamos los nuevos usuarios con contraseña cifrada → htpasswd
/etc/httpd/userpasswd luigi1/luigi2
3 Comprobamos que se han generado correctamente, nano /etc/httpd/userpasswd:
Una vez tenemos los usuarios y sus contraseñas cifradas, vamos restringir el acceso a
los host virtuales. Para ello, vamos a crear un fichero de configuración en
/etc/httpd/conf.d, llamado auth_basic.conf.
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 21
En el especificamos los dos directorios de los host virtuales y añadimos:
AuthType: parámetro que define el uso de autentificación para acceder al sitio
AuthName: nombre de la autentificación
AuthUserFile: ubicación del fichero de usuario y contraseñas admitidos
Require user: admitimos únicamente al usuario luigi1/luigi2
Reiniciamos el servicio y comprobamos:
Accedemos a https://www.host1.luigi.com, únicamente accesible por luigi1
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 22
Y accedemos:
Con el host2
Instalación Apache en CentOS 7 19 de noviembre de 2017
luigiasir.wordpress.com 23
9. Conclusión
Ya tenemos listo nuestro servicio web con Apache, para nuestro querido CentOS 7
protegido con HTTPS.
Además hemos implementado el uso de Host Virtuales, con lo que conseguimos que
nuestro servidor albergue varios sitios web en una misma máquina. Por si fuera poco,
hemos conseguido que estos host virtuales sean únicamente accesibles mediante logeo
autentificado... qué más podemos pedir.