Turgon37.apache2

Rol de Ansible Apache2

Estado de Construcción Licencia Rol de Ansible

Descripción

:grey_exclamation: Antes de usar este rol, ten en cuenta que todos mis roles de Ansible están totalmente escritos y adaptados a mi infraestructura de TI. Aunque sean lo más genéricos posible, no necesariamente cubrirán tus necesidades. Te aconsejo que analices con cuidado lo que hacen y evalúes su capacidad para ser instalados de forma segura en tus servidores.

Este rol configura una instancia del daemon Apache2.

Requisitos

Requiere Ansible >= 2.4

Dependencias

Si utilizas el perfil de monitoreo Zabbix, necesitarás el rol ansible-zabbix-agent

Familia del SO

Este rol está disponible para Debian.

Características

Hasta la fecha, el rol se puede usar para:

  • instalar Apache2
  • configurar el archivo principal del servidor
  • crear configuraciones de virtualhosts
  • gestionar módulos habilitados
  • anular configuraciones de algunos módulos
  • elementos de monitoreo para
    • Zabbix
  • hechos locales

Configuración

Servidor

Todas las variables que se pueden sobrescribir están almacenadas en el archivo defaults/main.yml así como en la tabla a continuación. Para ver los valores predeterminados, consulta este archivo.

Nombre Descripción
apache2__version Elige la versión de apache2 para instalar (según lo disponible en los repositorios del SO) Ej: 2.4.25-3+deb9u5
apache2__service_enabled Un booleano que habilita o no el servicio apache al iniciar y en tiempo de ejecución
apache2__service_restartable Si es verdadero, el servicio apache se reiniciará automáticamente al cambiar la configuración (se recomienda poner en falso en producción)
apache2__server_tokens Configura la verbosidad del token del servidor en las páginas de error
apache2__server_signature Imprimir o no la firma del servidor en las páginas de error
apache2__trace_enable Configura el método HTTP TRACE
apache2__ssl_ciphers Lista los cifrados SSL disponibles, por defecto solo se configura un subconjunto recomendado
apache2__ssl_protocols Lista los protocolos SSL habilitados, por defecto todos excepto SSL 2/3
apache2__ssl_honorciphers Indica al servidor que prefiera su orden de cifrado en lugar del del cliente
apache2__log_formats Un diccionario que contiene todos los formatos de log disponibles en apache.
apache2__listen_http Lista de puerto/host:puerto en el que apache escuchará las solicitudes http
apache2__listen_https Lista de puerto/host:puerto en el que apache escuchará las solicitudes https

Nota sobre apache2__listen_http(s), por ahora estas directivas se completan manualmente, planeé generarlas automáticamente, pero parece complicado porque los virtual hosts pueden definirse usando include_role.

La siguiente variable se aplica al servidor y se puede sobrecargar en cada virtual host:

Nombre Descripción
apache2__serveradmin Dirección de correo electrónico opcional del administrador
apache2__allow_override_list La directiva AllowOverrideList
apache2__allow_override La directiva AllowOverride
apache2__options La directiva Option

Para configurar qué módulos están habilitados o no, debes declarar todos los nombres de módulo en cualquiera de las siguientes tres listas:

  • apache2__modules_enabled_global
  • apache2__modules_enabled_group
  • apache2__modules_enabled_host

Por defecto, ningún módulo está habilitado, por lo que ten en cuenta que apache no comenzará sin que algún módulo mpm esté habilitado. Cada entrada en estas listas debe ser el nombre del módulo. En caso de que un módulo tenga un archivo '.conf' y un archivo '.load', se incluirán automáticamente siempre que sea posible. Además, si el rol contiene un archivo de plantilla en el directorio templates/modules.conf/(nombre del módulo), reemplazará cualquier archivo de configuración existente de la distribución.

Virtual hosts

Cada virtual host debe declararse con un bloque vhost. Puedes poner un bloque vhost en cualquiera de las tres listas disponibles:

  • apache2__virtual_hosts_global
  • apache2__virtual_hosts_group
  • apache2__virtual_hosts_host

Por defecto, cada virtual host escucha en '*' y en el puerto predeterminado identificado según el estado HTTP(s). Si el motor SSL está 'ENCENDIDO', utiliza 443, de lo contrario, 80.

