deplacement de scripts

This commit is contained in:
2025-03-09 13:00:26 +01:00
parent 54a0c21787
commit 2af16cf8a7
22 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/add_alias.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/add_domain.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/add_forward.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/add_user.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/del_alias.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/del_domain.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/del_user.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/generate_password.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/list_aliases.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/list_domains_.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/list_users.sh
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/README.md
https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/setup_mail.sh

View File

@@ -0,0 +1,18 @@
#!/bin/bash
# Nom du fichier de sortie
OUTPUT_FILE=".list_files.txt"
# Nettoyage du fichier s'il existe déjà
> "$OUTPUT_FILE"
# Récupérer le chemin absolu du dossier courant côté Git
BASE_URL="https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail"
# Lister tous les fichiers .sh et .py et générer l'URL complète
for file in *; do
[ -e "$file" ] || continue # Vérifie si des fichiers existent pour éviter une erreur
echo "$BASE_URL/$file" >> "$OUTPUT_FILE"
done
echo "✅ Liste des scripts générée dans $OUTPUT_FILE"

View File

@@ -0,0 +1,39 @@
---
# **📌 Résumé des Scripts**
| **Script** | **Action** | **Exemple d'utilisation** |
|----------------------|-----------------------------------------------|--------------------------|
| `install_mailserver.sh` | Installer Postfix/Dovecot + ajouter un domaine | `./install_mailserver.sh domain.top` |
| `add_domain.sh` | Ajouter un domaine | `./add_domain.sh domain2.top` |
| `add_user.sh` | Ajouter un utilisateur | `./add_user.sh user@domain.top` |
| `generate_passowrd.sh` | Generer un mot de passe pour un utilisateur | `./generate_password.sh user@domain.top` |
| `add_alias.sh` | Ajouter un alias | `./add_alias.sh contact@domain2.top user@domain.top` |
| `add_forward.sh` | Ajouter une redirection | `./add_forward.sh contact@domain.top user@domain2.top` |
| `list_domains.sh` | Lister les domaines | `./list_domains.sh` |
| `list_users.sh` | Lister les utilisateurs | `./list_users.sh` |
| `list_aliases.sh` | Lister les alias/redirections | `./list_aliases.sh` |
| `del_user.sh` | Supprimer un utilisateur | `./del_user.sh user@domain.top` |
| `del_alias.sh` | Supprimer un alias | `./del_alias.sh contact@domain2.top` |
| `del_domain.sh` | Supprimer un domaine | `./del_domain.sh domain2.top` |
---
## 📥 Récupération des scripts
Pour télécharger uniquement les scripts `.sh` du dossier `server-mail/scripts`, utilisez la commande suivante :
```bash
wget -O scripts.txt "https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/notes/scripts/server-mail/.list_files.txt"
while read -r url; do
wget -O "$(basename "$url")" "$url"
done < scripts.txt
chmod +x *.sh
```
Tous les fichiers listés dans scripts.txt seront téléchargés automatiquement dans le dossier courant.
Assurez-vous dexécuter cette commande dans le dossier où vous souhaitez stocker les fichiers.

View File

@@ -0,0 +1,18 @@
#!/bin/bash
POSTFIX_ALIASES="/etc/postfix/virtual_aliases"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $0 <alias> <cible>"
exit 1
fi
ALIAS=$1
TARGET=$2
echo "$ALIAS $TARGET" >> $POSTFIX_ALIASES
postmap $POSTFIX_ALIASES
systemctl reload postfix
echo "Alias $ALIAS ajouté vers $TARGET 🎉"

View File

@@ -0,0 +1,53 @@
#!/bin/bash
# Définition des variables
MAILDIR="/var/mail/vhosts"
POSTFIX_CONFIG="/etc/postfix/virtual_domains"
USER_VMAIL="vmail"
GROUP_VMAIL="vmail"
# Vérifier si le script est exécuté en root
if [[ $EUID -ne 0 ]]; then
echo "❌ Ce script doit être exécuté en tant que root."
exit 1
fi
# Vérifier si un domaine a été passé en paramètre
if [[ -z "$1" ]]; then
echo "Usage: $0 <domaine>"
exit 1
fi
DOMAIN=$1
# Vérifier si le domaine est déjà enregistré
if grep -q "^$DOMAIN$" "$POSTFIX_CONFIG"; then
echo "⚠️ Le domaine $DOMAIN est déjà configuré dans Postfix."
exit 1
fi
echo "🔹 Ajout du domaine : $DOMAIN"
echo "$DOMAIN" >> "$POSTFIX_CONFIG"
# Création du répertoire pour le domaine
DOMAIN_DIR="$MAILDIR/$DOMAIN"
if [[ ! -d "$DOMAIN_DIR" ]]; then
echo "📁 Création du dossier mail pour $DOMAIN"
mkdir -p "$DOMAIN_DIR"
chown -R "$USER_VMAIL:$GROUP_VMAIL" "$DOMAIN_DIR"
chmod -R 770 "$DOMAIN_DIR"
else
echo "⚠️ Le dossier $DOMAIN_DIR existe déjà."
fi
# Recharger Postfix pour appliquer les changements
echo "🔄 Rechargement de Postfix..."
systemctl reload postfix
# Vérification de la bonne prise en compte
if systemctl is-active --quiet postfix; then
echo "✅ Domaine $DOMAIN ajouté avec succès et Postfix rechargé 🎉"
else
echo "❌ Erreur : Postfix ne fonctionne pas correctement après la mise à jour."
exit 1
fi

View File

@@ -0,0 +1,21 @@
#!/bin/bash
POSTFIX_ALIASES="/etc/postfix/virtual_aliases"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $0 <adresse_source> <adresse_cible1> [adresse_cible2] ..."
exit 1
fi
SOURCE=$1
shift # Supprime le premier argument (l'adresse source)
TARGETS="$@"
echo "Ajout de la redirection de $SOURCE vers $TARGETS"
echo "$SOURCE $TARGETS" >> $POSTFIX_ALIASES
postmap $POSTFIX_ALIASES
systemctl reload postfix
echo "Redirection de $SOURCE vers $TARGETS ajoutée"

29
scripts/server-mail/add_user.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/bash
DOVECOT_USERS="/etc/dovecot/users"
MAILDIR="/var/mail/vhosts"
if [[ -z "$1" ]]; then
echo "Usage: $0 <adresse email>"
exit 1
fi
EMAIL=$1
DOMAIN=$(echo $EMAIL | cut -d@ -f2)
USER=$(echo $EMAIL | cut -d@ -f1)
# Vérifier si l'utilisateur existe déjà
if grep -q "^$EMAIL:" "$DOVECOT_USERS"; then
echo "Erreur : L'utilisateur $EMAIL existe déjà."
exit 1
fi
# Ajouter l'utilisateur sans mot de passe
echo "$EMAIL:" >> "$DOVECOT_USERS"
# Création du répertoire de messagerie
mkdir -p "$MAILDIR/$DOMAIN/$USER"
chown -R vmail:vmail "$MAILDIR/$DOMAIN/$USER"
chmod -R 770 "$MAILDIR/$DOMAIN/$USER"
echo "Utilisateur $EMAIL créé avec succès. Utilisez 'generate_password.sh $EMAIL' pour lui assigner un mot de passe."

View File

@@ -0,0 +1,20 @@
#!/bin/bash
POSTFIX_ALIASES="/etc/postfix/virtual_aliases"
if [[ -z "$1" ]]; then
echo "Usage: $0 <alias>"
exit 1
fi
ALIAS=$1
echo "Suppression de l'alias : $ALIAS"
# Supprimer l'entrée de l'alias
sed -i "/^$ALIAS /d" $POSTFIX_ALIASES
postmap $POSTFIX_ALIASES
systemctl reload postfix
echo "Alias $ALIAS supprimé"

View File

@@ -0,0 +1,23 @@
#!/bin/bash
MAILDIR="/var/mail/vhosts"
POSTFIX_CONFIG="/etc/postfix/virtual_domains"
if [[ -z "$1" ]]; then
echo "Usage: $0 <domaine>"
exit 1
fi
DOMAIN=$1
echo "Suppression du domaine : $DOMAIN"
# Supprimer le domaine du fichier de Postfix
sed -i "/^$DOMAIN$/d" $POSTFIX_CONFIG
# Supprimer les boîtes mail associées
rm -rf $MAILDIR/$DOMAIN
systemctl reload postfix
echo "Domaine $DOMAIN supprimé"

23
scripts/server-mail/del_user.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
DOVECOT_USERS="/etc/dovecot/users"
MAILDIR="/var/mail/vhosts"
if [[ -z "$1" ]]; then
echo "Usage: $0 <adresse mail>"
exit 1
fi
EMAIL=$1
DOMAIN=$(echo $EMAIL | cut -d@ -f2)
USER=$(echo $EMAIL | cut -d@ -f1)
echo "Suppression de l'utilisateur : $EMAIL"
# Supprimer l'entrée du fichier des utilisateurs
sed -i "/^$EMAIL:/d" $DOVECOT_USERS
# Supprimer le répertoire de la boîte mail
rm -rf $MAILDIR/$DOMAIN/$USER
echo "Utilisateur $EMAIL supprimé"

View File

