Turgon37.apache2
Ansible Rolle Apache2
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
ansible-galaxy install Turgon37.apache2