Solo se ha implementado un subconjunto de las directivas y secciones de apache2 en ansible, puedes ver las disponibles en los archivos directives sections. Si necesitas una directiva que no está implementada, puedes usar los elementos extra_parameters. Pero si falta un tipo de sección, necesitarás bifurcar e implementarlo en el rol.

Cada bloque vhost debe colocarse en un diccionario donde la clave será el nombre del archivo de configuración del vhost. Luego, cada vhost debe ser un diccionario que puede contener estas variables:

Nombre Tipo Descripción
hosts cadena o array de cadena/diccionario lista de interfaces en las que el vhost escuchará
hosts[] cadena si un elemento de la lista de hosts es una cadena, se interpretará como "IP:PUERTO" o "X.X.X.X:X"
hosts[].ip cadena si un elemento de la lista de hosts es un diccionario con clave 'ip', se interpretará como "IP"
hosts[].port int si un elemento de la lista de hosts es un diccionario con clave 'port', se usará como puerto de escucha. Si esta clave no está establecida, se deducirá del protocolo HTTP (ver arriba)
server_name cadena el host del vhost
server_alias cadena el alias del nombre del host
server_admin cadena la dirección de correo electrónico opcional del administrador
document_root cadena La ruta a la carpeta del documento raíz. Este directorio se creará automáticamente, porque Apache no comenzará si falta.
document_root_user cadena El propietario unix de la carpeta del documento raíz. Esto solo se aplica si la variable está definida
document_root_group cadena El grupo unix de la carpeta del documento raíz. Esto solo se aplica si la variable está definida
document_root_mode cadena El modo unix de la carpeta del documento raíz. Esto solo se aplica si la variable está definida. Ten cuidado de que apache aún tenga acceso a esta carpeta, al menos en modo sólo lectura
error_log cadena La ruta al archivo de log de errores. El archivo de log de errores se creará en este directorio, así que asegúrate de que apache aún tenga derechos de acceso suficientes
error_log_user cadena El propietario unix del directorio del log de errores
error_log_group cadena El grupo unix del directorio del log de errores
allow_override cadena La directiva AllowOverride
allow_override_list cadena La directiva AllowOverrideList
options cadena La directiva Option
headers array Array de directivas de encabezado
files_match array de diccionarios (ver más abajo) Contiene la definición FileMatch, cada uno debe ser un diccionario con las siguientes claves
files_match[].regexp cadena La expresión regular que activa la coincidencia de archivos
files_match[].actions array de cadena La lista de directivas de Apache para ejecutar cuando se active esta coincidencia de archivos
extra_parameters array de cadena Cualquier directiva adicional de Apache
https diccionario ver abajo para todas las subclaves https
https.enabled booleano Verdadero por defecto, puede usarse para deshabilitar https y preservar configuraciones de cadena
https.certificate_chain_file cadena La ruta al certificado de la cadena
https.verify_client cadena El tipo de verificación del certificado del cliente a realizar
https.verify_client_depth int La profundidad máxima para la verificación del certificado del cliente
https.ca_certificate_path cadena La ruta al directorio del certificado CA
https.ca_certificate_file cadena La ruta al archivo del certificado CA
https.crl_path cadena La ruta a la carpeta CRL
https.crl_file cadena La ruta al archivo CRL

Hechos

Por defecto, los hechos locales se instalan y exponen las siguientes variables:

  • ansible_local.apache2.version_full
  • ansible_local.apache2.version_major

Ejemplo

Playbook

Úsalo en un playbook de la siguiente manera:

- hosts: all
  roles:
    - turgon37.apache2

Inventario

  • Ejemplo de módulos de apache cargados manualmente
apache2__modules_enabled_group:
  - access_compat # proporciona soporte para directivas antiguas Allow,Order que están en desuso
  - alias  # proporciona Alias
#  - auth_basic  # proporciona autenticación HTTP básica
  - authn_core
#  - authn_file  # autenticación basada en htpasswd
  - authz_core
#  - authz_host  # autenticación basada en ip/host
#  - authz_user  # autenticación basada en nombre de usuario
#  - autoindex  # deshabilitado, los índices están deshabilitados
  - deflate # proporciona compresión Gzip
  - dir # proporciona DirectoryIndex
  - env  # proporciona SetEnv
