améliorations

This commit is contained in:
2026-03-07 14:24:49 +01:00
parent c32f1daf75
commit 6cd412fb5e

View File

@@ -1,11 +1,13 @@
#!/bin/bash #!/bin/bash
# --- 0. VÉRIFICATION DES DROITS --- # --- 0. VÉRIFICATION DES DROITS ---
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo "❌ Erreur : Ce script doit être lancé avec sudo." echo "❌ Erreur : Ce script doit être lancé avec sudo."
exit 1 exit 1
fi fi
# --- 1. CONFIGURATION DYNAMIQUE --- # --- 1. CONFIGURATION DYNAMIQUE ---
HOSTNAME=$(hostname) HOSTNAME=$(hostname)
SMTP_HOST="mail.acemail.fr" SMTP_HOST="mail.acemail.fr"
@@ -18,25 +20,100 @@ echo "=========================================================="
echo " VÉRIFICATION SMTP & DÉPLOIEMENT - ${HOSTNAME}" echo " VÉRIFICATION SMTP & DÉPLOIEMENT - ${HOSTNAME}"
echo "==========================================================" echo "=========================================================="
# --- 2. INSTALLATION INITIALE --- # --- 2. INSTALLATION INITIALE ---
DEBIAN_FRONTEND=noninteractive apt update DEBIAN_FRONTEND=noninteractive apt update
DEBIAN_FRONTEND=noninteractive apt install -y msmtp msmtp-mta bsd-mailx ufw fail2ban unattended-upgrades curl DEBIAN_FRONTEND=noninteractive apt install -y msmtp msmtp-mta bsd-mailx
DEBIAN_FRONTEND=noninteractive apt install -y ufw fail2ban unattended-upgrades curl
DEBIAN_FRONTEND=noninteractive apt install -y curl bc
# --- 3. TEST DU MOT DE PASSE SMTP ---
# --- 3. RÉCUPÉRATION ET TEST DU MOT DE PASSE SMTP ---
PASS_FILE=".smtp_pass"
AUTH_OK=false AUTH_OK=false
while [ "$AUTH_OK" = false ]; do while [ "$AUTH_OK" = false ]; do
# 1. Tentative de lecture depuis le fichier
if [ -f "$PASS_FILE" ] && [ -s "$PASS_FILE" ]; then
SMTP_PASS=$(head -n 1 "$PASS_FILE")
echo "📄 Mot de passe lu depuis le fichier $PASS_FILE."
else
# 2. Sinon, saisie manuelle
echo -n "🔑 Mot de passe SMTP pour ${SMTP_USER} : " echo -n "🔑 Mot de passe SMTP pour ${SMTP_USER} : "
read -s SMTP_PASS read -s SMTP_PASS
# ... (Le bloc de test msmtp --file=/tmp/.msmtp_test va ici) ... echo ""
AUTH_OK=true # Simulé pour l'exemple fi
echo "⏳ Vérification de la connexion SMTP..."
# Création config temporaire pour le test
cat > /tmp/.msmtp_test <<EOF
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
account test
host $SMTP_HOST
port $SMTP_PORT
from $SMTP_USER
user $SMTP_USER
password $SMTP_PASS
account default : test
EOF
chmod 600 /tmp/.msmtp_test
# Test d'envoi réel (indispensable pour valider)
echo "Test de configuration" | msmtp --file=/tmp/.msmtp_test -t "$DEST_EMAIL" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✅ Authentification SMTP réussie !"
AUTH_OK=true
rm /tmp/.msmtp_test
else
echo "❌ Échec de l'authentification SMTP."
if [ -f "$PASS_FILE" ]; then
echo "⚠️ Le mot de passe dans $PASS_FILE est incorrect ou le serveur est injoignable."
mv "$PASS_FILE" "${PASS_FILE}.old" # On renomme pour forcer la saisie manuelle au prochain tour
fi
rm /tmp/.msmtp_test
fi
done done
# --- 4. CONFIGURATION DES ALIASES --- # --- 4. CONFIGURATION DES ALIASES ---
echo "root: $DEST_EMAIL" > /etc/aliases echo "--- 4. Vérification et configuration des redirections (Aliases) ---"
echo "default: $DEST_EMAIL" >> /etc/aliases ALIAS_FILE="/etc/aliases"
# On s'assure que le fichier existe (certaines distros minimales ne l'ont pas)
[ ! -f "$ALIAS_FILE" ] && touch "$ALIAS_FILE"
# Vérification pour root
if grep -q "^root:" "$ALIAS_FILE"; then
# Si root existe mais pointe vers autre chose, on met à jour
sed -i "s|^root:.*|root: $DEST_EMAIL|" "$ALIAS_FILE"
echo "✅ Alias 'root' mis à jour vers $DEST_EMAIL."
else
# Sinon on l'ajoute
echo "root: $DEST_EMAIL" >> "$ALIAS_FILE"
echo "✅ Alias 'root' ajouté."
fi
# Vérification pour default
if grep -q "^default:" "$ALIAS_FILE"; then
sed -i "s|^default:.*|default: $DEST_EMAIL|" "$ALIAS_FILE"
echo "✅ Alias 'default' mis à jour."
else
echo "default: $DEST_EMAIL" >> "$ALIAS_FILE"
echo "✅ Alias 'default' ajouté."
fi
# --- 5. CONFIGURATION MSMTP --- # --- 5. CONFIGURATION MSMTP ---
cat > /etc/msmtprc <<EOF echo "--- 5. Vérification de la configuration MSMTP ---"
# 1. Génération de la configuration cible dans un fichier temporaire
TMP_MSMTP=$(mktemp)
cat > "$TMP_MSMTP" <<EOF
defaults defaults
auth on auth on
tls on tls on
@@ -51,7 +128,34 @@ from $SMTP_USER
user $SMTP_USER user $SMTP_USER
password $SMTP_PASS password $SMTP_PASS
EOF EOF
chmod 600 /etc/msmtprc
# 2. Comparaison avec le fichier existant
MSMTP_CONF="/etc/msmtprc"
SHOULD_UPDATE=false
if [ ! -f "$MSMTP_CONF" ]; then
echo "📜 Le fichier $MSMTP_CONF n'existe pas. Création..."
SHOULD_UPDATE=true
else
# Comparaison du contenu (diff ignore les différences de droits, uniquement le texte)
if ! diff -q "$TMP_MSMTP" "$MSMTP_CONF" > /dev/null; then
echo "🔄 La configuration a changé. Mise à jour de $MSMTP_CONF..."
SHOULD_UPDATE=true
else
echo "✅ La configuration MSMTP est déjà à jour et identique."
fi
fi
# 3. Application si nécessaire
if [ "$SHOULD_UPDATE" = true ]; then
cp "$TMP_MSMTP" "$MSMTP_CONF"
chmod 600 "$MSMTP_CONF"
chown root:root "$MSMTP_CONF"
fi
# Nettoyage du fichier temporaire
rm -f "$TMP_MSMTP"
# --- 6. INTERCEPTION GLOBALE (LE WRAPPER) --- # --- 6. INTERCEPTION GLOBALE (LE WRAPPER) ---
echo "--- 6. Création du wrapper sendmail pour préfixer les objets ---" echo "--- 6. Création du wrapper sendmail pour préfixer les objets ---"
@@ -68,18 +172,32 @@ chmod +x /usr/local/bin/msmtp-wrapper
# On pointe le sendmail du système vers notre wrapper au lieu de msmtp directement # On pointe le sendmail du système vers notre wrapper au lieu de msmtp directement
ln -sf /usr/local/bin/msmtp-wrapper /usr/sbin/sendmail ln -sf /usr/local/bin/msmtp-wrapper /usr/sbin/sendmail
# --- 7. SCRIPT DE SURVEILLANCE ---
cat > /usr/local/bin/sys_check.sh <<EOF
#!/bin/bash
THRESHOLD=90
DISK_USAGE=\$(df / | awk 'NR==2 {print \$5}' | sed 's/%//')
RAM_USAGE=\$(free | grep Mem | awk '{print int(\$3/\$2 * 100)}')
if [ "\$DISK_USAGE" -gt "\$THRESHOLD" ] || [ "\$RAM_USAGE" -gt "\$THRESHOLD" ]; then # --- 7. SCRIPT DE SURVEILLANCE ---
echo -e "Alerte Ressources\nDisque: \$DISK_USAGE%\nRAM: \$RAM_USAGE%" | mail -s "ALERTE" "$DEST_EMAIL" echo "--- 7. Récupération du script de surveillance depuis Git ---"
SCRIPT_URL="https://git.abonnel.fr/cedricAbonnel/scripts-bash/raw/branch/main/servers/linux/sys_check.sh"
DEST_PATH="/usr/local/bin/sys_check.sh"
# Téléchargement du script
curl -sSL "$SCRIPT_URL" -o "$DEST_PATH"
# Vérification du succès du téléchargement
if [ $? -eq 0 ]; then
chmod +x "$DEST_PATH"
echo "✅ sys_check.sh récupéré et installé."
else
echo "❌ Erreur lors de la récupération du script sur Git. Création d'une version de secours locale."
cat > "$DEST_PATH" <<EOF
#!/bin/bash
# Version de secours (fallback)
DISK_USAGE=\$(df / | awk 'NR==2 {print \$5}' | sed 's/%//')
if [ "\$DISK_USAGE" -gt 90 ]; then
echo "Alerte Disque: \$DISK_USAGE%" | mail -s "ALERTE" root
fi fi
EOF EOF
chmod +x /usr/local/bin/sys_check.sh chmod +x "$DEST_PATH"
fi
# --- 8. SÉCURITÉ & AUTOMATISATION --- # --- 8. SÉCURITÉ & AUTOMATISATION ---
ufw allow 22/tcp ufw allow 22/tcp
@@ -87,6 +205,7 @@ ufw --force enable
systemctl restart fail2ban systemctl restart fail2ban
(crontab -l 2>/dev/null | grep -v "sys_check.sh" ; echo "0 * * * * /usr/local/bin/sys_check.sh") | crontab - (crontab -l 2>/dev/null | grep -v "sys_check.sh" ; echo "0 * * * * /usr/local/bin/sys_check.sh") | crontab -
# --- 9. RAPPORT FINAL --- # --- 9. RAPPORT FINAL ---
echo "Déploiement terminé de ${0} sur ${HOSTNAME}" | mail -s "Setup OK" "$DEST_EMAIL" echo "Déploiement terminé de ${0} sur ${HOSTNAME}" | mail -s "Setup OK" "$DEST_EMAIL"