améliorations
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
# --- 0. VÉRIFICATION DES DROITS ---
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "❌ Erreur : Ce script doit être lancé avec sudo."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# --- 1. CONFIGURATION DYNAMIQUE ---
|
||||
HOSTNAME=$(hostname)
|
||||
SMTP_HOST="mail.acemail.fr"
|
||||
@@ -18,25 +20,100 @@ echo "=========================================================="
|
||||
echo " VÉRIFICATION SMTP & DÉPLOIEMENT - ${HOSTNAME}"
|
||||
echo "=========================================================="
|
||||
|
||||
|
||||
# --- 2. INSTALLATION INITIALE ---
|
||||
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
|
||||
|
||||
while [ "$AUTH_OK" = false ]; do
|
||||
echo -n "🔑 Mot de passe SMTP pour ${SMTP_USER} : "
|
||||
read -s SMTP_PASS
|
||||
# ... (Le bloc de test msmtp --file=/tmp/.msmtp_test va ici) ...
|
||||
AUTH_OK=true # Simulé pour l'exemple
|
||||
# 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} : "
|
||||
read -s SMTP_PASS
|
||||
echo ""
|
||||
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
|
||||
|
||||
|
||||
# --- 4. CONFIGURATION DES ALIASES ---
|
||||
echo "root: $DEST_EMAIL" > /etc/aliases
|
||||
echo "default: $DEST_EMAIL" >> /etc/aliases
|
||||
echo "--- 4. Vérification et configuration des redirections (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 ---
|
||||
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
|
||||
auth on
|
||||
tls on
|
||||
@@ -51,7 +128,34 @@ from $SMTP_USER
|
||||
user $SMTP_USER
|
||||
password $SMTP_PASS
|
||||
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) ---
|
||||
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
|
||||
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
|
||||
echo -e "Alerte Ressources\nDisque: \$DISK_USAGE%\nRAM: \$RAM_USAGE%" | mail -s "ALERTE" "$DEST_EMAIL"
|
||||
# --- 7. SCRIPT DE SURVEILLANCE ---
|
||||
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
|
||||
EOF
|
||||
chmod +x /usr/local/bin/sys_check.sh
|
||||
chmod +x "$DEST_PATH"
|
||||
fi
|
||||
|
||||
|
||||
# --- 8. SÉCURITÉ & AUTOMATISATION ---
|
||||
ufw allow 22/tcp
|
||||
@@ -87,6 +205,7 @@ ufw --force enable
|
||||
systemctl restart fail2ban
|
||||
(crontab -l 2>/dev/null | grep -v "sys_check.sh" ; echo "0 * * * * /usr/local/bin/sys_check.sh") | crontab -
|
||||
|
||||
|
||||
# --- 9. RAPPORT FINAL ---
|
||||
echo "Déploiement terminé de ${0} sur ${HOSTNAME}" | mail -s "Setup OK" "$DEST_EMAIL"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user