Turgon37.apache2
Ansible Rola Apache2
Opis
:grey_exclamation: Zanim skorzystasz z tej roli, pamiętaj, że wszystkie moje role Ansible są napisane i dostosowane do mojej infrastruktury IT. Mimo że są jak najbardziej ogólne, mogą nie spełnić Twoich potrzeb. Zachęcam do dokładnej analizy ich działania i oceny możliwości ich bezpiecznej instalacji na Twoich serwerach.
Ta rola konfiguruje instancję demona Apache2.
Wymagania
Wymaga Ansible >= 2.4
Zależności
Jeśli używasz profilu monitorowania Zabbix, będziesz potrzebować roli ansible-zabbix-agent.
Rodzina systemów operacyjnych
Ta rola jest dostępna dla Debiana.
Funkcje
W tej chwili rola może być używana do:
- instalacji Apache2
- konfiguracji głównego pliku serwera
- tworzenia konfiguracji wirtualnych hostów
- zarządzania włączonymi modułami
- nadpisywania niektórych konfiguracji modułów
- monitorowania elementów dla
- Zabbix
- lokalnych faktów
Konfiguracja
Serwer
Wszystkie zmienne, które można nadpisać, są przechowywane w pliku defaults/main.yml oraz w poniższej tabeli. Aby zobaczyć domyślne wartości, zapoznaj się z tym plikiem.
Nazwa | Opis |
---|---|
apache2__version |
Wybierz wersję apache2 do zainstalowania (dostępną w repozytoriach OS) np. 2.4.25-3+deb9u5 |
apache2__service_enabled |
Zmienna logiczna, która włącza lub wyłącza usługę apache przy uruchamianiu i w trakcie działania |
apache2__service_restartable |
Jeśli ustawione na prawdę, usługa apache będzie automatycznie restartowana po zmianach konfiguracyjnych (ustawione na fałsz w produkcji) |
apache2__server_tokens |
Konfiguracja szczegółowości tokenu serwera na stronach błędów |
apache2__server_signature |
Wydrukować lub nie podpis serwera na stronach błędów |
apache2__trace_enable |
Konfiguracja metody HTTP TRACE |
apache2__ssl_ciphers |
Lista dostępnych szyfrów SSL, domyślnie skonfigurowany jest tylko zalecany podzbiór |
apache2__ssl_protocols |
Lista włączonych protokołów SSL, domyślnie wszystkie, z wyjątkiem SSL 2/3 |
apache2__ssl_honorciphers |
Powiadami informuje serwer, aby preferował swoją kolejność szyfrów zamiast kolejności klienta |
apache2__log_formats |
Słownik zawierający wszystkie dostępne formaty logów w apache. |
apache2__listen_http |
Lista portów/host:port, na których apache będzie nasłuchiwać żądania http |
apache2__listen_https |
Lista portów/host:port, na których apache będzie nasłuchiwać żądania https |
Uwaga dotycząca apache2__listen_http(s)
: na razie te dyrektywy są wypełniane ręcznie, planowałem wygenerować je automatycznie, ale okazuje się, że jest to skomplikowane, ponieważ wirtualne hosty mogą być definiowane z wykorzystaniem include_role.
Poniższe zmienne odnoszą się do serwera i mogą być nadpisywane w każdym wirtualnym hoście:
Nazwa | Opis |
---|---|
apache2__serveradmin |
Opcjonalny adres e-mail administratora |
apache2__allow_override_list |
Dyrektywa AllowOverrideList |
apache2__allow_override |
Dyrektywa AllowOverride |
apache2__options |
Dyrektywa Option |
Aby skonfigurować, które moduły są włączone, musisz zadeklarować wszystkie nazwy modułów w jednej z trzech poniższych list:
apache2__modules_enabled_global
apache2__modules_enabled_group
apache2__modules_enabled_host
Domyślnie żaden moduł nie jest włączony, więc warto wiedzieć, że apache nie wystartuje bez włączonego modułu mpm. Każdy wpis w tych listach musi być nazwą modułu. W przypadku kiedy moduł ma pliki '.conf' i '.load', będą one automatycznie dołączane, jeśli to możliwe. Ponadto, jeśli rola zawiera plik szablonu w katalogu templates/modules.conf/(nazwa modułu)
, zastąpi on wszelkie istniejące pliki konfiguracyjne dystrybucji.
Wirtualne hosty
Każdy wirtualny host musi być zadeklarowany w bloku vhost. Możesz umieścić blok vhost w jednej z trzech dostępnych list:
apache2__virtual_hosts_global
apache2__virtual_hosts_group
apache2__virtual_hosts_host
Domyślnie każdy wirtualny host nasłuchuje na '*' i na domyślnym porcie zgodnie z statusem HTTP(s). Jeśli SSL Engine jest 'WŁĄCZONY', używa portu 443, w przeciwnym razie 80.
Jedynie podzbiór dyrektyw i sekcji apache2 jest zaimplementowany w ansible, dostępny w plikach dyrektywy sekcje. Jeśli potrzebujesz dyrektywy, która nie jest zaimplementowana, możesz użyć pozycji extra_parameters
. Jeśli brakuje typu sekcji, musisz to zmodyfikować i zaimplementować w roli.
Każdy blok vhost musi być umieszczony w słowniku, gdzie kluczem będzie nazwa pliku konfiguracji vhost. Każdy vhost musi być słownikiem, który może zawierać następujące zmienne:
Nazwa | Typ | Opis |
---|---|---|
hosts | ciąg lub tablica ciągów/słowników | lista interfejsów, na których vhost będzie nasłuchiwać |
hosts[] | ciąg | jeśli element listy hosts jest łańcuchem, zostanie zinterpretowany jako "IP:PORT" lub "X.X.X.X:X" |
hosts[].ip | ciąg | jeśli element listy hosts jest słownikiem z kluczem 'ip', zostanie zinterpretowany jako "IP" |
hosts[].port | int | jeśli element listy hosts jest słownikiem z kluczem 'port', będzie użyty jako port nasłuchu. Jeśli ten klucz nie jest ustawiony, zostanie wywnioskowany z protokołu HTTP (patrz powyżej) |
server_name | ciąg | host vhost |
server_alias | ciąg | alias nazwy hosta |
server_admin | ciąg | opcjonalny adres e-mail administratora |
document_root | ciąg | Ścieżka do folderu głównego dokumentu. Ten katalog zostanie automatycznie utworzony, ponieważ Apache nie uruchomi się, jeśli go brakuje. |
document_root_user | ciąg | Użytkownik unixowy folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana |
document_root_group | ciąg | Grupa unixowa folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana |
document_root_mode | ciąg | Tryb unixowy folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana. Upewnij się, że apache ma przynajmniej dostęp do tego folderu w trybie tylko do odczytu |
error_log | ciąg | Ścieżka do pliku dziennika błędów. Plik dziennika błędów zostanie utworzony w tym katalogu, upewnij się, że apache ma wystarczające uprawnienia do dostępu |
error_log_user | ciąg | Użytkownik unixowy katalogu dziennika błędów |
error_log_group | ciąg | Grupa unixowa katalogu dziennika błędów |
allow_override | ciąg | Dyrektywa AllowOverride |
allow_override_list | ciąg | Dyrektywa AllowOverrideList |
options | ciąg | Dyrektywa Option |
headers | tablica | Tablica dyrektyw Header |
files_match | tablica słowników (patrz poniżej) | Zawiera definicję FileMatch, każdy z nich musi być słownikiem z następującymi kluczami |
files_match[].regexp | ciąg | Wyrażenie regularne, które uruchamia dopasowanie pliku |
files_match[].actions | tablica ciągów | Lista dyrektyw Apache do wykonania, gdy to dopasowanie pliku zostanie uruchomione |
extra_parameters | tablica ciągów | Dowolne dodatkowe dyrektywy Apache |
https | słownik | Zobacz poniżej dla wszystkich podkluczy https |
https.enabled | bool | Domyślnie prawda, może być użyta do wyłączenia https i zachowania konfiguracji |
https.certificate_chain_file | ciąg | Ścieżka do łańcucha certyfikatów |
https.verify_client | ciąg | Typ weryfikacji certyfikatu klienta do wykonania |
https.verify_client_depth | int | Maksymalna głębokość dla weryfikacji certyfikatu klienta |
https.ca_certificate_path | ciąg | Ścieżka do katalogu certyfikatów CA |
https.ca_certificate_file | ciąg | Ścieżka do pliku certyfikatu CA |
https.crl_path | ciąg | Ścieżka do katalogu CRL |
https.crl_file | ciąg | Ścieżka do pliku CRL |
Fakty
Domyślnie lokalne fakty są instalowane i udostępniają następujące zmienne:
ansible_local.apache2.version_full
ansible_local.apache2.version_major
Przykład
Playbook
Użyj go w playbooku w następujący sposób:
- hosts: all
roles:
- turgon37.apache2
Inwentaryzacja
- Przykład ręcznie załadowanych modułów apache
apache2__modules_enabled_group:
- access_compat # wsparcie dla starych dyrektyw Allow,Order, które są przestarzałe
- alias # zapewnia Alias
# - auth_basic # zapewnia podstawowe uwierzytelnianie HTTP
- authn_core
# - authn_file # uwierzytelnianie oparte na htpasswd
- authz_core
# - authz_host # uwierzytelnianie oparte na ip/hoście
# - authz_user # uwierzytelnianie oparte na nazwie użytkownika
# - autoindex # wyłączone, indeksy są wyłączone
- deflate # zapewnia kompresję Gzip
- dir # zapewnia DirectoryIndex
- env # zapewnia SetEnv
# - filter # zapewnia FilterChain
- headers # zapewnia RequestHeader
- mime
- mpm_prefork
- negotiation # obsługuje typ zawartości
- php7.0
# - proxy
# - proxy_http
# - setenvif
- ssl # obsługuje SSL
- socache_shmcb # wymagany przez mod_ssl
- Domyślny wirtualny host 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'
- Prosty stały przekierowanie z HTTP do 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 z HTTPS do 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
- Wirtualny host HTTP z folderem głównym i aplikacją 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:
# Polityka bezpieczeństwa treści (CSP)
#- set Content-Security-Policy "script-src 'self'; object-src 'self'"
# Zmniejszenie ryzyka związanego z typami MIME
- set X-Content-Type-Options "nosniff"
# Clickjacking
- set X-Frame-Options "DENY"
# Ochrona przed atakami Cross-Site Scripting (XSS)
- set X-XSS-Protection "1; mode=block"
- unset X-Powered-By
- Wirtualny host HTTPS z folderem głównym i aplikacją 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
ansible-galaxy install Turgon37.apache2