Postfix, IMAP und SMTP Setup Script für Ubuntu 22.10

Hier ist ein Bash-Skript, das Postfix (SMTP-Server) zusammen mit Dovecot (IMAP-Server) auf Ubuntu 22.10 installiert und konfiguriert.

#!/bin/bash

# Postfix, Dovecot IMAP und SMTP Setup Script für Ubuntu 22.10

# Farbdefinitionen für die Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Funktion zum Überprüfen, ob das Skript als root ausgeführt wird
check_root() {
    if [ "$EUID" -ne 0 ]; then
        echo -e "${RED}Error: Dieses Skript muss als root ausgeführt werden.${NC}"
        exit 1
    fi
}

# Funktion zur Installation von Paketen
install_packages() {
    echo -e "${YELLOW}Aktualisiere Paketquellen...${NC}"
    apt update

    echo -e "${YELLOW}Installiere erforderliche Pakete...${NC}"
    apt install -y postfix dovecot-imapd dovecot-pop3d mailutils opendkim opendkim-tools
}

# Funktion zur Konfiguration von Postfix
configure_postfix() {
    echo -e "${YELLOW}Konfiguriere Postfix...${NC}"

    # Hauptkonfiguration
    postconf -e "myhostname = $(hostname -f)"
    postconf -e "mydomain = $(hostname -d)"
    postconf -e "myorigin = \$mydomain"
    postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost, \$mydomain"
    postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
    postconf -e "inet_interfaces = all"
    postconf -e "home_mailbox = Maildir/"
    postconf -e "mailbox_command ="
    postconf -e "smtpd_banner = \$myhostname ESMTP \$mail_name"
    postconf -e "biff = no"
    postconf -e "append_dot_mydomain = no"
    postconf -e "readme_directory = no"

    # TLS Konfiguration
    postconf -e "smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem"
    postconf -e "smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key"
    postconf -e "smtpd_use_tls=yes"
    postconf -e "smtpd_tls_session_cache_database = btree:\${data_directory}/smtpd_scache"
    postconf -e "smtp_tls_session_cache_database = btree:\${data_directory}/smtp_scache"

    # SASL Authentifizierung für Dovecot
    postconf -e "smtpd_sasl_type = dovecot"
    postconf -e "smtpd_sasl_path = private/auth"
    postconf -e "smtpd_sasl_auth_enable = yes"
    postconf -e "smtpd_sasl_security_options = noanonymous"
    postconf -e "smtpd_sasl_local_domain = \$myhostname"
    postconf -e "broken_sasl_auth_clients = yes"

    # SMTP Restrictions
    postconf -e "smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
    postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"
    postconf -e "smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination"

    # Maildir statt mbox
    postconf -e "virtual_mailbox_domains = \$mydomain"
    postconf -e "virtual_mailbox_base = /var/mail/vhosts"
    postconf -e "virtual_mailbox_maps = hash:/etc/postfix/vmailbox"
    postconf -e "virtual_minimum_uid = 1000"
    postconf -e "virtual_uid_maps = static:5000"
    postconf -e "virtual_gid_maps = static:5000"
    postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

    # Erstelle Verzeichnisstruktur
    mkdir -p /var/mail/vhosts/$(hostname -d)
    groupadd -g 5000 vmail
    useradd -g vmail -u 5000 vmail -d /var/mail/vhosts -m
    chown -R vmail:vmail /var/mail/vhosts

    # Erstelle vmailbox und virtual Dateien
    echo "postmaster@$(hostname -d) $(hostname -d)/postmaster/" > /etc/postfix/vmailbox
    echo "info@$(hostname -d) $(hostname -d)/info/" >> /etc/postfix/vmailbox
    postalias /etc/postfix/vmailbox

    echo "postmaster@$(hostname -d) postmaster" > /etc/postfix/virtual
    postalias /etc/postfix/virtual

    # Postfix neu laden
    systemctl restart postfix
}

# Funktion zur Konfiguration von Dovecot
configure_dovecot() {
    echo -e "${YELLOW}Konfiguriere Dovecot...${NC}"

    # Hauptkonfiguration
    cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak
    cat > /etc/dovecot/dovecot.conf <<EOF
# Dovecot Konfiguration
listen = *
protocols = imap pop3
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail

ssl = yes
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key

auth_mechanisms = plain login
auth_verbose = yes

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

passdb {
  driver = pam
}

namespace inbox {
  inbox = yes
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
}
EOF

    # Dovecot neu starten
    systemctl restart dovecot
}

