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.

¿Qué es un servidor web? 

El servidor web o servidor HTTP (Protocolo de transferencia de hipertexto o Hypertext Transfer Protocol, en ingles), es la máquina encargada de almacenar y poner a disposición de los clientes, páginas webarchivos y/o aplicaciones

¿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.

¿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.

¿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.

¿Entonces Apache qué es?

Apache es el software para servidor web mas 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…

Ademas, 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

 

 

¿Entonces Apache qué es?

Apache es el software para servidor web mas 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…

Ademas, 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

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

Configuración del DNS

Sobre el mismo servidor, vamos a modificar las resoluciones directas e inversas para que respondan al dominio del nuevo servidor: http://www.luigi.com ↔ 192.168.0.6

Directa

Inversa

 

Instalación y configuración de Apache

Hemos llegado a lo que nos interesa. Recordamos, estamos en nuestra máquina 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 estaran los ficheros de configuración del servicio; y otra sobre /var/www/html, dónde se ubicaran las páginas, archivos, imagenes… que queramos publicar mediante el servidor.

2. Configurando el firewall

Si recordais, en nuestro anterior postprotegimos 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 sera descubrir como 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:

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:

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 página 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.

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 imagenes 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

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:

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:

1. Generar certificado firmado SSL

Vamos a generar el certificado SSL a partir de la herramienta OpenSSL. Además integramos el certificado desde la aplicacion ModSSL. Lo primero instalamos los paquetes necesarios: yum install openssl  yum install mod_ssl.

Una vez instalado, vamos a crear una llave privada de 2048 bits, por ejemplo:

openssl genrsa -out luigi.key 2048

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 legitimo, es decir, a 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 ultimo, generamos el certificado firmado SSL, con una validez de 365 dias (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/

2. Configurar Apache para HTTPS

Vamos a acceder al fichero ssl.conf para configurar nuestro certificado: nano /etc/httpd/conf.d/ssl.conf

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:

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:

firewall-cmd –reload

Por ultimo, 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

Página web para el protocolo HTTPS

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 http://www.luigi.com, se publicara bajo HTTP y HTTPS. Los dos host virtuales que crearemos, se nombraran como http://www.luigihost1.com y http://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:

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 ultima lineaescribimos:

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.confy 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

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…) :

Vamos a comprobar que funcione correctamente los host virtuales. Con nuestro navegador en el cliente Windows 7, vamos a acceder http://www.luigi.com por HTTPS :

Verificamos que seguimos entrando de forma normal. Ahora vamos a añadir host1 a la url:

host2

Además si intentamos a acceder mediante HTTP a cualquiera de los host virtuales, se nos redirige a la página principal:

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

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.

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

Y accedemos:

Con el host2:


Ya esta en la red…

Terminamos! 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… que más podemos pedir 🙂

 

Follow by Email
Telegram
WhatsApp