Apache
Esta entrada solo llega a ser un pequeño manual básico del servicio Apache, ya que explicar todo su funcionamiento llevaría a todo un libro, en este caso, aprovecharemos los servicios de WordPress y Nextcloud para explicar el caso práctico, por lo que se considera un seguimiento de las entradas anteriores.
Primero, ¿qué es Apache?
Su nombre se debe a que alguien quería que tuviese la connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en gobierno de Estados Unidos, y en esos momentos la preocupación de su grupo era que llegasen las empresas y «civilizasen» el paisaje que habían creado los primeros ingenieros de internet.
El servidor Apache es desarrollado y mantenido por una comunidad de usuarios bajo la supervisión de la Apache Software Foundation dentro del proyecto HTTP Server (httpd).
Apache presenta entre otras características altamente configurables, bases de datos de autenticación y negociado de contenido, pero fue criticado por la falta de una interfaz gráfica que ayude en su configuración.
Apache tiene amplia aceptación en la red: desde 1996, Apache es el servidor HTTP más usado. Jugó un papel fundamental en el desarrollo de la World Wide Web y alcanzó su máxima cuota de mercado en 2005, siendo el servidor empleado en el 70% de los sitios web en el mundo. Sin embargo, ha sufrido un descenso en su cuota de mercado en los últimos años (estadísticas históricas y de uso diario proporcionadas por Netcraft). En 2009, se convirtió en el primer servidor web que alojó más de 100 millones de sitios web.
La mayoría de las vulnerabilidades de la seguridad descubiertas y resueltas tan solo pueden ser aprovechadas por usuarios locales y no remotamente. Sin embargo, algunas se pueden accionar remotamente en ciertas situaciones, o explotar por los usuarios locales maliciosos en las disposiciones de recibimiento compartidas que utilizan PHP como módulo de Apache.
Instalando el servicio apache
En la entrada Servidor LAMP en Fedora ya expliqué cómo hacer la instalación del servicio y los directorios que genera.
Explicando la configuración
Como es habitual, todo fichero de configuración se encuntra en:
/etc/httpd/conf/httpd.conf
El archivo de configuración principal referencia a otros ficheros importantes por medio de “includes”:
- ports.conf → define los puertos a través de los que el sevidor
- apache trabaja
- envvars → define variables de entorno fundamentales para
- el servidor
- mod-available/.conf → configuraciones de módulos disponibles sites-vailable/.conf → configuraciones de hosts virtuales
- conf-availble/*.conf → archivos de configuración extra
Directivas fundamentales de la configuración
En apache existen muchas directivas aplicables a la configuración, de las más fundamentales son:
- ServerRoot – Indica el directorio raíz de los archivos de configuración.
- User – Determina la cuenta de usuario del proceso Apache.
- Group – Determina el grupo de servicio propietario de los procesos Apache.
- ErrorLog – Archivo de registro de errores.
- CustomLog – Archivo de registro de accesos.
- Include – Indica un archivo de configuración anexo que se integrará en el archivo apache2.conf.
- Listen – Indica el puerto en el que escucha el servidor.
- DocumentRoot – Indica el directorio que contiene los archivos html.
Directivas condicionales
Se aplica si una condición se cumple:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Gestionando el servicio
Una vez instalado el paquete, el servicio está configurado para iniciar en cada inicio, pero se puede iniciar o parar:
sudo systemctl star/stop/restart httpd #inicia, para o reinicia el servicio
Se puede ejecutar el servicio con los parámetros:
sudo httpd -t #valida la sintaxis de la configuración y avisa si hay errores
sudo httpd -k stop #para el servicio
sudo httpd -k start #Inicia el servicio
Directorio por defecto
En las distribuciones más comunes, cuando instalas el servicio web, el directorio por defecto es:
/var/www/html
Y se puede alojar de manera sencilla el resto de contenido dentro de este directorio, mientas los atributos sean los correctos:
chmod -R 775 * /var/www/html chown -R apache:apache /var/www/hmtl
Hosts Virtuales
Mediante esta directiva podemos albergar varios sitios distintos de diferentes configuraciones, hasta el hecho de especificar la ubicación del servidor.
Hay dos técnicas de implementación de hosts virtuales:
- VirtualHost por dirección IP – El servidor dispone de varias IPs y responde de diferente forma según la interfaz a la que llegue cada petición HTTP.
- VirtualHost por nombre de host – existen tantos sitios virtuales como VirtualHost haya definidos. Suele ser el modo más habitual:
Ejemplos:
Dentro de cada Virtual Host hay varios parámetros de configuración que son importantes:
- ServerName → especifica el dominio correspondiente
- DocumentRoot → especifica la ubicación de los archivos de dicho sitio web
- ServerAlias → permite especificar otros dominios redirigidos a este
- ServerAdmin → email del administrador del sitio, de cara a notificaciones
- Redirect → nos permite redirigir una url a otra dentro del servidor
Alias, contenedor y directivas
Los Alias se utiliza para especificar el nombre del directorio web a la ruta correspondiente, por ejemplo:
Alias /wordpress /usr/share/wordpress
Con lo que en el navegador, al acceder a:
https://192.168.1.241/wordpress
En realidad accedes al directorio del Alias.
Podemos especificar el directorio que contiene un servicio web específico bajo:
<Directory /ruta/directorio> directiva 1 directiva 2 </Directory>
Esto ya lo entramos cuando instalamos WordPress o nextcloud:
Restricción de acceso
Apache permite la restricción de acceso a hosts a las diferentes áreas del servidor
El módulo que hay que activar es access_mod o access_compat_mod.
Las directivas se especifican con reglas allow, deny, por ejemplo
<Directory /var/www/html> Order Deny,Allow Deny from All Allow from 192.168.1.0/255.255.255.0 </Directory>
En este ejemplo se denegaría el acceso a la página web a todos los equipos que no sean de la red local 192.168.1.0/24.