# Funktion zur Konfiguration von OpenDKIM
configure_opendkim() {
    echo -e "${YELLOW}Konfiguriere OpenDKIM...${NC}"

    # Erstelle Verzeichnisstruktur
    mkdir -p /etc/opendkim/keys/$(hostname -d)
    chown -R opendkim:opendkim /etc/opendkim/keys
    chmod go-rw /etc/opendkim/keys

    # Hauptkonfiguration
    cat > /etc/opendkim.conf <<EOF
# OpenDKIM Konfiguration
Syslog                  yes
UMask                   007
Socket                  inet:8891@localhost
PidFile                 /var/run/opendkim/opendkim.pid
Mode                    sv
Canonicalization        relaxed/simple
KeyTable                /etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table
ExternalIgnoreList      refile:/etc/opendkim/trusted.hosts
InternalHosts           refile:/etc/opendkim/trusted.hosts
AutoRestart             yes
AutoRestartRate         10/1h
Background              yes
DNSTimeout              5
SignatureAlgorithm      rsa-sha256
EOF

    # Trusted hosts
    echo "127.0.0.1" > /etc/opendkim/trusted.hosts
    echo "localhost" >> /etc/opendkim/trusted.hosts
    echo "*@$(hostname -d)" >> /etc/opendkim/trusted.hosts

    # Key table
    echo "default._domainkey.$(hostname -d) $(hostname -d):default:/etc/opendkim/keys/$(hostname -d)/default.private" > /etc/opendkim/key.table

    # Signing table
    echo "*@$(hostname -d) default._domainkey.$(hostname -d)" > /etc/opendkim/signing.table

    # Erstelle DKIM Key
    opendkim-genkey -b 2048 -d $(hostname -d) -D /etc/opendkim/keys/$(hostname -d) -s default -v
    chown opendkim:opendkim /etc/opendkim/keys/$(hostname -d)/default.private
    chmod 600 /etc/opendkim/keys/$(hostname -d)/default.private

    # Postfix für DKIM konfigurieren
    postconf -e "milter_default_action = accept"
    postconf -e "milter_protocol = 2"
    postconf -e "smtpd_milters = inet:localhost:8891"
    postconf -e "non_smtpd_milters = inet:localhost:8891"

    # OpenDKIM neu starten
    systemctl restart opendkim
    systemctl restart postfix
}

# Funktion zur Anzeige der Zusammenfassung
show_summary() {
    echo -e "${GREEN}Installation abgeschlossen!${NC}"
    echo -e "${YELLOW}Zusammenfassung:${NC}"
    echo -e " - Postfix (SMTP) wurde installiert und konfiguriert"
    echo -e " - Dovecot (IMAP/POP3) wurde installiert und konfiguriert"
    echo -e " - OpenDKIM wurde installiert und konfiguriert"
    echo -e " - Mail-Verzeichnis: /var/mail/vhosts"
    echo -e " - Vmail Benutzer: vmail (UID 5000, GID 5000)"
    echo -e "\n${YELLOW}DKIM DNS Eintrag:${NC}"
    cat /etc/opendkim/keys/$(hostname -d)/default.txt
    echo -e "\n${YELLOW}Testen Sie die Konfiguration mit:${NC}"
    echo "telnet localhost 25 (SMTP)"
    echo "telnet localhost 143 (IMAP)"
    echo "openssl s_client -connect localhost:993 -crlf (IMAPS)"
}

# Hauptfunktion
main() {
    check_root
    install_packages
    configure_postfix
    configure_dovecot
    configure_opendkim
    show_summary
}

# Skript ausführen
main

Anleitung zur Verwendung:

  1. Speichern Sie das Skript als mailserver_setup.sh
  2. Machen Sie das Skript ausführbar: chmod +x mailserver_setup.sh
  3. Führen Sie das Skript als root aus: sudo ./mailserver_setup.sh

Was das Skript tut:

  1. Installiert die erforderlichen Pakete:
    • Postfix (SMTP-Server)
    • Dovecot (IMAP/POP3-Server)
    • OpenDKIM (für E-Mail-Signaturen)
    • Zusätzliche Tools
  2. Konfiguriert Postfix mit:
    • SMTP-Authentifizierung
    • TLS-Unterstützung
    • Maildir-Format für E-Mails
    • Virtuelle Mailboxen
  3. Konfiguriert Dovecot mit:
    • IMAP und POP3 Unterstützung
    • TLS-Verschlüsselung
    • Authentifizierung über PAM
    • Maildir-Unterstützung
  4. Konfiguriert OpenDKIM für:
    • DomainKeys Identified Mail (DKIM)
    • E-Mail-Signaturen
  5. Zeigt eine Zusammenfassung der Konfiguration an, einschließlich des benötigten DKIM-DNS-Eintrags.

Wichtige Hinweise:

  • Dieses Skript verwendet selbstsignierte Zertifikate. Für Produktionsumgebungen sollten Sie echte Zertifikate von einer Zertifizierungsstelle verwenden.
  • Sie müssen den DKIM-DNS-Eintrag in Ihrer Domain-Zone hinzufügen.
  • Überprüfen Sie die Firewall-Einstellungen, um sicherzustellen, dass die Ports 25 (SMTP), 143 (IMAP), 587 (Submission) und 993 (IMAPS) zugänglich sind.
  • Für eine Produktionsumgebung sollten Sie zusätzliche Sicherheitsmaßnahmen wie Fail2ban und regelmäßige Updates implementieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert