Table des matières
Lighttpd
Sur la distribution DietPi, j'utilise Lighttpd comme serveur web. Il est léger et rapide. Je me note ici quelques bricoles tout à fait personnelles afin que je les retrouver facilement, mais si ça peut aider…
Le fichier de configuration de Lighttpd est /var/lighttpd/lighttpd.conf
. Pour prendre en compte un changement de config:
sudo service lighttpd force-reload
Steamer les données
Si vous utilisez NextCloud sur un SBC (genre Raspberry), cette option va vous changer la vie.
Par défaut, Lighttpd va utiliser un fichier temporaire pour récupérer toutes les données de l'applicatif (php ou autre) et attendra la fin de l'applicatif pour envoyer au client. C'est problématique quand vous avez un NextCloud pour récupérer de gros fichiers (puisqu'il va ainsi copier localement intégralement le fichier). On change donc le paramètre suivant afin que Lighttpd stream en direct les données produits par l'applicatif.
L'applicatif va donc tourner plus longtemps (le temps que tout soit envoyé au client), mais cela évite des I/O disque monstrueuses (ce qui est problématique sur un Raspberry).
# Streamer les données vers le client plutôt qu'utiliser un fichiers temporaire server.stream-response-body = 1
Activer les logs
Les logs ne sont pas actifs dans DietPi car cette distrib essaie de minimiser les écritures disque.
# Activer les Access logs: server.modules += ( "mod_access", "mod_accesslog", ) accesslog.format = "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" accesslog.filename = "/var/log/lighttpd/access.log"
Si je ne veux pas loguer certaines requêtes provenant de certaines IP et qui demandent certaines URL, exemple:
$HTTP["remoteip"] == "12.34.56.78" { $HTTP["url"] =~ "^/nextcloud/ocs-provider/" { accesslog.filename = "" } }
Ne pas indiquer la version
Comme pour tout serveur http, par mesure de sécurité il ne faut pas indiquer la version du serveur dans les entêtes http:
# Ne pas donner le nom et version du serveur dans les réponses. server.tag=""
Interdire les scans
Dès que vous avez un serveur web ouvert sur le web, il sera scanné tout le temps. L'astuce suivante permet de bloquer directement les accès par IP , tout en laissant passer les accès par le vrai nom de la machine. Les scanners tapant généralement uniquement sur l'IP, cela les bloque (ils se verront répondre un HTTP 403 à toutes leurs requêtes).
# Bloquer les requêtes arrivant sans HOST (pour bloquer le scanning) $HTTP["host"] !~ "^monhost.mondomaine.ext$" { url.access-deny=("") }
PS; Pour réduire les risques de scan, je n'ai bien entendu pas ouvert mon serveur web sur les port 80 et 443, mais sur un port pas standard du tout (J'ai configuré ma box pour mapper un port élevé (genre 55123) vers le port 443 de mon Raspi). Je change donc la config en conséquence:
# Bloquer les requêtes arrivant sans HOST (pour bloquer le scanning) $HTTP["host"] !~ "^monhost.mondomaine.ext(:55123)?$" { url.access-deny=("") }
Renouveller le certificat Let's Encrypt
Ok c'est sans doute pas de bonnes pratiques, mais c'est rapide. Voici ma procédure pour renouveller le certificat Let's Encrypt, sachant que pour cela Let's Encrypt exige que le port 80 soit ouvert (oui, beurk).
- Désactiver la redirection http⇒https :
sudo lighttpd-disable-mod dietpi-https_redirect
- Forcer Lighttpd à recharger la config:
sudo service lighttpd force-reload
- Ouvrir le port 80 dans la Livebox vers le Raspi (port 80).
- Désactiver temporairement le firewall (sinon le port 80 n'est pas atteignable)
sudo ufw disable
- Renouveller le certificat:
sudo dietpi-letsencrypt
choisir juste "Apply".
- Refermer le port dans la LiveBox.
- Réactiver le firewall:
sudo ufw enable
- Réactiver la redirection http⇒https :
sudo lighttpd-enable-mod dietpi-https_redirect
- Forcer Lighttpd à recharger la config:
sudo service lighttpd force-reload