Migration Debian 12 → Debian 13 (Trixie) Retour d’expérience réel, problèmes et solutions

Contexte

Migrer un serveur Debian en production n’est jamais anodin.
Dans mon cas, le passage de Debian 12 (Bookworm) à Debian 13 (Trixie) a été beaucoup plus brutal que prévu : services cassés, configurations obsolètes, dépendances Python disparues, et même des logiciels pourtant “standards” devenus incompatibles.

Voici un retour d’expérience concret, avec tous les pièges rencontrés, leurs solutions, et une checklist post-migration pour éviter d’y passer des heures comme moi.

Situation de départ

Serveur distant (ovh) avec :

  • Apache + PHP (WordPress)
  • Postfix + Dovecot + Roundcube
  • Webmin / Virtualmin
  • Fail2Ban, firewalld / nftables
  • Serveur Minecraft via Crafty
  • Docker (partiel)
  • ProFTPD

Migration effectuée via upgrade in-place.

1️⃣ Sites WordPress en erreur 503

🔍 Diagnostic

Commandes utilisées pour identifier la cause
curl -I https://monsite.tld
sudo systemctl status apache2
sudo tail -n 50 /var/log/apache2/error.log
sudo systemctl status php8.4-fpm

🧠 Cause

Apache fonctionnait, mais PHP-FPM n’était pas correctement configuré / socket absent.

Lire la suite “Migration Debian 12 → Debian 13 (Trixie) Retour d’expérience réel, problèmes et solutions”

Attaque sur mon serveur!

Heureusement, il se protège 🙂

Mon serveur subi régulièrement des tentatives d’intrusion (plusieurs fois par jour), comme tous les serveurs sur Internet, faites par des bots qui scannent les serveurs et tentent du brute force.

Mais hier peu après 13h, le nombre de tentatives a énormément augmenté, pour aller jusqu’à une alerte (un blocage temporaire et certains définitifs) par minute.

Lire la suite “Attaque sur mon serveur!”

Mes scripts “Maison”

Pour avoir la météo en bash:

#!/bin/bash
#
# Meteo mise à jour toutes les heures
#
# Smokyr <smokyr@extra-ordinaire.com>
#

if [ -z "$1" ]
then
        minute=5 #minute de maj par défaut
else
        minute=$1
fi

while true
do
        clear
        LC_ALL='fr_FR.utf8' date
        curl wttr.in/93200?lang=fr
        sleep 1m
        LC_ALL='fr_FR.utf8' date -d '1 minute ago'
        tempo=$(date +%M | sed -e 's/000$//' -e 's/^0//')
        attente=$(($minute - $tempo + 60))
        sleep $attente.m
done
meteo sous bash
Exemple de météo sous bash

Afin de vérifier le statut de fail2ban et la table nfttables correspondante:

Lire la suite “Mes scripts “Maison””

Installation de portsentry

Objet: bloquer les scanneurs de ports

Installation avec la méthode habituelle: apt install portsentry

Puis modification de certains paramètres dans le fichier /etc/portsentry/portsentry.conf :

##################
# Ignore Options #
##################
\[...]
# 0 = Do not block UDP/TCP scans.
# 1 = Block UDP/TCP scans.
# 2 = Run external command only (KILL_RUN_CMD)

BLOCK_UDP="2"
BLOCK_TCP="2"
###################
# External Command#
###################
\[...]
# The KILL_RUN_CMD_FIRST value should be set to "1" to force the command 
# to run \*before\* the blocking occurs and should be set to "0" to make the 
# command run \*after\* the blocking has occurred. 
#
KILL_RUN_CMD_FIRST = "1"
#
#
KILL_RUN_CMD="/home/unutilisateur/portsentry_ext_cmd.sh $TARGET$"
# for examples see /usr/share/doc/portsentry/examples/
Lire la suite “Installation de portsentry”

Fail2ban

Objet: Protection contre les attaques de type brute force.

Intallation: apt install fail2ban

Paramètrage: de base avec les modification suivantes:

Parametrage personnel pour les attaques répétitives avec recidive.conf placé dans le répertoire jail.d de fail2ban contenu de ce fichier:

[recidive]
enabled = true
filter = recidive
logpath = /var/log/fail2ban.log
banaction = nftables-allports
findtime = 86400 ; 1 jour
bantime = 2592000 ; 30 jours
maxretry = 3 ; au bout de trois tentatives
protocol = 0-255; ban de tous les protocoles

Lire la suite “Fail2ban”