Mailserver · 5 min read · Dec 25, 2025

Ein einfacher Mailserver auf Arch Linux (Postfix + Dovecot)

Ein einfacher Mailserver auf Arch Linux (Postfix + Dovecot)

Autor: Jeffrey Gelens
Version: 1.3
Datum: 04-12-2009

Einführung

Dieses Tutorial beschreibt, wie man einen vollständigen Mailserver mit Postfix und Dovecot auf einer Arch Linux-Maschine oder VPS installiert. Dieses spezielle Tutorial basiert auf meinem 256MB VPS. Grundkenntnisse in Linux sind erforderlich, da ich nicht jeden Schritt im Detail beschreibe.

Basissystem

Das Basis-Image ist Arch Linux 2008.06. Nach dem Booten ist es besser, Root-Logins in Ihrem SSH-Server zu deaktivieren und einen neuen Benutzer wie folgt zu erstellen:

adduser   
usermod -a -G wheel,users,nobody,mail 

Es ist optional, die Arch Linux-Spiegel nach Geschwindigkeit zu bewerten, könnte aber die Installation beschleunigen:

pacman -Sy  
pacman -S python  
sed -ie'' 's/^#S/S/g' /etc/pacman.d/mirrorlist  
rankmirrors -v /etc/pacman.d/mirrorlist | tee /etc/pacman.d/mirrorlist.new && mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist

Installieren Sie die wesentlichen Pakete für dieses Setup:

pacman -Syu  
pacman -S sudo base-devel abs

E-Mail-Server

Jetzt, da wir die grundlegenden Pakete installiert haben, ist der nächste Schritt die Installation der E-Mail-Server. Als SMTP-Server werden wir Postgrey installieren, da es eines der besten Werkzeuge gegen Spam ist, also lassen Sie uns auch diese installieren. Greylisting ist momentan eine sehr effektive Methode, um Spam zu blockieren, ohne die Nachricht selbst zu scannen, wodurch keine CPU-Zyklen verschwendet werden. Auf meinem Server blockiert es etwa 95% aller Spam-Nachrichten, die anderen 5% werden von Spamassassin bearbeitet. Der einzige Nachteil des Greylistings ist, dass eingehende E-Mails um einige Minuten verzögert werden.

pacman -S postfix dovecot spamassassin procmail  
groupadd -g 5001 spamd  
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd  
chown spamd:spamd /var/lib/spamassassin

Spamassassin

Bearbeiten Sie die –max-children nach Ihren Wünschen. Spamassassin benötigt viel Speicher, daher ist für einen Mailserver mit nur wenigen Benutzern 1 Kind ausreichend.

/etc/conf.d/spamd

SAHOME="/var/lib/spamassassin/"
SPAMD_OPTS="-c --max-children 1 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log --pidfile /var/run/spamd.pid"

Zertifikate

Zuerst müssen wir einige selbstsignierte Zertifikate für Dovecot und Postfix generieren. Es wird nach einem Passwort gefragt, jede zufällige Zeichenfolge ist in Ordnung, Sie müssen sich nicht daran erinnern.

cd /etc/ssl/certs  
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt  
openssl rsa -in mail.key -out mail.key  
mv mail.key /etc/ssl/private

Dovecot

Wir werden Dovecot und Postfix so einrichten, dass sie die Maildir-Struktur zur Speicherung von E-Mails verwenden. Dies speichert jede E-Mail des Benutzers in dessen Heimatverzeichnis und nicht in einer Datenbank. Dies ist für dieses Setup in Ordnung, aber für eine größere Anzahl von Benutzern ist es besser, MySQL oder PostgreSQL zur Speicherung zu verwenden. Dovecot wird so eingerichtet, dass Benutzer IMAP und IMAPs (SSL) verwenden können. Außerdem hat Dovecot einen integrierten SASL-Authentifizierungsserver, sodass wir keinen separaten SASL-Server einrichten müssen, was Speicher spart.

/etc/dovecot/dovecot.conf

protocols = imap imaps
disable_plaintext_auth = yes
log_timestamp = "%b %d %H:%M:%S "
ssl = yes
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key
mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/run/dovecot/auth-client
      user = postfix
      group = postfix
      mode = 0660
    }
  }
}

Postfix

Als nächstes ist Postfix dran, die Konfigurationsdatei ist sehr komplex. Glücklicherweise habe ich alle Recherchen durchgeführt, sodass Sie fast alles kopieren und einfügen können. Die folgenden Einstellungen müssen jedoch noch geändert werden:

