Turgon37.apache2

Rôle Ansible Apache2

Statut de Construction Licence Rôle Ansible

Description

:grey_exclamation: Avant d'utiliser ce rôle, veuillez noter que tous mes rôles Ansible sont entièrement écrits et adaptés à mon infrastructure informatique. Donc, même s'ils sont aussi génériques que possible, ils ne répondront pas nécessairement à vos besoins. Je vous conseille d'analyser attentivement ce qu'ils font et d'évaluer leur capacité à être installés de manière sécurisée sur vos serveurs.

Ce rôle configure une instance du démon Apache2.

Exigences

Nécessite Ansible >= 2.4

Dépendances

Si vous utilisez le profil de surveillance Zabbix, vous aurez besoin du rôle ansible-zabbix-agent

Famille OS

Ce rôle est disponible pour Debian

Fonctionnalités

À ce jour, le rôle peut être utilisé pour :

  • installer Apache2
  • configurer le fichier principal du serveur
  • créer des configurations de virtualhosts
  • gérer les modules activés
  • remplacer certaines configurations de modules
  • éléments de surveillance pour
    • Zabbix
  • faits locaux

Configuration

Serveur

Toutes les variables qui peuvent être remplacées sont stockées dans le fichier defaults/main.yml ainsi que dans le tableau ci-dessous. Pour voir les valeurs par défaut, veuillez vous référer à ce fichier.

Nom Description
apache2__version Choisissez la version d'apache2 à installer (telle qu'elle est disponible dans les dépôts OS) Ex : 2.4.25-3+deb9u5
apache2__service_enabled Un booléen qui active ou non le service apache au démarrage et à l'exécution
apache2__service_restartable Si vrai, le service apache sera redémarré automatiquement en cas de changements de configuration (mis à faux en production)
apache2__server_tokens Configure la verbosité du token serveur dans les pages d'erreur
apache2__server_signature Affiche ou non la signature du serveur sur les pages d'erreur
apache2__trace_enable Configure la méthode HTTP TRACE
apache2__ssl_ciphers Liste les ciphers SSL disponibles, par défaut seul un sous-ensemble recommandé est configuré
apache2__ssl_protocols Liste les protocoles SSL activés, par défaut tous sauf SSL 2/3
apache2__ssl_honorciphers Indique au serveur de préférer son ordre de chiffre plutôt que celui du client
apache2__log_formats Un dictionnaire contenant tous les formats de log disponibles dans apache.
apache2__listen_http Liste de port/hôte:port sur lesquels apache écoutera les requêtes HTTP
apache2__listen_https Liste de port/hôte:port sur lesquels apache écoutera les requêtes HTTPS

Note concernant apache2__listen_http(s), pour l'instant ces directives sont remplies manuellement. Je prévois de les générer automatiquement, mais cela semble compliqué car les virtual hosts peuvent être définis en utilisant include_role.

Les variables suivantes s'appliquent au serveur et peuvent être remplacées dans chaque virtual host :

Nom Description
apache2__serveradmin L'adresse email optionnelle de l'administrateur
apache2__allow_override_list La directive AllowOverrideList
apache2__allow_override La directive AllowOverride
apache2__options La directive Option

Pour configurer quels modules sont activés ou non, vous devez déclarer tous les noms de module dans l'une des trois listes suivantes :

  • apache2__modules_enabled_global
  • apache2__modules_enabled_group
  • apache2__modules_enabled_host

Par défaut, aucun module n'est activé, donc sachez qu'apache ne démarrera pas sans qu'un des modules mpm soit activé. Chaque entrée dans ces listes doit être le nom du module. Dans le cas où un module a un fichier '.conf' et un fichier '.load', ils seront automatiquement inclus si possible. De plus, si le rôle contient un fichier template dans le répertoire templates/modules.conf/(nom du module), il remplacera tout fichier de configuration existant de distribution.

Virtual Hosts

Chaque virtual host doit être déclaré avec un bloc vhost. Vous pouvez mettre un bloc vhost dans l'une des trois listes disponibles :

  • apache2__virtual_hosts_global
  • apache2__virtual_hosts_group
  • apache2__virtual_hosts_host

Par défaut, chaque virtual host écoute sur '*' et sur le port par défaut identifié selon le statut HTTP(s). Si le moteur SSL est 'ON', il utilise 443, sinon 80.

Seul un sous-ensemble de directives et de sections d'apache2 est implémenté dans ansible. Vous pouvez voir celles disponibles dans les fichiers directives sections. Si vous avez besoin d'une directive qui n'est pas implémentée, vous pouvez utiliser les éléments extra_parameters. Mais si un type de section manque, vous devez le fork et l'implémenter dans le rôle.

Chaque bloc vhost doit être mis dans un dictionnaire où la clé sera le nom du fichier de configuration vhost. Ensuite, chaque vhost doit être un dictionnaire qui peut contenir ces variables :

Nom Type Description
hosts chaîne ou tableau de chaînes/dictionnaire liste des interfaces sur lesquelles le vhost écoutera
hosts[] chaîne si un élément de la liste des hosts est une chaîne, il sera interprété comme "IP:PORT" ou "X.X.X.X:X"
hosts[].ip chaîne si un élément de la liste des hosts est un dictionnaire avec la clé 'ip', il sera interprété comme "IP"
hosts[].port int si un élément de la liste des hosts est un dictionnaire avec la clé 'port', il sera utilisé comme port d'écoute. Si cette clé n'est pas définie, elle sera déduite du protocole HTTP (voir ci-dessus)
server_name chaîne l'hôte du vhost
server_alias chaîne l'alias du nom d'hôte
server_admin chaîne l'adresse email optionnelle de l'administrateur
document_root chaîne Le chemin vers le dossier racine du document. Ce dossier sera automatiquement créé, car Apache ne démarrera pas s'il est manquant.
document_root_user chaîne Le propriétaire unix du dossier racine du document. Ceci ne s'applique que si la variable est définie
document_root_group chaîne Le groupe unix du dossier racine du document. Ceci ne s'applique que si la variable est définie
document_root_mode chaîne Le mode unix du dossier racine du document. Ceci ne s'applique que si la variable est définie. Veillez à ce qu'Apache ait toujours accès à ce dossier, au moins en mode lecture
error_log chaîne Le chemin vers le fichier de log d'erreur. Le fichier de log d'erreur sera créé dans ce répertoire, donc veuillez vous assurer qu'Apache a toujours les droits d'accès suffisants
error_log_user chaîne Le propriétaire unix du répertoire de log d'erreur
error_log_group chaîne Le groupe unix du répertoire de log d'erreur
allow_override chaîne La directive AllowOverride
allow_override_list chaîne La directive AllowOverrideList
options chaîne La directive Option
headers tableau Tableau de directives Header
files_match tableau de dictionnaires (voir ci-dessous) Contient la définition FileMatch, chacune doit être un dictionnaire avec les clés suivantes
files_match[].regexp chaîne L'expression régulière qui déclenche la correspondance de fichier
files_match[].actions tableau de chaînes La liste des directives Apache à exécuter lorsque cette correspondance de fichier est déclenchée
extra_parameters tableau de chaînes Toute directive Apache supplémentaire
https dictionnaire voir ci-dessous pour toutes les sous-clés https
https.enabled booléen Vrai par défaut, peut être utilisé pour désactiver https et conserver les chaînes de configuration
https.certificate_chain_file chaîne Le chemin vers la chaîne de certificats
https.verify_client chaîne Le type de vérification du certificat client à effectuer
https.verify_client_depth int La profondeur maximale pour la vérification du certificat client
https.ca_certificate_path chaîne Le chemin vers le répertoire des certificats CA
https.ca_certificate_file chaîne Le chemin vers le fichier de certificat CA
https.crl_path chaîne Le chemin vers le dossier CRL
https.crl_file chaîne Le chemin vers le fichier CRL

Faits

Par défaut, les faits locaux sont installés et exposent les variables suivantes :

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

Exemple

Playbook

Utilisez-le dans un playbook comme suit :

- hosts: all
  roles:
    - turgon37.apache2

Inventaire

  • Exemple de modules apache chargés manuellement
apache2__modules_enabled_group:
  - access_compat # fournit des supports pour les anciennes directives Allow,Order qui sont obsolètes
  - alias  # Fournit Alias
#  - auth_basic  # fournit l'authentification HTTP basique
  - authn_core
#  - authn_file  # authentification basée sur htpasswd
  - authz_core
#  - authz_host  # authentification basée sur ip/hôte
#  - authz_user  # authentification basée sur le nom d'utilisateur
#  - autoindex  # désactivé, les index sont désactivés
  - deflate # fournit la compression Gzip
  - dir # fournit DirectoryIndex
  - env  # fournit SetEnv
#  - filter  # fournit FilterChain
  - headers  # fournit RequestHeader
  - mime
  - mpm_prefork
  - negotiation # gère le type de contenu
  - php7.0
#  - proxy
#  - proxy_http
#  - setenvif
  - ssl  # Gère SSL
  - socache_shmcb  # requis par mod_ssl
  • Virtual host par défaut 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'
  • Redirection permanente simple de HTTP vers 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 vers 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 avec dossier racine et une application 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:
          # Politique de sécurité du contenu (CSP)
          #- set Content-Security-Policy "script-src 'self'; object-src 'self'"
          # Réduction des risques de sécurité des types MIME
          - set X-Content-Type-Options "nosniff"
          # Clickjacking
          - set X-Frame-Options "DENY"
          # Attaques par script intersite (XSS) réfléchies
          - set X-XSS-Protection "1; mode=block"
          - unset X-Powered-By
  • Virtual host HTTPS avec dossier racine et une application 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
À propos du projet

This role install and configure Apache2 webserver

Installer
ansible-galaxy install Turgon37.apache2
Licence
mit
Téléchargements
3.6k
Propriétaire
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté