Turgon37.apache2

Ansible Rolle Apache2

Build-Status Lizenz Ansible Rolle

Beschreibung

:grey_exclamation: Bevor Sie diese Rolle verwenden, beachten Sie bitte, dass all meine Ansible-Rollen vollständig auf meine IT-Infrastruktur zugeschnitten sind. Selbst wenn sie so generisch wie möglich sind, erfüllen sie möglicherweise nicht Ihre Bedürfnisse. Ich empfehle Ihnen, genau zu analysieren, was sie tun, und ihre Fähigkeit zu bewerten, sicher auf Ihren Servern installiert zu werden.

Diese Rolle konfiguriert eine Instanz des Apache2-Daemons.

Anforderungen

Benötigt Ansible >= 2.4

Abhängigkeiten

Wenn Sie das Zabbix-Überwachungsprofil verwenden, benötigen Sie die Rolle ansible-zabbix-agent.

Betriebssystem-Familie

Diese Rolle ist für Debian verfügbar.

Funktionen

Bis heute kann die Rolle verwendet werden, um:

  • Apache2 zu installieren
  • die Hauptserverdatei zu konfigurieren
  • Konfigurationen für virtuelle Hosts zu erstellen
  • aktivierte Module zu verwalten
  • einige Modulkonstruktionen zu überschreiben
  • Überwachungselemente für
    • Zabbix
  • lokale Fakten

Konfiguration

Server

Alle variablen, die überschrieben werden können, sind in der Datei defaults/main.yml sowie in der Tabelle unten gespeichert. Um die Standardwerte zu sehen, beziehen Sie sich bitte auf diese Datei.

Name Beschreibung
apache2__version Wählen Sie die zu installierende Apache2-Version (sofern im Betriebssystem-Repository verfügbar) z.B. 2.4.25-3+deb9u5
apache2__service_enabled Ein boolescher Wert, der den Apache-Dienst beim Booten und zur Laufzeit aktiviert oder nicht
apache2__service_restartable Wenn wahr, wird der Apache-Dienst bei Konfigurationsänderungen automatisch neu gestartet (in der Produktion auf falsch setzen)
apache2__server_tokens Konfigurieren Sie die Ausführlichkeit des Server-Tokens in Fehlermeldungen
apache2__server_signature Zeigt das Server-Signatur in Fehlermeldungen an oder nicht
apache2__trace_enable Konfigurieren Sie die HTTP TRACE-Methode
apache2__ssl_ciphers Liste der verfügbaren SSL-Verschlüsselungen, standardmäßig ist nur eine empfohlene Teilmenge konfiguriert
apache2__ssl_protocols Liste der aktivierten SSL-Protokolle, standardmäßig alle außer SSL 2/3
apache2__ssl_honorciphers Wiesen Sie dem Server an, seine Verschlüsselungsreihenfolge anstelle der des Clients zu bevorzugen
apache2__log_formats Ein Wörterbuch, das alle verfügbaren Protokollformate in Apache enthält.
apache2__listen_http Liste von Port/Host:Port, auf dem Apache HTTP-Anfragen hören wird
apache2__listen_https Liste von Port/Host:Port, auf dem Apache HTTPS-Anfragen hören wird

Hinweis zu apache2__listen_http(s): Derzeit werden diese Direktiven manuell ausgefüllt. Ich plante, sie automatisch zu generieren, aber es scheint kompliziert zu sein, da virtuelle Hosts mithilfe von include_role definiert werden können.

Die folgenden Variablen gelten für den Server und können in jedem virtuellen Host überschrieben werden:

Name Beschreibung
apache2__serveradmin Die optionale E-Mail-Adresse des Administrators
apache2__allow_override_list Die AllowOverrideList-Direktive
apache2__allow_override Die AllowOverride-Direktive
apache2__options Die Option-Direktive

Um zu konfigurieren, welche Module aktiviert sind oder nicht, müssen Sie alle Modulnamen in einer der folgenden drei Listen deklarieren:

  • apache2__modules_enabled_global
  • apache2__modules_enabled_group
  • apache2__modules_enabled_host

Standardmäßig ist kein Modul aktiviert, beachten Sie daher, dass Apache nicht gestartet wird, wenn keines der MPM-Module aktiviert ist. Jedes Element in diesen Listen muss der Modulname sein. Falls ein Modul eine '.conf' und eine '.load'-Datei hat, werden diese automatisch aufgenommen, falls möglich. Darüber hinaus, wenn die Rolle eine Vorlagendatei im Verzeichnis templates/modules.conf/(modulname) enthält, wird diese die vorhandene Konfigurationsdatei der Distribution ersetzen.

Virtuelle Hosts

Jeder virtuelle Host muss mit einem vhost-Block deklariert werden. Sie können einen vhost-Block in eine der drei verfügbaren Listen einfügen.

  • apache2__virtual_hosts_global
  • apache2__virtual_hosts_group
  • apache2__virtual_hosts_host

Standardmäßig hört jeder virtuelle Host auf '*' und dem Standardport, der gemäß dem HTTP(s)-Status identifiziert wurde. Wenn die SSL-Engine 'AN' ist, verwendet sie 443, andernfalls 80.

Es sind nur einige Apache2-Direktiven und -Sektionen in Ansible implementiert. Sie können die Verfügbaren in den Dateien directives sections sehen. Wenn Sie eine Direktive benötigen, die nicht implementiert ist, können Sie die extra_parameters-Elemente verwenden. Wenn jedoch ein Abschnittstyp fehlt, müssen Sie ihn forken und in der Rolle implementieren.

Jeder vhost-Block muss in ein Wörterbuch gesetzt werden, wobei der Schlüssel der Dateiname der vhost-Konfiguration sein wird. Dann muss jeder vhost ein Wörterbuch sein, das diese Variablen enthalten kann:

Name Typ Beschreibung
hosts Zeichenkette oder Array von Zeichenketten/Wörterbuch Liste der Schnittstellen, auf denen der vhost hören wird
hosts[] Zeichenkette Wenn ein Element der Hosts-Liste eine Zeichenkette ist, wird es als "IP:PORT" oder "X.X.X.X:X" interpretiert
hosts[].ip Zeichenkette Wenn ein Element der Hosts-Liste ein Wörterbuch mit 'ip'-Schlüssel ist, wird es als "IP" interpretiert
hosts[].port Ganzzahl Wenn ein Element der Hosts-Liste ein Wörterbuch mit 'port'-Schlüssel ist, wird es als Anhörport verwendet. Wenn dieser Schlüssel nicht setz wird er vom HTTP-Protokoll abgeleitet (siehe oben).
server_name Zeichenkette Der Host des vhosts
server_alias Zeichenkette Der Hostname-Alias
server_admin Zeichenkette Die optionale E-Mail-Adresse des Administrators
document_root Zeichenkette Der Pfad zum Dokumentwurzelverzeichnis. Dieses Verzeichnis wird automatisch erstellt, da Apache nicht startet, wenn es fehlt.
document_root_user Zeichenkette Der Unix-Besitzer des Dokumentwurzelverzeichnisses. Dies wird nur angewendet, wenn die Variable definiert ist.
document_root_group Zeichenkette Die Unix-Gruppe des Dokumentwurzelverzeichnisses. Dies wird nur angewendet, wenn die Variable definiert ist.
document_root_mode Zeichenkette Der Unix-Modus des Dokumentwurzelverzeichnisses. Dies wird nur angewendet, wenn die Variable definiert ist. Achten Sie darauf, dass Apache weiterhin mindestens im Nur-Lese-Modus Zugriff auf dieses Verzeichnis hat.
error_log Zeichenkette Der Pfad zur Fehlerprotokolldatei. Die Fehlerprotokolldatei wird in diesem Verzeichnis erstellt, stellen Sie daher sicher, dass Apache ausreichend Zugriffsrechte hat.
error_log_user Zeichenkette Der Unix-Besitzer des Fehlerprotokolldateibereichs
error_log_group Zeichenkette Die Unix-Gruppe des Fehlerprotokolldateibereichs
allow_override Zeichenkette Die AllowOverride-Direktive
allow_override_list Zeichenkette Die AllowOverrideList-Direktive
options Zeichenkette Die Option-Direktive
headers Array Array von Header-Direktiven
files_match Array von Wörterbüchern (siehe unten) Beinhaltet die Definition von FileMatch, jedes muss ein Wörterbuch mit folgenden Schlüsseln sein
files_match[].regexp Zeichenkette Der reguläre Ausdruck, der das Datei-Matching auslöst
files_match[].actions Array von Zeichenketten Die Liste der Apache-Direktiven, die ausgeführt werden sollen, wenn dieses Datei-Matching ausgelöst wird
extra_parameters Array von Zeichenketten Jegliche zusätzlichen Apache-Direktiven
https Wörterbuch siehe unten für alle https-Unter Schlüssel
https.enabled boolescher Wert Standardmäßig wahr, kann verwendet werden, um HTTPS zu deaktivieren und Konfigurationszeichenfolgen zu erhalten
https.certificate_chain_file Zeichenkette Der Pfad zur Zertifikatkette
https.verify_client Zeichenkette Der Typ der durchzuführenden Überprüfung des Client-Zertifikats
https.verify_client_depth Ganzzahl Die maximale Tiefe für die Überprüfung des Client-Zertifikats
https.ca_certificate_path Zeichenkette Der Pfad zum CA-Zertifikatsverzeichnis
https.ca_certificate_file Zeichenkette Der Pfad zur CA-Zertifikatsdatei
https.crl_path Zeichenkette Der Pfad zum CRL-Ordner
https.crl_file Zeichenkette Der Pfad zur CRL-Datei