@@ -0,0 +1,83 @@
# Récupérer le nom dhôte complet (FQDN)
SERVER_NAME=$(hostname -f) # Privilégier hostname -f
# Vérifier si le FQDN est vide (cas rare)
if [[ -z "$SERVER_NAME" ]]; then
SERVER_NAME=$(cat /etc/hostname) # Lecture depuis /etc/hostname
fi
# Construire l'URL du serveur
SERVER_URL="http://$SERVER_NAME/passwords"
echo "Serveur détecté : $SERVER_NAME"
DOVECOT_USERS="/etc/dovecot/users"
WEB_DIR="/var/www/passwords"
EXPIRATION_TIME=600 # 10 minutes avant suppression
if [[ -z "$1" ]]; then
echo "Usage: $0 <adresse email>"
exit 1
fi
EMAIL=$1
# Vérifier si l'utilisateur existe
if ! grep -q "^$EMAIL:" "$DOVECOT_USERS"; then
echo "Erreur : L'utilisateur $EMAIL n'existe pas. Utilisez 'create_user.sh' d'abord."
exit 1
fi
# Génération d'un mot de passe sécurisé
PASSWORD=$(tr -dc 'A-Za-z0-9@#%&*()-_=+' </dev/urandom | head -c 20)
# Hachage sécurisé du mot de passe
HASHED_PASS=$(doveadm pw -s SHA512-CRYPT -p "$PASSWORD")
# Mettre à jour le mot de passe dans le fichier des utilisateurs
sed -i "s|^$EMAIL:.*|$EMAIL:$HASHED_PASS|" "$DOVECOT_USERS"
# Génération d'un lien temporaire
mkdir -p "$WEB_DIR"
chmod 750 "$WEB_DIR"
FILE_ID=$(uuidgen)
FILE_PATH="$WEB_DIR/$FILE_ID.html"
# Création de la page HTML temporaire
cat <<EOF > "$FILE_PATH"
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Votre nouveau mot de passe</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
.container { background: #f4f4f4; padding: 20px; border-radius: 10px; display: inline-block; }
h1 { color: #333; }
.password { font-size: 20px; font-weight: bold; background: #ddd; padding: 10px; border-radius: 5px; }
</style>
</head>
<body>
<div class="container">
<h1>Votre nouveau mot de passe</h1>
<p>Adresse email : <strong>$EMAIL</strong></p>
<p>Mot de passe temporaire :</p>
<p class="password">$PASSWORD</p>
<p><strong>Notez-le, cette page sera supprimée après consultation.</strong></p>
</div>
<script>
fetch(window.location.href, { method: 'DELETE' }).then(() => console.log('Fichier supprimé'));
</script>
</body>
</html>
EOF
chmod 600 "$FILE_PATH"
# Suppression automatique après expiration
(sleep $EXPIRATION_TIME && rm -f "$FILE_PATH") &
echo "Mot de passe mis à jour pour $EMAIL"
echo "Lien temporaire pour récupérer le mot de passe : $SERVER_URL/$FILE_ID.html"

View File

@@ -0,0 +1,3 @@
#!/bin/bash
echo "=== Liste des alias et redirections ==="
cat /etc/postfix/virtual_aliases

View File

@@ -0,0 +1,3 @@
#!/bin/bash
echo "=== Liste des domaines gérés ==="
cat /etc/postfix/virtual_domains

View File

@@ -0,0 +1,3 @@
#!/bin/bash
echo "=== Liste des utilisateurs ==="
cat /etc/dovecot/users | cut -d: -f1

View File

@@ -0,0 +1,91 @@
#!/bin/bash
# Importer les fonctions communes
source "$(dirname "$0")/../common/common_utils.sh"
# Vérifier si le script est exécuté en root
check_root
# Mise à jour du système
update_system
# Installation de Postfix, Dovecot et outils nécessaires
echo "=== Installation de Postfix, Dovecot et outils nécessaires ==="
apt install -y postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-sieve certbot curl dnsutils
# Récupérer le FQDN et le domaine
read FQDN DOMAIN <<< $(get_fqdn_and_domain)
echo "🔍 Serveur détecté : $FQDN"
echo "🌐 Domaine géré pour les emails : $DOMAIN"
# Vérification DNS
check_dns "$FQDN"
# Génération du certificat SSL
setup_ssl "$FQDN"
# Configuration de Postfix
echo "=== Configuration de Postfix ==="
cat > /etc/postfix/main.cf <<EOF
smtpd_banner = \$myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no
myhostname = $FQDN
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
# Sécurisation avec TLS
smtpd_tls_cert_file=/etc/letsencrypt/live/$FQDN/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/$FQDN/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
EOF
# Configuration de Dovecot
echo "=== Configuration de Dovecot ==="
cat > /etc/dovecot/dovecot.conf <<EOF
disable_plaintext_auth = no
ssl = required
ssl_cert = </etc/letsencrypt/live/$FQDN/fullchain.pem
ssl_key = </etc/letsencrypt/live/$FQDN/privkey.pem
mail_location = maildir:/var/mail/vhosts/%d/%n
protocols = imap pop3 lmtp
auth_mechanisms = plain login
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
EOF
# Redémarrer les services
echo "=== Redémarrage des services ==="
systemctl restart postfix dovecot
systemctl enable postfix dovecot
# Ajout d'un cron pour renouveler le certificat
echo "0 3 * * * certbot renew --quiet && systemctl reload postfix dovecot" > /etc/cron.d/letsencrypt-renew
echo "✅ Configuration terminée avec succès !"