Petite frayeur ce matin : mon certificat SSL est expiré.
Plus de possibilité d’accéder à mon homelab. Il ne reste plus qu’à le renouveller. Sauf que c’est une opération que je ne fais jamais (ou presque). C’est mal parti.
Je me souviens quand même que c’est normalement fait via certbot.
Sauf que ce certificat est généré via mon hébergeur mais sur un serveur inaccessible hors maison.
Je me souviens également qu’il y avait/a un module spécifique pour mon hébergeur pour certbot.
Sauf que … il y a un truc qui plante. Je ne comprends pas. Je dois encore chercher.
Beaucoup de scans et souvent sur des .env ou des phpinfo.
Pas encore de chances, je ne suis pas dans ce cas (enfin, j’espère).
Quoi qu’il en soit, j’ai mis un filtre sur cette base :
Je ne sais pas s’il faut en rire ou en pleurer.
Des bots et des bots qui scannent le serveur. Même les bots des plus grands IA s’y mettent.
J’ai bien envie de tous les mettre dehors. Mais j’ai peur de mettre d’autres personnes dehors.
En réalité, ce ne sont pas bots d’indexation qui font mal. Cela montre juste les moyens dont ils disposent. C’est tout.
Ce qui est plus embêtant, ce sont les bots qui essayent de trouver des failles. Cela me fait plus peur.
Je comprends leur intérêt, même si je n’approuve pas.
Ni une ni deux ! Je me dis que c’est le moment d’au moins d’essayer, de voir si je peux y arriver.
Je me lance en créant un dossier et un utilisateur spécifique sur mon lieu de sauvegarde.
J’essaie de me connecter et rien ne se passe. Cela dure une plombe puis connection time out.
Depuis chez moi, cela fonctionne. Je règle la question des clés SSH.
Je recommence. Toujours le même soucis depuis le server distant.
Je m’aide d’une IA rapidement mais sans plus. J’ouvre même un ticket (que je ne retrouve plus).
Finalement, j’ai trouvé
.
ufw bloque les accès “sortants”. J’avoue que j’ai manqué une étape. Soit.
Il suffit d’autoriser la sortie sur le port nécessaire et c’est résolu !
Autant que possible, publiez de votre machine vers l’extérieur, le service, le serveur. Considérez que l’original est local et que le public n’accède qu’à une copie.
Si 2 ne rentre pas dans votre démarche de publication, que vous publiez sur un serveur distant, créez un système automatisé de sauvegarde locale de tout le contenu (ainsi que les métadonnées) disponible sur le serveur.
Si vous avez la possibilité, créez une 3ème copie de sauvegarde automatique sur un disque externe local.
Si vous avez la possibilité, créez une copie automatique sur un serveur distant (qui n’est pas celle du contenu publié sur le serveur accessible au public).
Avoir son nom de domaine est un atout bien qu’il entraîne un coût supplémentaire de location. Il vous permet une mobilité, une flexibilité pour l’accès public de votre contenu.
Pensées amicales à une personne qui a perdu tout son contenu soudainement bloqué par le service distant. (Mise à jour : le service a redonné accès au contenu).
Je n’ai pas encore fait entièrement le nécessaire.
C’est en cours mais c’est lent car les idées fusent dans la tête et parfois, je ne reste pas concentré; je fais face à un manque de clarté; je suis interrompu.
J’avance, petit à petit.
Une liste d’adresses IP à bloquer sur un serveur.
Je n’ai pas encore (trouvé) de manière d’automatiser l’ajout/mise à jour. Mais cela ne saurait tarder.
Tinyauth : pratique si peu d’utilisateurs. Ingérable s’il y a plusieurs dizaines ou centaines d’utilisateurs.
Un tutoriel en Français
A l’entrée des applications
Authentik / Authelia : il faut que l’application soit compatible
Pas encore super clair dans ma tête.
Car il me semble qu’il faille est préférable encore en plus avoir un OIDC (OpenID Connect). Cela peut se faire avec Pocket ID OAuth.
Et voilà, enfin, l’authentification ssh partout uniquement via clés.
En soi, cela n’a pas pris tant de temps que cela. Il faut juste le bon guide et appliquer.
Créer un dossier où sera monté le disque : sudo mkdir /mnt/dav
Installer davfs2 sudo apt install davfs2
(re-)Configurer le paquet pour autoriser son utilisation par des utilisateurs moins privilégiés : sudo dpkg-reconfigure davfs2
Editer ~/.davfs2/secrets pour ajouter les identifiants au disque via WebDAV :
Ajouter une ligne à la fin selon le modèle suivant : https://<WebDAV URI> <username> <password>
Modifier les permissions du fichier : chmod 600 ~/.davfs2/secrets
Ajouter une ligne dans /etc/fstab selon le modèle suivant : https://<WebDAV URI> /mnt/dav/ davfs user,noauto,file_mode=600,dir_mode=700 0 1
Relancer systemd systemctl daemon-reload
Ajouter son utilisateur au groupe davfs2sudo usermod -a -G davfs2 username (Je pense même que sudo usermod -a -G davfs2 $USER devrait fonctionner si on veut s’ajouter soi-même).
Déconnecter et (se) relogger (pour que l’ajout au groupe soit effectif).
C’est tout ! Il est possible d’utiliser mount /mnt/dav/ sans soucis.
Pratique si vous souhaitez accéder (temporairement) à votre kDrive d’Infomaniak.
widefrog est un programme permettant de télécharger des vidéos sur des plateformes de streaming. Intrinsèquement, il ne s’agit pas de piratage car widefrog n’outrepasse pas les accès demandés par les services. Autrement dit, si vous souhaitez récupérer des vidéos sur auvio.be (lié à la télévision belge francophone), vous devez avoir un compte sur le site et avoir une IP belge. widefrog permet donc juste de récupérer les vidéos facilement.
widefrog est diffusé sur le forum de videohelp.
#Outils préalables
Pour utiliser widefrog, il faut quelques outils préalables :
python
N_m3u8DL-RE
mp4decrypt
shaka-packager
ffpmeg
mkvmerge
Update/upgrade le système
sudo apt-get update && sudo apt-get upgrade
Python, ffmpeg, mkvmerge
sudo apt-get install python3 python3-pip unrar zip unzip ffmpeg mkvtoolnix mkvtoolnix-gui mediainfo mediainfo-gui aria2
Dans le guide trouvé sur le forum, il recommande également d’installer curl, git, nano, vlc, mpv et asciinema. Autant les premiers sont déjà installés, autant vlc et mpv sont deux programmes au même usage.
N_m3u8DL-RE
curl -kLO https://github.com/nilaoda/N_m3u8DL-RE/releases/download/v0.3.0-beta/N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz
## (Debian 13/Trixie does not allow to unpack/untar directly into the "/usr/local/bin/" DIRectory);
# Check the package is OK;
gunzip -tv vimeo-dl_0.2.0_linux_amd64.tar.gz
# Check what is inside the TAR.GZ archive;
tar -tvvf N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz
# Unpack;
tar -xvf N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz N_m3u8DL-RE
# Move to "/usr/local/bin/";
sudo mv N_m3u8DL-RE /usr/local/bin/
# Make the BInary file "EXEcutable;
sudo chmod a+rx /usr/local/bin/N_m3u8DL-RE
# List the file;
ls -ilha /usr/local/bin/N*
# Check the version
N_m3u8DL-RE --version
L’idée est de pouvoir utiliser les programmes directement depuis n’importe quel dossier, juste en les appellant par leur nom.
#Installation de widefrog
Quand c’est fait, il faut encore récupérer widefrog. La version à l’heure actuelle est la 3.2.
Idéalement, extraire le fichier dans un dossier propre à widefrog.
Pour la suite et afin d’éviter les soucis de version de packages Python, on active un environnement de travail :
#windows
FOR /F %k in (requirements.txt) DO ( if NOT # == %k ( pip install %k ) )
#linux
grep -v '^#' requirements.txt | xargs -n 1 pip install
#macos
grep -v '^#' requirements.txt | xargs -n 1 pip3 install
Et on peut également mettre à jour urllib3 (pas certain que ce soit utile):
pip install urllib3 --upgrade
On octroye des droits d’exécution aux parties de widefrog :
sudo chmod +x "terminal/*"
L’installation est normalement finie.
#Utilisation de widefrog
Pour utiliser widefrog, il faut veiller à avoir l’environnement actif. Pour cela, quand nous sommes dans le dossier de widefrog, il faut utiliser la commande source myvenv/bin/activate.
Pour sortir de l’environnement, il faut utiliser : deactivate
Première utilisation
Pour la première utilisation, il faut créer la configuration via
python widefrog.py
[INFO] The app_files\config.json file was created. Edit the file and run the program.
Avant d’éditer la configuration, vous pouvez utiliser les commandes suivantes pour en savoir plus :
Je reprends ici l’utilisation dont j’ai besoin, càd pour le site auvio.
Une IP belge est nécessaire ainsi qu’un compte au service auvio.
Je recopie les exemples données sur le forum qui permettent de comprendre comment cela fonctionne.
:
Sécurité un jour, sécurité toujours !
Enfin, c’est ce que j’ai essayé de mettre en place.
Mon navigateur est configuré par défaut pour forcer le mode HTTPS, y compris sur mes domaines locaux.
Sauf que je n’ai pas de certificat sur mon serveur personnel.
Go ! pour en installer un.
Le résultat qui apparait est d’utiliser Let’s encrypt soit directement soit via certbot.
Cela semble bien fonctionner … pour autant que vous nommiez vos domaines locaux avec des extensions existantes (.com, .eu, …).
Dans le cas où vous utilisez une extension fantaisistes (.lan), cela ne fonctionnera pas.
Il ne reste plus qu’à créer son certificat avec mkcert et l’installer manuellement sur tous les appareils qui vont se rendre sur vos sites.
Vu que la durée de vie des certificats peuvent être prolongés jusqu’à 10 ans, une fois l’opération faite, vous oublierez comment vous avez fait (wink wink).
Je ne l’ai pas encore fait. Vu qu’il faut aller sur chaque device pour configurer cela, j’ai mis cette option en bas de la liste :(
La commande va vous renseigner tous les devices et leur correspondance dans le système.
Imaginons pour la suite que ce soit /dev/sdb1
Créer le dossier où le disque dur sera accessible
Généralement, cela se fait dans un dossier dans /mnt ou dans /mediaavec la commande mkdir (il faut probablement rajouter un petit sudo car de base, vous n’avez pas accès en écriture).
Trouver le UUID de votre disque : sudo blkid /dev/sdb1 vous renvoie une sortie similaire à :
/dev/sdb1/ : LABEL="TOSHIBA EXT" BLOCK_SIZE="512" UUID="62E69DEDE69DC1A9" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="1473b688-909f-4c28-a09f-07146df2ca87"
Vous aurez besoin du UUID pour l’étape suivante.
Préparer le montage automatique via /etc/fstab/sudo nano /etc/ftsab
Ajouter la ligne suivante (en adaptant au besoin les paramètres trouvés au point précédent :
UUID=62E69DEDE69DC1A9 /mnt/mondisquedur ntfs defaults,rw,uid=1000,gid=1000,umask=0002 0 0
Tester le processus avec sudo mount -a.
Il se peut qu’il faille relancer systemctl avec sudo systemctl reload-daemon et puis tester le processus.
Comment automatiser les mises à jour sans (trop) se prendre la tête ?
S’en passer et faire comme si de rien n’était : non, ce n’est pas une possibilité.
Mettre en place un crontab : oui mais on peut faire mieux
Utiliser un paquet prévu pour cela : unattended-upgrades
Allons-y pour la dernière possibilité.
Commençons par l’installer : sudo apt-get install unattended-upgrades.
Configurons le paquet : sudo dpkg-reconfigure unattended-upgrades. Cochez “Yes” et confirmez.
Il y a des possibilités pour configurer cela manuellement et plus précisement : voir PeriodicUpdates.
J’ai tenté d’installer nginx. J’y suis bien arrivé. C’est simple et facile.
** A condition que votre port 80/443 ne soit pas déjà utilisé par un autre service**
Sauf que … je souhaitais une interface graphique (parce que, même si je suis Geek, je me connais : je ne le suis que par phase).
Donc j’ai repéré nginx Proxy Manager (NPM de son petit nom à ne pas confondre avec NPM, le gestionnaire de paquets Node.js).
Pour cela, il faut Docker.
La méthode proposée est la suivante :
Créer un folder /opt/stacks/nginxproxymanager
Rentrer dedans (avec cd)
Créer *compose.yml avec le contenu suivant :
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
#environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Lancer le compose : docker compose up -d
Il se peut que nginx Proxy Manager ne se lance pas car quelqu’un occupe déjà certains ports (80 ou 443). Modifier cela pour que NPM se lance.
Si vous oubliez votre mot de passe (oui, cela arrive aux plus distraits et vu le nombre de mot de passe, c’est possible)
1. Ouvrir le terminal du l’instance nginx : docker exec -it nginx* sh
1. Installer sqlite3 pour modifier la base de données : apt install sqlite3 -y
1. Accéder à la base de données : sqlite3 /data/database.sqlite
1. Supprimer tous les utilisateurs : UPDATE user sets is_deleted=1;
1. Sortir de sqlite : exit;
1. Sortir de l’instance nginx : exit
1. Redémarrer l’instance nginx : docker restart nginx*
`
#Update 2025-10-21
Et oui, déjà un update. Nginx Proxy Manager, c’est bien … pour gérer des proxy.
Sauf que mon idée, c’est de faire plus que cela, notamment d’héberger des services différents dont du web classique.
Donc retour à nginx :)
Installation rapide avec apt-get install nginx
Lancement systemctl start nginx
Installation de php (sait-on jamais) : apt-get install php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-zip php8.4-xml; Il y a plus que simplement PHP. Veillez à vérifier la dernière version encore et adapter dans la commande.
Ajouter PHP dans nginx en éditant /etc/nginx/sites-enabled/default en remplacant :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
A nouveau, il faut vérifier la version de PHP (en 2025-10, c’est la 8.4).
Recharger nginx avec systemctl reload nginx
C’est la base.
Tous les sites actifs sont dans /etc/nginx/sites-enabled. Les sites disponibles sont dans /etc/nginx/sites-available.
Idéalement, on prépare puis on rend disponible.
Une manière de faire (ou contourner l’esprit) est de faire des liens symobliques : ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/.
Avant de relanger nginx (avec un systemctl restart nginx), on peut vérifier la configuration avec nginx -t. Plutôt utile !
Et pour le reverse proxy ?
Il suffit de créer un fichier dans /etc/nginx/sites-enabled contenant :
Cela permet dont de rediriger discrètement pdf.home.lan vers http://192.168.1.2:3000.
Si je dois rediriger vers un port et un sous-dossier explicitement ?
Pour une raison que j’ignore (et j’ignore beaucoup de choses), la fonction proxy_pass ne fonctionne pas.
J’utilise return 301 http://MON_IP:MON_PORT/MON_DOSSIER :
Parce que plein d’applications ne sont plus que diffuser sous ce format
Pourquoi pas Docker ?
Parce que cela ajoute en complexité (encore un truc à apprendre, à maitriser, à debugger). Naturellement, si tout est sous Docker, l’investissement est plus rentable.
Installation de Docker
curl -sSL https://get.docker.com | shsudo usermod -aG docker $USER
Pour avoir les privilèges, il faut se reconnecter/redémarrer la session SSH.