Fakten

Standardmäßig werden die lokalen Fakten installiert und die folgenden Variablen bereitgestellt:

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

Beispiel

Playbook

Verwenden Sie es in einem Playbook wie folgt:

- hosts: all
  roles:
    - turgon37.apache2

Inventar

  • Beispiel für manuell geladene Apache-Module
apache2__modules_enabled_group:
  - access_compat # Unterstützung für alte Direktiven Allow, Order, die veraltet sind
  - alias  # stellt Alias bereit
#  - auth_basic  # stellt die grundlegende HTTP-Authentifizierung bereit
  - authn_core
#  - authn_file  # Authentifizierung basierend auf htpasswd
  - authz_core
#  - authz_host  # Authentifizierung basierend auf ip/host
#  - authz_user  # Authentifizierung basierend auf Benutzername
#  - autoindex  # deaktiviert, Indizes sind deaktiviert
  - deflate # stellt Gzip-Kompression bereit
  - dir # stellt DirectoryIndex bereit
  - env  # stellt SetEnv bereit
#  - filter  # stellt FilterChain bereit
  - headers  # stellt die RequestHeader bereit
  - mime
  - mpm_prefork
  - negotiation # verwaltet den Inhaltstyp
  - php7.0
#  - proxy
#  - proxy_http
#  - setenvif
  - ssl  # verarbeitet SSL
  - socache_shmcb  # erforderlich durch mod_ssl
  • Standard Debian virtueller Host
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'
  • Einfache permanente Weiterleitung von HTTP zu 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 von HTTPS zu 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
  • HTTP virtueller Host mit Dokumentwurzel und einer PHP-Anwendung (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'"
          # Reduzierung der Sicherheitsrisiken des MIME-Typs
          - set X-Content-Type-Options "nosniff"
          # Clickjacking
          - set X-Frame-Options "DENY"
          # Reflexive Cross-Site-Scripting (XSS)-Angriffe
          - set X-XSS-Protection "1; mode=block"
          - unset X-Powered-By
  • HTTPS virtueller Host mit Dokumentwurzel und einer PHP-Anwendung (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
Über das Projekt

This role install and configure Apache2 webserver

Installieren
ansible-galaxy install Turgon37.apache2
GitHub Repository
Lizenz
mit
Downloads
3.6k
Besitzer
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté