Cómo configurar un servidor Apache independiente con alojamiento virtual basado en nombres con certificado SSL - Parte 4


Un LFCE (abreviatura de Linux Foundation Certified Engineer ) es un profesional capacitado que tiene la experiencia para instalar, administrar y solucionar problemas de servicios de red en sistemas Linux, y está a cargo de el diseño, implementación y mantenimiento continuo de la arquitectura del sistema.

En este artículo, le mostraremos cómo configurar Apache para servir contenido web y cómo configurar hosts virtuales basados u200bu200ben nombres y SSL, incluido un certificado autofirmado.

Presentamos el Programa de certificación de la Fundación Linux (LFCE).

Nota: que se supone que este artículo no es una guía completa sobre Apache, sino un punto de partida para el autoestudio sobre este tema para el examen LFCE . Por esa razón, tampoco cubrimos el equilibrio de carga con Apache en este tutorial.

Es posible que ya conozca otras formas de realizar las mismas tareas, lo cual está OK considerando que la Certificación de la Fundación Linux se basa estrictamente en el rendimiento. Por lo tanto, siempre que " haga el trabajo ", tiene buenas posibilidades de aprobar el examen.

Consulte la Parte 1 de la serie actual ("Instalación de servicios de red y configuración de inicio automático en el arranque") para obtener instrucciones sobre cómo instalar e iniciar Apache.

A estas alturas, debería tener el servidor web Apache instalado y funcionando. Puede verificar esto con el siguiente comando.

# ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Nota: que el comando anterior comprueba la presencia de apache o httpd (los nombres más comunes para el demonio web) entre la lista de procesos en ejecución. Si Apache se está ejecutando, obtendrá un resultado similar al siguiente.

El método definitivo para probar la instalación de Apache y comprobar si se está ejecutando es iniciar un navegador web y apuntar a la IP del servidor. Deberíamos ver la siguiente pantalla o al menos un mensaje confirmando que Apache está funcionando.

Configurando Apache

El archivo de configuración principal de Apache se puede ubicar en diferentes directorios según su distribución.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Afortunadamente para nosotros, las directivas de configuración están muy bien documentadas en el sitio web del proyecto Apache. Nos referiremos a algunos de ellos a lo largo de este artículo.

El uso más básico de Apache es servir páginas web en un servidor independiente donde aún no se han configurado hosts virtuales. La directiva DocumentRoot especifica el directorio desde el cual Apache servirá documentos de páginas web.

Tenga en cuenta que, de forma predeterminada, todas las solicitudes se toman de este directorio, pero también puede usar enlaces simbólicos y/o se pueden usar alias para apuntar a otras ubicaciones.

A menos que coincida con la directiva Alias u200bu200b (que permite que los documentos se almacenen en el sistema de archivos local en lugar de en el directorio especificado por DocumentRoot ), el servidor agrega la ruta de la URL solicitada a la raíz del documento para hacer la ruta al documento.

Por ejemplo, dado el siguiente DocumentRoot :

Cuando el navegador web apunta a [ IP del servidor o nombre de host ] /lfce/tecmint.html , el servidor abrirá /var/www/html/lfce/tecmint.html (asumiendo que tal archivo existe) y guarde el evento en su registro de acceso con una respuesta 200 ( OK ).

El registro de acceso normalmente se encuentra dentro de /var/log con un nombre representativo, como access.log o access_log . Incluso puede encontrar este registro (y el registro de errores también) dentro de un subdirectorio (por ejemplo, /var/log/httpd en CentOS). De lo contrario, el evento fallido aún se registrará en el registro de acceso pero con una respuesta 404 (No encontrado).

Además, los eventos fallidos se registrarán en el registro de errores :

El formato del registro de acceso se puede personalizar de acuerdo con sus necesidades usando la directiva LogFormat en el archivo de configuración principal, mientras que no puede hacer lo mismo con el registro de errores. .

El formato predeterminado del registro de acceso es el siguiente:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Donde cada una de las letras precedidas por un signo de porcentaje indica que el servidor debe registrar cierta información:

y apodo es un alias opcional que se puede usar para personalizar otros registros sin tener que ingresar toda la cadena de configuración nuevamente.

Puede consultar la directiva LogFormat [sección de formatos de registro personalizados] en los documentos de Apache para obtener más opciones.

Ambos archivos de registro ( acceso y error ) representan un gran recurso para analizar rápidamente de un vistazo lo que está sucediendo en el servidor Apache. No hace falta decir que son la primera herramienta que utiliza un administrador del sistema para solucionar problemas.

Finalmente, otra directiva importante es Escuchar , que le dice al servidor que acepte solicitudes entrantes en el puerto especificado o combinación de dirección/puerto:

Si solo se define un número de puerto, apache escuchará el puerto dado en todas las interfaces de red (el signo comodín * se usa para indicar "todas las interfaces de red").

Si se especifica tanto la dirección IP como el puerto, apache escuchará la combinación del puerto y la interfaz de red dados.

Tenga en cuenta (como verá en los ejemplos a continuación) que se pueden utilizar varias directivas de escucha al mismo tiempo para especificar varias direcciones y puertos para escuchar. Esta opción indica al servidor que responda a las solicitudes de cualquiera de las direcciones y puertos enumerados.

Configuración de hosts virtuales basados u200bu200ben nombres

El concepto de host virtual define un sitio (o dominio) individual que es atendido por la misma máquina física. En realidad, se pueden servir varios sitios/dominios desde un único servidor " real " como host virtual. Este proceso es transparente para el usuario final, para quien parece que los diferentes sitios están siendo atendidos por distintos servidores web.