#  - filter  # proporciona FilterChain
  - headers  # proporciona RequestHeader
  - mime
  - mpm_prefork
  - negotiation # gestiona el tipo de contenido
  - php7.0
#  - proxy
#  - proxy_http
#  - setenvif
  - ssl  # Maneja SSL
  - socache_shmcb  # requerido por mod_ssl
  • Virtual host predeterminado de debian
apache2__host_virtual_hosts:
  000-default:
    server_name: www.example.com
    server_admin: webmaster@localhost
    document_root: /var/www/html
    sections:
      - type: directory
        path: /var/www/html
        directives:
          - require: all granted
    error_log: '{{ apache2__log_directory }}/error.log'
    custom_log: '{{ apache2__log_directory }}/access.log combined'
  • Redirección permanente simple de HTTP a HTTPs
apache2__host_virtual_hosts:
  web-redirect:
    hosts:
      - ip: "10.0.0.1"
    server_name: www.example.net
    server_alias: www2.example.net
    extra_parameters:
      - RedirectPermanent / https://www.example.net/
  • Proxy pass de HTTPs a HTTP
apache2__host_virtual_hosts:
  proxy-https:
    hosts:
      - ip: 10.0.0.1
      - ip: 192.168.56.12
    server_name: www.example.net
    server_alias: www2.example.net
    extra_parameters:
      - 'ProxyRequests Off'
      - 'ProxyPreserveHost On'
      - 'ProxyPass / http://localhost:3001/'
      - 'ProxyPassReverse / https://localhost:3001/'
    https:
      certificate_file: /etc/ssl/apache2/www.example.net.pem
      certificate_key_file: /etc/ssl/apache2/www.example.net.key
  • Virtual host HTTP con documento raíz y una aplicación PHP (Jeedom)
apache2__host_virtual_hosts:
    hosts:
      - 10.0.0.1
      - "127.0.0.1:443"
    server_name: jeedom.example.net
    document_root: /var/www/html
    document_root: '{{ jeedom__install_directory }}'
    document_root_user: '{{ apache2__service_user }}'
    document_root_group: '{{ apache2__service_user }}'
    error_log: '{{ jeedom__install_directory }}/log/http.error'
    error_log_user: '{{ apache2__service_user }}'
    error_log_group: '{{ apache2__service_user }}'
    sections:
      - type: directory
        path: '{{ jeedom__install_directory }}'
        directives:
          - allow_override: All
          - options: -Indexes -ExecCGI -FollowSymLinks
          - require: all granted
      - type: files_match
        regex: '\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$'
          directives:
            - header:
                - unset Content-Security-Policy
                - unset X-Frame-Options
                - unset X-XSS-Protection
    directives:
      - header:
          # Content Security Policy (CSP)
          #- set Content-Security-Policy "script-src 'self'; object-src 'self'"
          # Reducción de riesgos de seguridad de tipo MIME
          - set X-Content-Type-Options "nosniff"
          # Clickjacking
          - set X-Frame-Options "DENY"
          # Ataques de scripting cruzado reflejados (XSS)
          - set X-XSS-Protection "1; mode=block"
          - unset X-Powered-By
  • Virtual host HTTPs con documento raíz y una aplicación PHP (Jeedom)
apache2__host_virtual_hosts:
  jeedom-https:
    hosts:
      - ip: 10.0.0.1
      - ip: 127.0.0.1
        port: 4343
    server_name: jeedom.example.net
    document_root: /var/www/html
    allow_override: All
    options: '-Indexes -ExecCGI -FollowSymLinks'
    headers:
      - set X-Content-Type-Options "nosniff"
      - always set Strict-Transport-Security "max-age=16070400; includeSubDomains"
      - set X-XSS-Protection "1; mode=block"
      - unset X-Powered-By
    files_match:
      - regexp: '\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$'
        actions:
          - Header unset Content-Security-Policy
          - Header unset X-Frame-Options
          - Header unset X-XSS-Protection
    https:
      certificate_file: /etc/ssl/apache2/jeedom.www.example.net.pem
      certificate_key_file: /etc/ssl/apache2/jeedom.www.example.net.key
Acerca del proyecto

This role install and configure Apache2 webserver

Instalar
ansible-galaxy install Turgon37.apache2
Licencia
mit
Descargas
3.6k
Propietario
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté