JoergFiedler.freebsd-jailed-nginx
freebsd-jailed-nginx
Diese Rolle bietet einen in einem Jail laufenden Nginx-Server, der auf localhost:{80,443}
auf eingehende Anfragen hört.
Die Rolle umfasst auch eine funktionierende SSL-Konfiguration, die mit Hilfe von Let's Encrypt bereitgestellt wird.
Sie müssen eine benutzerdefinierte dhparam.pem
-Datei bereitstellen. Erstellen Sie einen Ordner mit dem Namen Ihres Servernamens (example.com
) im Ordner files
, der neben Ihrem Playbook liegt.
Das Zertifikat wird regelmäßig wöchentlich validiert/erzeugt. Um den Server sofort zum Laufen zu bringen, wird ein selbstsigniertes localhost-Zertifikat installiert. Sie können Ihre Let's Encrypt-Zertifikate manuell generieren, nachdem das Jail gestartet wurde, indem Sie den folgenden Befehl verwenden:
/usr/local/bin/acme-client-weekly.sh
Es kann auch von anderen Rollen verwendet werden, um WordPress- oder Joomla-Installationen bereitzustellen. Um auf das Webroot-Verzeichnis zuzugreifen, ist auch ein SFTP-Server konfiguriert, der durch öffentliche Schlüsselauthentifizierung gesichert ist.
Diese Rolle kann auch verwendet werden, um einen SSL-terminierenden Proxy zu erstellen, der den Verkehr an domain-spezifische Jails oder externe Seiten weiterleitet.
Anforderungen
Diese Rolle ist dazu gedacht, mit einer frischen FreeBSD-Installation verwendet zu werden. Es gibt eine Vagrant-Box mit Anbietern für VirtualBox und EC2, die Sie verwenden können.
Rollenvariablen
nginx_letsencrypt_enabled
Setzen Sie auf yes
, um das automatische Zertifikatsmanagement mit Let's Encrypt für alle Nginx-Server zu aktivieren. Wenn aktiviert, wird das acme-client
-Tool installiert und einige Konfigurationen für die Server vorbereitet. Standard: no
.
nginx_letsencrypt_acme_private_key
Verwenden Sie diese Variable, um den privaten Schlüssel anzugeben, der vom acme-Client zur Kommunikation mit Let's Encrypt verwendet wird. Standard: '''
.
nginx_letsencrypt_api_host
Der Hostname des Servers, mit dem kommuniziert werden soll. Standard: acme-v02.api.letsencrypt.org
.
nginx_tarsnap_enabled
Ob das Webroot aller Nginx-Server mit Tarsnap gesichert werden soll. Muss auf dem Host selbst aktiviert werden (tarsnap_enabled: yes
). Standard: {{ tarsnap_enabled | default("no") }}
.
nginx_syslogd_server
Der Syslogd-Server, den Nginx verwenden soll, um Fehler- und Zugriffsprotokolle zu schreiben. Standard: {{ syslogd_server | default("localhost") }}
.
nginx_pf_redirect
Wenn auf yes
gesetzt, wird der Verkehr zu den http(s)-Ports an diesen Nginx-Server im Jail weitergeleitet. Standard: no
.
Wenn aktiviert, wird die Standardkonfiguration den Datenverkehr, der an die Ports 80 und 443 der externen Schnittstelle des Hosts gerichtet ist, an dieses Jail weiterleiten. Diese Konfiguration kann mit der Variable nginx_pf_rdrs
geändert werden.
nginx_pf_rdrs
Diese Konfiguration regelt, wie die Verkehrsumleitung vom Host zum Jail funktioniert. Die Standardkonfiguration sieht so aus:
nginx_pf_rdrs:
- ports:
- 'http'
- 'https'
ext_ip: '{{ host_net_ext_ip }}'
ext_if: '{{ host_net_ext_if }}'
Das bedeutet, dass der gesamte Verkehr, der an die externe Schnittstelle des Hosts mit der externen IP für beide Ports https
und http
endet, an den Port http
des NGINX weitergeleitet wird, der im Jail läuft.
nginx_servers
Diese Variable enthält ein Array von Nginx-Serverinstanzen für dieses Jail. Sie können dies verwenden, um verschiedene Arten von Nginx-Jails zu konfigurieren, z. B. einen HTTPS-terminierenden Proxy, mehrere statische Websites oder eine PHP-fähige Website. Siehe den Beispielabschnitt unten.
aliases: ''
basic_auth_enabled: no
force_www: no
https:
enabled: no
letsencrypt_enabled: no
key_file: 'localhost-key.pem'
certbundle_file: 'localhost-certbundle.pem'
dhparam_file: 'localhost-dhparam.pem'
name: 'localhost'
php_fpm_enabled: no
sftp:
user: '{{ server_sftp_user }}'
uuid: '{{ server_sftp_uuid }}'
authorized_keys: '{{ server_sftp_authorized_keys }}'
home: '{{ server_home }}'
port: '{{ server_sftp_port }}'
sftp_enabled: no
webroot: '{{ server_webroot }}'
aliases
Wenn der Server weitere Anfragen als die an server_name
gerichtet verarbeiten soll. Geben Sie eine Liste von Domainnamen getrennt durch Leerzeichen an. Verwenden Sie default
, um einen NGINX-Standardserver zu erstellen. Standard: ''
.
basic_auth_enabled
Setzen Sie auf true
, um grundlegende Authentifizierung für diesen Server zu aktivieren. Sie müssen die htpasswd
-Datei bereitstellen und unter files {{ server_name }}/htpasswd
speichern.
force_www
Wenn der Server auf www
-Domainnamen umleiten soll. Wenn auf yes
gesetzt, werden alle Anforderungen an name
auf die www-Subdomain umgeleitet. Sie müssen auch www.name
zur aliases
-Eigenschaft hinzufügen. Standard: no
.
https
Einstellungen im Zusammenhang mit SSL/HTTPS.
enabled
Setzen Sie auf yes
, um SSL/HTTPS für diesen Server zu aktivieren. HTTP-Anfragen werden auf HTTPS umgeleitet.
letsencrypt_enabled
Wenn gesetzt, wird HTTPS für diesen Server aktiviert und die Zertifikate werden von Let's Encrypt und acme-client
erstellt. Sie müssen auch nginx_letsencrypt_enabled
auf yes
setzen, um diese Funktion zu aktivieren. Standard: no
.
name
Der Domainname dieses Servers, z. B. example.com
. Standard: default
.
php
Einstellungen im Zusammenhang mit PHP.
fpm_enabled
Setzen Sie auf true
, um das Paket php-fpm
zu installieren und zu aktivieren. Wenn aktiviert, werden die folgenden Pakete, die in nginx_php_fpm_pkgs
aufgeführt sind, installiert. Standard: no
.
fastcgi_cache
Setzen Sie auf off
, um den FastCGI-Cache zu deaktivieren. Standard: z_nginx
.
max_requests
Die Anzahl der Anforderungen, die jeder Kindprozess ausführen soll, bevor er neu gestartet wird. Standard: 1000
.
max_children
Die maximale Anzahl an Kindprozessen, die erstellt werden sollen. Standard: 5
.
memory_limit
Dies legt die maximale Menge an Speicher in Bytes fest, die ein Skript zuweisen darf. Standard: 128M
.
upload_max_filesize
Die maximale Größe einer hochgeladenen Datei. Standard: 48M
.
post_max_size
Hiermit wird die maximale Größe der zulässigen Postdaten festgelegt. Standard: 64M
sftp_enabled
Aktiviert sftp
für diesen Server. Erstellt einen Benutzer und passt die Einstellungen wie unten beschrieben an. Standard: false
.
sftp
Einstellungen, die verwendet werden, um den Benutzer einzurichten und SSHD zu konfigurieren, um den Zugriff auf das Webserver-Wurzelverzeichnis zum Hochladen von Dateien zu ermöglichen.
user
Der Benutzername des sftp-Benutzers. Standard: 'sftp_{{ name | truncate(5, True, "") }}'
.
uuid
Die UUID des sftp-Benutzers. Standard: 5000
.
home
Das Home-Verzeichnis des Benutzers. sshd
wechselt das Root-Verzeichnis zu diesem Verzeichnis. Setzen Sie das Home-Verzeichnis des Webservers, wenn nicht festgelegt. Standard: '/srv/{{ name }}'
.
port
Der externe Port, der mit diesem Rolleneinsatz an das Jail weitergeleitet werden soll. Standard: 10022
.
authorized_keys
Der öffentliche Schlüssel, der zur Authentifizierung des Benutzers verwendet werden soll. Standard: '{{ host_sshd_authorized_keys_file }}'
.
Abhängigkeiten
Beispiel-Playbook
Proxy-Host, der den Verkehr an einen anderen externen Server weiterleitet.
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
nginx_pf_redirect: true
nginx_letsencrypt_enabled: yes
nginx_servers:
- name: 'test.moumantai.de'
https:
enabled: yes
letsencrypt_enabled: yes
proxy:
host: 'www.freebsd.org'
scheme: 'https'
port: 443
local: no
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
Nginx-Server mit php-fpm
-Modul und HTTPS.
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
nginx_pf_redirect: yes
nginx_servers:
- name: 'default'
https:
enabled: yes
php:
fpm_enabled: yes
sftp_enabled: yes
sftp:
authorized_keys: '~/.vagrant.d/insecure_private_key.pub'
Lizenz
BSD
Informationen zum Autor
Wenn Ihnen das Projekt gefällt oder Sie Ideen zur Verbesserung haben, öffnen Sie bitte ein Problem auf GitHub. Danke.