El alojamiento virtual basado en nombre permite que el servidor confíe en que el cliente informe el nombre de host como parte de los encabezados HTTP. Por lo tanto, utilizando esta técnica, muchos hosts diferentes pueden compartir la misma dirección IP.

Cada host virtual se configura en un directorio dentro de DocumentRoot . Para nuestro caso, usaremos los siguientes dominios ficticios para la configuración de prueba, cada uno ubicado en el directorio correspondiente:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Para que las páginas se muestren correctamente, modificaremos el directorio de cada VirtualHost en 755 :

# chmod -R 755 /var/www/html/ilovelinux.com/public_html
# chmod -R 755 /var/www/html/linuxrocks.org/public_html

A continuación, cree un archivo index.html de muestra dentro de cada directorio public_html :

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Finalmente, en CentOS y openSUSE agregue la siguiente sección al final de /etc/httpd/conf/httpd.conf o /etc/apache2/httpd.conf , respectivamente, o simplemente modifíquelo si ya está allí.

<VirtualHost *:80>
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Tenga en cuenta que también puede agregar cada definición de host virtual en archivos separados dentro del directorio /etc/httpd/conf.d . Si elige hacerlo, cada archivo de configuración debe tener el siguiente nombre:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

En otras palabras, debe agregar .conf al sitio o al nombre de dominio.

En Ubuntu , cada archivo de configuración individual se denomina /etc/apache2/sites-available/[nombre del sitio] .conf . Luego, cada sitio se habilita o deshabilita con los comandos a2ensite o a2dissite , respectivamente, de la siguiente manera.

# a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
# a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
# a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
# a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Los comandos a2ensite y a2dissite crean enlaces al archivo de configuración del host virtual y los colocan (o eliminan) en /etc/apache2/sites-enabled directorio.

Para poder navegar a ambos sitios desde otro cuadro de Linux, deberá agregar las siguientes líneas en el archivo /etc/hosts en esa máquina para redirigir las solicitudes a esos dominios a una IP específica habla a.

[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Como medida de seguridad, SELinux no permitirá que Apache escriba registros en un directorio que no sea el predeterminado/var/log/httpd.

Puede deshabilitar SELinux o establecer el contexto de seguridad adecuado:

# chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

donde xxxxxx es el directorio dentro de/var/www/html donde ha definido sus hosts virtuales.

Después de reiniciar Apache, debería ver la siguiente página en las direcciones anteriores:

Instalación y configuración de SSL con Apache

Finalmente, crearemos e instalaremos un certificado autofirmado para usar con Apache. Este tipo de configuración es aceptable en entornos pequeños, como una LAN privada.

Sin embargo, si su servidor expondrá contenido al mundo exterior a través de Internet, querrá instalar un certificado firmado por un tercero para corroborar su autenticidad. De cualquier manera, un certificado le permitirá cifrar la información que se transmite hacia, desde o dentro de su sitio.

En CentOS y openSUSE , debe instalar el paquete mod_ssl .

# yum update && yum install mod_ssl 		[On CentOS]
# zypper refresh && zypper install mod_ssl	[On openSUSE]

Mientras que en Ubuntu tendrá que habilitar el módulo ssl para Apache.

# a2enmod ssl

Los siguientes pasos se explican usando un servidor de prueba CentOS , pero su configuración debería ser casi idéntica en las otras distribuciones (si tiene algún tipo de problema, no dude en dejar sus preguntas usando los comentarios formar).

Paso 1 [Opcional] : cree un directorio para almacenar sus certificados.

# mkdir /etc/httpd/ssl-certs

Paso 2 : Genere su certificado autofirmado y la clave que lo protegerá.

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Una breve explicación de las opciones enumeradas anteriormente:

  1. req -X509 indicates we are creating a x509 certificate.
  2. -nodes (NO DES) means “don’t encrypt the key”.
  3. -days 365 is the number of days the certificate will be valid for.
  4. -newkey rsa:2048 creates a 2048-bit RSA key.
  5. -keyout /etc/httpd/ssl-certs/apache.key is the absolute path of the RSA key.
  6. -out /etc/httpd/ssl-certs/apache.crt is the absolute path of the certificate.

Paso 3 : Abra el archivo de configuración de su host virtual elegido (o su sección correspondiente en /etc/httpd/conf/httpd.conf como se explicó anteriormente) y agregue las siguientes líneas a una declaración de host virtual que escucha en el puerto 443 .

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Tenga en cuenta que debe agregar.

NameVirtualHost *:443

en la parte superior, justo debajo

NameVirtualHost *:80

Ambas directivas indican a apache que escuche en los puertos 443 y 80 de todas las interfaces de red.

El siguiente ejemplo está tomado de /etc/httpd/conf/httpd.conf :

Luego reinicia Apache,

# service apache2 restart 			[sysvinit and upstart based systems]
# systemctl restart httpd.service 		[systemd-based systems]

Y apunte su navegador a https://www.ilovelinux.com . Se le presentará la siguiente pantalla.

Continúe y haga clic en " Comprendo los riesgos " y " Agregar excepción ".

Por último, marque " Almacenar esta excepción de forma permanente " y haga clic en " Confirmar excepción de seguridad ".

Y será redirigido a su página de inicio usando https .

Resumen

En esta publicación hemos mostrado cómo configurar Apache y alojamiento virtual basado en nombre con SSL para asegurar la transmisión de datos. Si por alguna razón tuvo algún problema, no dude en hacérnoslo saber utilizando el formulario de comentarios a continuación. Estaremos encantados de ayudarle a realizar una configuración satisfactoria.

Leer también

  1. Apache IP Based and Name Based Virtual Hosting
  2. Creating Apache Virtual Hosts with Enable/Disable Vhosts Options
  3. Monitor “Apache Web Server” Using “Apache GUI” Tool