Imagen de portada del articulo sobre Apache2
The BytePath Chronicles

Servidor Apache2

Lara y Amin retomaron el viaje pero sus pensamientos no se apartaban de servidor

Necesitaban que su existencia fuera conocida, que su conocimiento sirviera de faro.

Amin, con la mirada fija en el polvo que levantaban, comprendió. "Una página web. Un lugar donde otros como nosotros puedan encontrarnos. Un repositorio de la información que aún existe, una guía para los que buscan reconstruir."

Exacto," respondió Lara, y para eso, necesitaremos a Apache2, el guardián de las páginas web del viejo mundo."

Su próxima parada sería para configurar Apache2, no solo para que el servidor hablara, sino para que lo hiciera de forma segura y robusta.

Instalación de Apache2

Llegaron a un campamento improvisado, un lugar con cierta protección contra los elementos y, crucialmente, con una fuente de energía estable. Era el momento de dar voz al servidor

No bastaba con instalarlo; necesitaban que gestionara la web de forma independiente y segura.


Leyenda
┌──(lara㉿kali)-[~] └─$ ssh amin@192.168.8.101 amin@1-bytepath:~$ sudo apt update Hit:1 http://deb.debian.org/debian bookworm InRelease Hit:2 http://deb.debian.org/debian bookworm-updates InRelease Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. amin@1-bytepath:~$ sudo apt install apache2 -y Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 libxml2 mailcap media-types Suggested packages: apache2-doc apache2-suexec-pristine | apache2-suexec-custom The following NEW packages will be installed: apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 libxml2 mailcap media-types 0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded. Need to get 1,985 kB of archives. ......... Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service. Processing triggers for man-db (2.11.2-1) ... Processing triggers for libc-bin (2.36-9+deb12u3) ...

Creación de un Host Virtual

Con Apache2 instalado, el siguiente paso era configurar un Host Virtual. Aunque Apache2 viene con una configuración por defecto, Lara sabía que para su propósito de crear una guía digital y un punto de contacto, necesitarían un espacio dedicado. Un Host Virtual les permitiría alojar su propio sitio web con su propia configuración, aislado de futuras páginas que pudieran añadir. Sería el 'hogar' digital de su manifiesto.

Primero, crear el directorio para el nuevo sitio:


Leyenda
amin@1-bytepath:<~$ sudo mkdir /var/www/thebytepathchronicles

Luego, Lara asignaría los permisos correctos a este nuevo directorio para que Apache2 pudiera leer sus archivos y el usuario de Amin pudiera gestionarlos.

Tras asignar www-data como usuario y grupo propietario, añadió a amin al grupo www-data y asigno a este grupo permisos de escritura.


Leyenda
amin@1-bytepath:~$ sudo chown -R www-data:www-data /var/www/thebytepathchronicles amin@1-bytepath:~$ sudo usermod -a -G www-data amin amin@1-bytepath:~$ sudo chmod -R 775 /var/www/thebytepathchronicles

Ahora, Lara crearía el archivo de configuración del Host Virtual. Copiaría la plantilla por defecto para empezar.


Leyenda
amin@1-bytepath:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/thebytepathchronicles.conf

Y, finalmente, editaría el nuevo archivo de configuración para el Host Virtual.


Leyenda
amin@1-bytepath:~$ sudo nano /etc/apache2/sites-available/thebytepathchronicles.conf # CONTENIDO DEL ARCHIVO /etc/apache2/sites-available/thebytepathchronicles.conf <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/thebytepathchronicles # Domain Name and Aliases # ServerName thebytepathchronicles.com # Si tuvieran un dominio # ServerAlias www.thebytepathchronicles.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/thebytepathchronicles> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost>

Explicación de las configuraciones clave del Host Virtual:

Después de guardar el archivo de configuración del Host Virtual, Lara tuvo que habilitarlo y deshabilitar el sitio por defecto de Apache para evitar conflictos.


Leyenda
amin@1-bytepath:~$ sudo a2ensite thebytepathchronicles.conf Enabling site thebytepathchronicles. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo a2dissite 000-default.conf Disabling site 000-default. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo systemctl reload apache2

Habilitación de Módulos Esenciales de Apache2

Para su blog, Lara y Amin sabían que necesitarían equipar su servidor con funcionalidades específicas que optimizaran el rendimiento y la seguridad. Era la ventaja de la modularidad: cargar solo lo esencial para mantener el sistema ligero y robusto.

Tenemos el esqueleto del servidor web', dijo Lara, 'pero necesitamos darle agilidad y proteger su piel.'

Amin asintió. '¿Qué módulos son clave para nuestra guía digital?'

'Hay varios', respondió Lara. 'Pero nos centraremos en tres fundamentales que nos darán un buen equilibrio: mod_headers para las cabeceras de seguridad, mod_deflate para comprimir el contenido y acelerar la carga, y mod_expires para gestionar la caché del navegador.'"

Antes de empezar, Lara decidió inspeccionar qué módulos estaban disponibles y cuáles ya activos en Apache. Era como revisar el inventario de herramientas antes de empezar a trabajar."


Leyenda
amin@1-bytepath:~$ pache2ctl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) mpm_event_module (static) authz_host_module (shared) authz_core_module (shared) authn_core_module (shared) authn_file_module (shared) access_compat_module (shared) auth_basic_module (shared) reqtimeout_module (shared) filter_module (shared) mime_module (shared) log_config_module (shared) env_module (shared) setenvif_module (shared) version_module (shared) unixd_module (shared) status_module (shared) autoindex_module (shared) dir_module (shared) alias_module (shared) # ... (lista de módulos disponibles y/o habilitados) ...

Módulo mod_headers: Reforzando la Seguridad

El primer módulo que Lara activaría sería mod_headers. 'Este es como añadir un sello de seguridad a cada paquete que enviamos', explicó Lara. 'Nos permite controlar la información que nuestro servidor comparte con los navegadores, y podemos usarlo para evitar que ciertos tipos de ataques ni siquiera empiecen.'


Leyenda
amin@1-bytepath:~$ sudo a2enmod headers Enabling module headers. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo systemctl reload apache2

Módulo mod_deflate: Acelerando la Entrega

Después de mod_headers, Lara se centró en la velocidad. 'La gente está usando terminales de todo tipo, y la conectividad no es lo que era', comentó. 'Cada byte cuenta. mod_deflate nos ayudará a comprimir el contenido como HTML, CSS y JavaScript antes de enviarlo. Menos datos, cargas más rápidas.'


Leyenda
amin@1-bytepath:~$ sudo a2enmod deflate Enabling module deflate. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo systemctl reload apache2

La habilitación del módulo es solo el primer paso", continuó Lara. 'Ahora necesitamos decirle a mod_deflate qué tipos de archivos debe comprimir. Crearemos un archivo de configuración específico para ello, manteniéndolo ordenado y separado.'


Leyenda
amin@1-bytepath:~$ sudo nano /etc/apache2/conf-available/deflate.conf # CONTENIDO DEL ARCHIVO /etc/apache2/conf-available/deflate.conf <IfModule mod_deflate.c> # Comprimir archivos de texto, HTML, CSS, JavaScript, XML, JSON, etc. AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml # Nivel de compresión (1-9, siendo 9 la máxima compresión) # DeflateCompressionLevel 9 # Excluir algunos navegadores antiguos con problemas de compresión BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule>

Explicación de las configuraciones clave en deflate.conf:

'Una vez configurado el módulo', dijo Lara, 'hay que decirle a Apache que lo use.'


Leyenda
amin@1-bytepath:~$ sudo a2enconf deflate.conf Enabling conf deflate. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo systemctl reload apache2 amin@1-bytepath:~$

Módulo mod_expires: Optimizando la Caché del Navegador

El último módulo que Lara consideró esencial para el rendimiento de su blog fue mod_expires. 'Imagina que alguien visita nuestra guía', explicó. 'No queremos que su navegador tenga que descargar las mismas imágenes o archivos CSS cada vez. mod_expires le dirá a su navegador cuánto tiempo puede guardar esos archivos en su caché local. Esto no solo hace que el sitio se sienta instantáneo para visitas repetidas, sino que también reduce la carga de nuestro servidor.'


Leyenda
amin@1-bytepath:~$ sudo a2enmod expires Enabling module expires. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo systemctl reload apache2 amin@1-bytepath:~$

'Y, como con mod_deflate, este módulo también necesita su propia configuración', continuó Lara. 'Crearemos expires.conf para detallar las políticas de caché.'


Leyenda
amin@1-bytepath:~$ sudo nano /etc/apache2/conf-available/expires.conf # CONTENIDO DEL ARCHIVO /etc/apache2/conf-available/expires.conf <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/webp "access plus 1 month" ExpiresByType image/x-icon "access plus 1 month" </IfModule>

Explicación de las configuraciones clave en expires.conf:

'Con las políticas de caché definidas, el último paso es activarlas,' dijo Lara.


Leyenda
amin@1-bytepath:~$ sudo a2enconf expires.conf Enabling conf expires. To activate new configuration, you need to run: systemctl reload apache2 amin@1-bytepath:~$ sudo apache2ctl configtest Syntax OK amin@1-bytepath:~$ sudo systemctl reload apache2

Antes de recargar, Lara ejecutó una prueba de sintaxis para asegurarse de que no hubiera errores en la configuración de Apache, obteniendo un tranquilizador Syntax OK. Este es un paso de seguridad vital antes de aplicar cambios importantes.

El servidor ahora no solo estaba protegido por UFW y Fail2ban, sino que Apache2 estaba listo para servir su contenido de manera eficiente y con las bases de seguridad necesarias.

PREV.. NEXT..