myhostname Dies ist der Standort Ihrer Mailserver (z.B. mail.example.com). myorigin Dies ist die Domain nach dem @ in den E-Mail-Adressen (z.B. jeffrey@ example.com). virtual_alias_domains Das gleiche wie myorigin.

/etc/postfix/main.cf

# Pfade
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# Domain-Einstellungen
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
# Timeout-Einstellungen und andere Limits
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# SMTP-Einstellungen
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
#smtp_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination,
                               check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
# Netzwerkeinstellungen
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# E-Mail- und Postfach-Einstellungen
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0
# Sonstiges
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +

Bearbeiten Sie master.cf, um Postfix E-Mails durch Postgrey (über das wir im nächsten Kapitel sprechen werden) und Spamassassin filtern zu lassen.

/etc/postfix/master.cf

Ersetzen Sie die folgende Zeile:

smtp      inet  n       -       n       -       -       smtpd

mit diesen beiden Zeilen:

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

Und fügen Sie die folgenden drei Zeilen am Ende der Datei hinzu:

spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Setzen Sie die Spamassassin-Regeln. Möglicherweise müssen Sie den required_score ein wenig anpassen. Der Standardwert 6.31 scheint für mich großartig zu sein.

/etc/mail/spamassassin/local.cf

rewrite_header Subject ***SPAM***
required_score 6.31
report_safe 1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

/etc/procmailrc

Spam kann automatisch in den Junk-Ordner kopiert werden, indem diese Datei erstellt wird:

DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/

:0:
* ^X-Spam-Status: Yes
.Junk/

Benutzerkonten erstellen

Für jeden E-Mail-Benutzer erstellen Sie die entsprechenden Konten, erstellen Sie Ihr eigenes Skript, wenn Sie nicht alles manuell erledigen möchten.

useradd -m -G mail -s /sbin/nologin   
cd ~  
umask 077  
mkdir -p Maildir/{cur,new,tmp}  
mkdir -p Maildir/.Drafts/{cur,new,tmp}  
mkdir -p Maildir/.Sent/{cur,new,tmp}  
mkdir -p Maildir/.Trash/{cur,new,tmp}  
chmod 0700 Maildir/{cur,new,tmp}  
chmod 0700 Maildir/.Drafts/{cur,new,tmp}  
chmod 0700 Maildir/.Sent/{cur,new,tmp}  
chmod 0700 Maildir/.Trash/{cur,new,tmp}  
chown -R :users *

Stellen Sie sicher, dass die E-Mail-Adressen der neuen Benutzer zur virtuellen Benutzerkarte hinzugefügt werden.

/etc/postfix/virtual

jeffrey@localhost jeffrey@localhost

Führen Sie aus

postmap /etc/postfix/virtual

nachdem Sie diese Datei gespeichert haben.

Postgrey

Postgrey ist nicht in den Standard-Pacman-Repositories, also laden wir es aus AUR herunter. Stellen Sie sicher, dass Sie die folgenden Befehle als normaler Benutzer und nicht als Root ausführen.

cd ~  
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz  
tar xzvf yaourt.tar.gz  
cd yaourt  
makepkg -i  
yaourt --noconfirm -S postgrey

Optional können die Dateien /etc/postfix/postgrey_whitelist_recipients bearbeitet werden, um Domains und E-Mail-Adressen, denen Sie vertrauen, auf die Whitelist zu setzen. Dies ist nützlich, da diese Adressen aufgrund des Greylistings nicht verzögert werden.

Starten der Server

Endlich! Wir sind fertig. Jetzt lassen Sie uns alle Server starten und hoffen, dass sie alle funktionieren.

Bearbeiten Sie /etc/rc.conf und stellen Sie sicher, dass Sie die aufgeführten Daemons hinzufügen:

DAEMONS=(spamd postgrey dovecot postfix)

Dies stellt sicher, dass alle Daemons beim Neustart automatisch gestartet werden. Für den Moment starten Sie sie manuell:

/etc/rc.d/spamd start  
/etc/rc.d/postgrey start  
/etc/rc.d/dovecot start  
/etc/rc.d/postfix start

Fügen Sie mail.example.com zu Ihren bevorzugten E-Mail-Clients hinzu, geben Sie Ihre Benutzereinstellungen ein, aktivieren Sie optional SSL und Ihr persönlicher voll ausgestatteter Mailserver ist bereit!

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.