Scripts pour gestion d'un serveur mail
This commit is contained in:
parent
c88689b5e9
commit
027c3ab250
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
|
||||
|
||||
---
|
||||
|
||||
# **📌 Résumé des Scripts**
|
||||
| **Script** | **Action** | **Exemple d'utilisation** |
|
||||
|----------------------|-----------------------------------------------|--------------------------|
|
||||
| `install_mailserver.sh` | Installer Postfix/Dovecot + ajouter un domaine | `bash install_mailserver.sh domain.top` |
|
||||
| `add_domain.sh` | Ajouter un domaine | `bash add_domain.sh domain2.top` |
|
||||
| `add_user.sh` | Ajouter un utilisateur | `bash add_user.sh user@domain.top "password"` |
|
||||
| `add_alias.sh` | Ajouter un alias | `bash add_alias.sh contact@domain2.top user@domain.top` |
|
||||
| `add_forward.sh` | Ajouter une redirection | `bash add_forward.sh contact@domain.top user@domain2.top` |
|
||||
| `list_domains.sh` | Lister les domaines | `bash list_domains.sh` |
|
||||
| `list_users.sh` | Lister les utilisateurs | `bash list_users.sh` |
|
||||
| `list_aliases.sh` | Lister les alias/redirections | `bash list_aliases.sh` |
|
||||
| `del_user.sh` | Supprimer un utilisateur | `bash del_user.sh user@domain.top` |
|
||||
| `del_alias.sh` | Supprimer un alias | `bash del_alias.sh contact@domain2.top` |
|
||||
| `del_domain.sh` | Supprimer un domaine | `bash del_domain.sh domain2.top` |
|
||||
|
||||
|
|
@ -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 🎉"
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
@ -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."
|
||||
|
|
@ -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é"
|
||||
|
|
@ -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é"
|
||||
|
|
@ -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é"
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
# Récupérer le nom d’hô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"
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
echo "=== Liste des alias et redirections ==="
|
||||
cat /etc/postfix/virtual_aliases
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
echo "=== Liste des domaines gérés ==="
|
||||
cat /etc/postfix/virtual_domains
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
echo "=== Liste des utilisateurs ==="
|
||||
cat /etc/dovecot/users | cut -d: -f1
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
|
||||
echo "=== Mise à jour du système ==="
|
||||
apt update && apt upgrade -y
|
||||
|
||||
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 nom d’hôte complet (FQDN)
|
||||
FQDN=$(hostname -f)
|
||||
|
||||
# Vérifier si le FQDN est vide
|
||||
if [[ -z "$FQDN" ]]; then
|
||||
FQDN=$(cat /etc/hostname)
|
||||
fi
|
||||
|
||||
# Extraire le domaine principal (ex: mail.acemail.fr -> acemail.fr)
|
||||
DOMAIN=$(echo "$FQDN" | sed -E 's/^[^.]+\.//')
|
||||
|
||||
echo "🔍 Serveur détecté : $FQDN"
|
||||
echo "🌐 Domaine géré pour les emails : $DOMAIN"
|
||||
|
||||
|
||||
# Récupération des IP
|
||||
SERVER_IP=$(curl -s ifconfig.me || hostname -I | awk '{print $1}') # IP publique ou locale
|
||||
FQDN_IP=$(dig +short "$FQDN" | tail -n1) # IP associée au domaine
|
||||
|
||||
echo "🌍 IP publique du serveur : $SERVER_IP"
|
||||
echo "🔎 IP DNS du serveur : $FQDN_IP"
|
||||
|
||||
|
||||
# Vérification du DNS
|
||||
if [[ -z "$FQDN_IP" ]]; then
|
||||
echo "❌ Impossible de récupérer l'IP du serveur ($FQDN)."
|
||||
echo "🔹 Vérifie la configuration DNS et assure-toi que le nom de serveur pointe bien vers ce serveur."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$SERVER_IP" != "$FQDN_IP" ]]; then
|
||||
echo "⚠️ Problème DNS : L'IP du serveur ($FQDN_IP) ne correspond pas à l'IP du serveur ($SERVER_IP)."
|
||||
echo "🔹 Corrige l'entrée DNS ou attends sa propagation avant de continuer."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ DNS correct : $FQDN pointe bien vers $SERVER_IP"
|
||||
|
||||
|
||||
# Variables
|
||||
MAIL_DIR="/var/mail/vhosts"
|
||||
LE_DIR="/etc/letsencrypt/live/$FQDN"
|
||||
BACKUP_DIR="/backup/mail"
|
||||
|
||||
echo "=== Génération du certificat SSL avec Let's Encrypt ==="
|
||||
if [[ -f "$LE_DIR/fullchain.pem" ]]; then
|
||||
echo "✅ Certificat SSL déjà existant."
|
||||
openssl x509 -noout -text -in "$LE_DIR/fullchain.pem" | grep "Not After"
|
||||
else
|
||||
echo "🔄 Génération d’un nouveau certificat SSL..."
|
||||
certbot certonly --standalone -d "$FQDN" --non-interactive --agree-tos --register-unsafely-without-email
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "❌ Erreur lors de la génération du certificat Let's Encrypt."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Création des fichiers de configuration
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
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=$LE_DIR/fullchain.pem
|
||||
smtpd_tls_key_file=$LE_DIR/privkey.pem
|
||||
smtpd_use_tls=yes
|
||||
smtpd_tls_auth_only = yes
|
||||
EOF
|
||||
|
||||
echo "=== Configuration de Dovecot ==="
|
||||
cat > /etc/dovecot/dovecot.conf <<EOF
|
||||
disable_plaintext_auth = no
|
||||
ssl = required
|
||||
ssl_cert = <$LE_DIR/fullchain.pem
|
||||
ssl_key = <$LE_DIR/privkey.pem
|
||||
mail_location = maildir:$MAIL_DIR/%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
|
||||
|
||||
echo "=== Redémarrage des services ==="
|
||||
systemctl restart postfix dovecot
|
||||
systemctl enable postfix dovecot
|
||||
|
||||
echo "=== Vérification des ports ouverts ==="
|
||||
ss -tulpen | grep -E "postfix|dovecot"
|
||||
|
||||
echo "=== 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 !"
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Scimagic New Multi Frequency Universal Remote Control Duplicator
|
||||
|
||||
Best Copy Position
|
||||
|
||||
## Programming
|
||||
|
||||
### Standard
|
||||
|
||||
1. Press and hold button 1 and press button 2 four times at same time
|
||||
|
||||
2. Release 2 buttons LED fashed once every three seconds
|
||||
|
||||
3. Put original remote in te front of new remote (as closer as possible), press the orignial remote button which need to be copied until the LED of new remote flash quickly
|
||||
|
||||
(LED have regular flashes)
|
||||
|
||||
4. Press the button of New remote that you want to use to sav the code
|
||||
|
||||
5. if you do not copy successfully, please repeat above steps
|
||||
|
||||
6. To duplicate a second button, repeat the above steps
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Scimagic Nouvelle Télécommande Universelle Multi-Fréquence
|
||||
|
||||
Meilleure Position de Copie
|
||||
|
||||
## Programmation
|
||||
|
||||
### Standard
|
||||
|
||||
1. Appuyez et maintenez le bouton 1 tout en appuyant quatre fois sur le bouton 2 en même temps.
|
||||
|
||||
2. Relâchez les deux boutons, la LED clignote une fois toutes les trois secondes.
|
||||
|
||||
3. Placez la télécommande d'origine en face de la nouvelle télécommande (le plus proche possible), appuyez sur le bouton de la télécommande d'origine qui doit être copié jusqu'à ce que la LED de la nouvelle télécommande clignote rapidement.
|
||||
|
||||
(La LED a des clignotements réguliers)
|
||||
|
||||
4. Appuyez sur le bouton de la nouvelle télécommande que vous souhaitez utiliser pour enregistrer le code.
|
||||
|
||||
5. Si la copie n'est pas réussie, veuillez répéter les étapes ci-dessus.
|
||||
|
||||
6. Pour dupliquer un deuxième bouton, répétez les étapes ci-dessus.
|
||||
Loading…
Reference in New Issue