instalación apache en centos 7 · informar al navegador sobre el formato de los contendidos (html,...

24
luigiasir.wordpress.com Instalación Apache en CentOS 7 Luigi Guarino 19/11/2017

Upload: buitruc

Post on 20-Sep-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

luigiasir.wordpress.com

Instalación Apache en CentOS 7

Luigi Guarino

19/11/2017

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 3

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.

Instalación Apache en CentOS 7 19 de noviembre de 2017

luigiasir.wordpress.com 24