JoergFiedler.freebsd-jailed-nginx
freebsd-jailed-nginx
Ce rôle fournit un serveur nginx en prison qui écoute sur localhost:{80,443}
pour les requêtes entrantes.
Le rôle offre également une configuration SSL fonctionnelle grâce aux services fournis par Let's Encrypt.
Vous devez fournir un fichier dhparam.pem
personnalisé. Créez un dossier portant le nom de votre serveur (example.com
) dans le dossier files
à côté de votre playbook.
Le certificat sera validé/généré chaque semaine. Pour faire fonctionner le serveur immédiatement, un certificat localhost auto-signé est installé. Vous pouvez générer vos certificats Let's Encrypt manuellement après le démarrage de la prison en utilisant la commande suivante :
/usr/local/bin/acme-client-weekly.sh
Il peut être utilisé par d'autres rôles pour servir des installations de WordPress ou Joomla. Un serveur SFTP est également configuré pour accéder au répertoire webroot, sécurisé par une authentification par clé publique.
Ce rôle peut également être utilisé pour créer un proxy SSL qui fait passer le trafic vers des prisons spécifiques à des domaines ou des sites externes.
Exigences
Ce rôle est destiné à être utilisé avec une installation FreeBSD fraîche. Il y a une boîte Vagrant avec des fournisseurs pour VirtualBox et EC2 que vous pouvez utiliser.
Variables de rôle
nginx_letsencrypt_enabled
Définissez sur yes
pour activer la gestion automatique des certificats avec Let's Encrypt pour tous les serveurs nginx. Si activé, cela installera l'outil acme-client
et préparera des configurations pour les serveurs. Par défaut : no
.
nginx_letsencrypt_acme_private_key
Utilisez cette variable pour spécifier la clé privée qui sera utilisée par le client acme pour communiquer avec Let's Encrypt. Par défaut : '''
.
nginx_letsencrypt_api_host
Le nom d'hôte du serveur avec lequel communiquer. Par défaut : acme-v02.api.letsencrypt.org
.
nginx_tarsnap_enabled
Indique si le webroot de tous les serveurs nginx doit être sauvegardé à l'aide de tarsnap. Doit être activé sur l'hôte lui-même (tarsnap_enabled: yes
). Par défaut : {{ tarsnap_enabled | default("no") }}
.
nginx_syslogd_server
Le serveur syslogd que nginx doit utiliser pour écrire les journaux d'erreurs et d'accès. Par défaut : {{ syslogd_server | default("localhost") }}
.
nginx_pf_redirect
Si défini sur yes
, le trafic vers les ports http(s) est redirigé vers le serveur nginx de cette prison. Par défaut : no
.
Si activé, la configuration par défaut redirigera le trafic dirigé vers les ports 80 et 443 de l'interface externe de l'hôte vers cette prison. Cette configuration peut être modifiée en utilisant la variable nginx_pf_rdrs
.
nginx_pf_rdrs
Cela configure comment la redirection du trafic de l'hôte vers la prison fonctionne. La configuration par défaut ressemble à ceci.
nginx_pf_rdrs:
- ports:
- 'http'
- 'https'
ext_ip: '{{ host_net_ext_ip }}'
ext_if: '{{ host_net_ext_if }}'
Cela signifie que tout le trafic se terminant sur l'interface externe de l'hôte avec une IP externe pour les ports https
et http
sera redirigé vers le port http
de NGINX fonctionnant à l'intérieur de la prison.
nginx_servers
Cette variable contient un tableau d'instances de serveur nginx pour cette prison. Vous pouvez l'utiliser pour configurer différents types de prisons nginx, par exemple un proxy de terminaison https, servir plusieurs sites web statiques ou un site web activé pour php. Consultez la section d'exemple ci-dessous.
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
Si le serveur doit gérer d'autres requêtes que celles dirigées vers server_name
. Fournissez une liste de noms de domaine séparés par un espace. Utilisez default
pour créer un serveur par défaut Nginx. Par défaut : ''
.
basic_auth_enabled
Définissez sur true
pour activer l'authentification de base pour ce serveur. Vous devez fournir le fichier htpasswd
et l'enregistrer dans le dossier {{ server_name }}/htpasswd
.
force_www
Si le serveur doit rediriger vers les noms de domaine www
. Si défini sur yes
, toutes les requêtes vers name
seront redirigées vers le sous-domaine www. Vous devez également ajouter www.name
à la propriété aliases
. Par défaut : no
.
https
Réglages liés à SSL/HTTPS.
enabled
Définissez sur yes
pour activer SSL/HTTPS pour ce serveur. Les requêtes HTTP seulement seront redirigées vers HTTPS.
letsencrypt_enabled
Si défini, https est activé pour ce serveur et des certificats seront créés par Let's Encrypt et acme-client
. Vous devez également définir nginx_letsencrypt_enabled
sur yes
pour activer cette fonction. Par défaut : no
.
name
Le nom de domaine de ce serveur, par exemple example.com
. Par défaut : default
.
php
Paramètres liés à PHP
fpm_enabled
Définissez sur true pour installer et activer le package php-fpm
. Si activé, les packages suivants listés dans nginx_php_fpm_pkgs
seront installés. Par défaut : no
.
fastcgi_cache
Définissez sur off
pour désactiver le cache fastcgi. Par défaut : z_nginx
.
max_requests
Le nombre de requêtes que chaque processus enfant doit exécuter avant de redémarrer. Par défaut : 1000
.
max_children
Le nombre maximum de processus enfants à créer. Par défaut : 5
.
memory_limit
Cela fixe la quantité maximum de mémoire en octets qu'un script est autorisé à allouer. Par défaut : 128M
.
upload_max_filesize
La taille maximum d'un fichier téléchargé. Par défaut : 48M
.
post_max_size
Fixe la taille maximum des données post autorisées. Par défaut : 64M
.
sftp_enabled
Activez sftp
pour ce serveur. Crée un utilisateur et ajuste les paramètres comme décrit ci-dessous. Par défaut : false
.
sftp
Réglages utilisés pour configurer l'utilisateur et configurer SSHD afin de permettre l'accès au répertoire racine du serveur web pour télécharger des fichiers.
user
Le nom de l'utilisateur sftp. Par défaut : 'sftp_{{ name | truncate(5, True, "") }}'
.
uuid
L'uuid de l'utilisateur sftp. Par défaut : 5000
.
home
Le répertoire personnel de l'utilisateur. sshd
changera de racine pour ce répertoire. Fixez le répertoire racine du serveur web lorsqu'il n'est pas défini. Par défaut : '/srv/{{ name }}'
.
port
Le port externe qui doit être redirigé vers la prison en utilisant ce rôle. Par défaut : 10022
.
authorized_keys
La clé publique qui doit être utilisée pour authentifier l'utilisateur. Par défaut : '{{ host_sshd_authorized_keys_file }}'
.
Dépendances
Exemple de Playbook
Hôte proxy, qui redirige le trafic vers un autre serveur externe.
- 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'
Serveur Nginx avec module php-fpm
et 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'
Licence
BSD
Informations sur l'auteur
Si vous aimez ce projet ou si vous avez des idées pour l'améliorer, merci de proposer une issue sur GitHub. Merci.