Mailserver

Drucken
Zuletzt aktualisiert am Donnerstag, 22. Mai 2008 Geschrieben von Tim Pommerening

Mailserver

  • Autor: Tim Pommerening
  • Verwendete Distribution : Mandrake Linux 9.1
  • Verwendeter Kern: 2.4.21-0.13mdk

Dieses Howto zeigt das Beispiel eines Mailserver-Aufbaus. Es wurde Mandrake Linux 9.1 verwendet. Bei der Konfiguration wurden allerdings keine Mandrake eigenen Konfigurationswerkzeuge benutzt, so dass das Howto für sämtliche Linux Distributionen nutzbar sein sollte.
Folgende Komponenten wurden verwendet:

Sämtliche hier aufgeführte Software ist Bestandteil der Mandrake Linux Distributionen und muss daher nicht unbedingt von den oben angegebenen Seiten bezogen werden.

Postifx

Postfix ist unser Mail-Transport-Agent und somit das Herzstück des Mailservers. Neben Postfix existieren auch andere bekannte MTAs, wie Sendmail oder Exim. Ich habe mich für Postfix entschieden, da es wohl einfacher zu konfigurieren, als der Dinosauerier Sendmail und ohnehin Teil der Mandrake-Distribution ist. Sämtliche Konfigurationsdateien für Postfix befinden sich unter /etc/postfix/.

  1. Die Datei main.cf

    Dies ist die Hauptkonfigurationsdatei für Postfix. Ein möglichst simpler und funktionierender Aufbau dieser Datei findet sich hier: ##### hier liegen die Postfix-Module
    daemon_directory = /usr/lib/postfix

    ##### Besitzer der Prozesse, zwischengespeicherten Mails; nicht root verwenden
    mail_owner = postfix

    ##### wie heisst unser Mailserver; evtl. habt ihr auf eurem DNS-Server ein Alias erstellt (e.g mail.domain)
    myhostname = tyranus.de

    ##### die domain in der sicher der Mailserver befindet bzw. fuer welche er zustaendig ist
    mydomain = tyranus.de

    ##### hostname bei der erzeugung neuer mails
    myorigin = $mydomain

    ##### Interface, auf dem der Mailserver Mails entgegennimmt. Da er nicht im Internet steht:all
    inet_interfaces = all

    ##### gibt an, an welche domain mails lokal ausgeliefert werden darf und wann sie den Rechner verlaesst
    mydestination = $myhostname, localhost.$mydomain $mydomain

    ##### unser Netzwerk: Rechner aus diesem IP-Adressbereich duerfen den Mailserver nutzen
    mynetworks = 10.0.0.0/16, 127.0.0.0/8

    ##### Domains fuer die, bzw von denen Postfix E-Mails relayed

    ##### Mailaliase
    #alias_maps = hash:/etc/aliases
    #:TIP: Disable NIS Lookups
    alias_maps = $alias_database

    ##### Damit leiten wir eigenden und von Postfix abgearbeitete E-Mails an unser Procmail-Script weiter
    mailbox_command = /usr/bin/procmail /home/imap/.procmailrc

    ##### der Name unseres Mailserver: erscheint im Header der E-Mail
    mail_name = mailerdaemon(postfix)


    Es gibt sicherlich fünf mal mehr Einstellungen, die man in der main.conf vornehmen kann. Der obige Ausschnitt erhält also nur die grundlegenden Einstellungen für Postfix mit denen ein Betrieb möglich ist.

    Falls die Datei /etc/aliases nicht existiert kann die Datei /etc/postfix/aliases dort hinkopiert werden. # newaliases Für Postfix gibt es nun folgene Befehle, um die Konfiguration zu überprüfen. Der erste prüft, ob die /etc/postfix/main.cf syntaktisch richtig ist. Der zweite gibt einfach die aktuelle Postfix Konfiguration aus. # postfix check # postconf Erhält man nach dem ersten Befehl eine ähnliche Fehlermeldung:
    postfix/postfix-script: warning: /var/spool/postfix/etc/hosts and /etc/hosts differ,
    so kommt das daher, dass Postfix aus Sicherheitsgründenchrooted läuft. Das heißt, Postfix wird in einem Gefängnis unter /var/spool/postfix ausgeführt. Das ist für Postfix das Root-Verzeichnis und es kann in kein Verzeichnis weiter oben wechseln. Man muss nun, um die Warnung abzustellen, die beiden Dateien, aus der Warnung entsprechend synchronisieren. Das heißt die ältere mit der neueren überschreiben, damit beide gleich sind.

  2. Die Datei master.cf

    Diese Datei ist normalerweise auch bereits vorhanden und braucht erst einmal nicht verändert zu werden. Sollte die vorhandene Datei von der folgenden abweichen, so sollte man sie zuert einmal ungeändert lassen. # =============================================================
    # service type priv unpriv chroot wakeup maxproc cmd + args
    # (yes) (yes) (yes) (never) (100)
    # =============================================================
    smtp inet n - y - - smtpd
    #smtps inet n - n - - smtpd
    #628 inet n - n - - qmqpd
    pickup fifo n - y 60 1 pickup
    cleanup unix n - y - 0 cleanup
    #qmgr fifo n - n 300 1 qmgr
    qmgr fifo n - y 300 1 nqmgr
    #tlsmgr fifo - - n 300 1 tlsmgr
    rewrite unix - - y - - trivial-rewrite
    bounce unix - - y - 0 bounce
    defer unix - - y - 0 bounce
    flush unix n - y 1000? 0 flush
    proxymap unix - - n - - proxymap

    # :TIP: Für SEHR genaues Logging verwenden wir wärend der Konfiguration die Option -v
    smtp unix - - y - - smtp -v

    relay unix - - y - - smtp
    showq unix n - y - - showq
    error unix - - y - - error
    local unix - n n - - local
    virtual unix - n y - - virtual
    lmtp unix - - y - - lmtp
    #localhost:smtp-backdoor inet n - n - - smtpd -o content_filter=

    #
    # Interfaces to non-Postfix software. Be sure to examine the manual
    # pages of the non-Postfix software to find out what options it wants.
    #
    # maildrop. See the Postfix MAILDROP_README file for details.
    #
    maildrop unix - n n - - pipe
    flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
    #
    # The Cyrus deliver program has changed incompatibly, multiple times.
    #
    old-cyrus unix - n n - - pipe
    flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
    # Cyrus 2.1.5 (Amos Gouaux)
    cyrus unix - n n - - pipe
    user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
    uucp unix - n n - - pipe
    flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

    ifmail unix - n n - - pipe
    flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
    bsmtp unix - n n - - pipe
    flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
    Es ist nun noch wichtig, dass alle Email-Adressen, wenn sie denn über einen Provider verteilt werden sollen, einen gültigen Namen besitzen. Linux verwendet normalerweise als Absenderadresse, Adressen nach dem folgenden Schema. <username>@<hostname> Ist man als Benutzer user angemeldet auf dem Rechner Mars ergibt sich die Adresse user@mars, mit der ein externer Mailanbieter nichts anfangen kann. Es ist nun möglich, dass Postfix die Absendernamen in bekannte Nanem umwandelt. Dazu editiert man die Datei /etc/postfix/canonical und gibt vorne die lokale Adresse und dahinter die globale Adresse an: This e-mail address is being protected from spambots. You need JavaScript enabled to view it. This e-mail address is being protected from spambots. You need JavaScript enabled to view it. Nach dem Editieren wandeln wir die Datei ins Hashformat um, was man übrigens mit jeder Konfigurationsdatei für Postfix, die in der main.cf mit hash: beginnt, nach allen Änderungen machen muss. # postmap /etc/postfix/canonical Nun werden alle Mails, die als root über das Internet verschickt werden in eine Adresse umgewandelt, die dem Provider bekannt ist.

  3. SMTP mit Authentifikation

    Da immer mehr Mail-Anbieter SMTP nur noch mit Authentifikation erlauben, ist es sinnvoll, diese auch zu betreiben.
    Dafür wird die libasl7 Bibliothek benötigt, die normalerweise bereits installiert sein sollte. Allerdings ist es z.B. für SMTP-Auth bei dem Anbieter 1&1 notwendig, zusätlich ein Plugin zu installieren, welches Klartext-Authentifikation erlaubt. Dieses Plugin ist auch bestandteil der Mandrake Distribution. Der Paketname lautet libasl7-plug-plain.
    Dieses Plugin kann z.B. über urpmi als RPM-Paket nachinstalliert werden. # urpmi libasl7-plug-plain Sollte man Probleme mit SMTP-AUTH haben und dies zuerst einmal weglassen wollen, so sollte man im nächsten Kapitel weiterlesen. Wer SMTP-AUTH verwenden möchte, muss zuerst in der Datei /etc/postfix/main.cf folgende Zeilen einfügen: ######################################################
    # :TIP: SMTP AUTH
    ################################################

    # IMMER ein EHLO senden
    smtp_always_send_ehlo = yes

    # SMTP mit SASL-Authentifikation verwenden
    smtp_sasl_auth_enable = yes

    # Die Paßwörter stehen in der Datei /etc/postfix/smtp_auth
    smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth

    # Zusatz-Optione: Keine anonyme Anmeldung verwenden
    smtp_sasl_security_options = noanonymous

    # Den Relayhost (bei 1&1 z.B.: auth.mail.onlinehome.de)
    relayhost = auth.mail.onlinehome.de

    Unter smtp_sasl_password_maps haben wir nun die Datei eingetragen, in der die Authentifikationsdaten stehen. Wir schreiben also unsere SMPT-Serverdaten in die Datei /etc/postfix/smtp_auth nach dem Muster: <auth-smtp-server-url> <benutzername>:<passwort> Nach dem speichern der Datei, geben wir ihr nur Lese- und Schreibrechte für root, da sie ja sensible Daten enthält. # chmod 600 /etc/postfix/smtp_auth Anschließend wandeln wir auch diese Datei ins Hashformat um. # postmap /etc/postfix/smtp_auth

    Für weitergehende Informationen und Hilfen bezüglich SMTP-AUTH ist folgene Quelle sehr interessant und hilfreich: Postfix mit SMTP Auth absichern

  4. Testlauf

    Nun werden wir sehen, ob wir Postfix nicht zum Laufen bekommen. Es empfiehlt sich für alle weiteren Schritte, immer die Logfiles im Auge zu behalten. $ tail -f /var/log/syslog $ tail -f /var/log/maillog Bei meiner Distribution gibt es letzteres Logfile nicht für Postfix. Dafür gibt es aber die 3 Dateien. /var/log/mail/errors, /var/log/mail/info und /var/log/mail/warnings. Diese kann man auch zugleich abfragen. $ tail -f /var/log/mail/errors /var/log/mail/info \
    /var/log/mail/warnings

    Zuerst starten wir Postfix: # /etc/init.d/postfix start Anschließend versuchen wir eine E-Mail zu verschicken: $ mail <Eigene.Adresse@Eigene.Domain>
    Subject: Testmail
    Das ist eine Testmail
    .
    Dabei sollte man auf die Logfiles achten. Wenn alles geklappt hat, kommt die Mail nach kurzer Zeit an.


Courier IMAP

Courier IMAP ist die Komponente, die später im Mailclient als IMAP Server dient. Courier IMAP unterstützt auch das POP3 Protokoll, jedoch wird hier nur auf das in meinen Augen praktischere IMAP Protokoll eingegangen, dass es erlaubt, die Mails auf dem Server liegen zu lassen und mit verschiedenen Clients abzugleichen. Das Paket kann entweder über die Mandrake-Distribution mit urpmi oder direkt als .tgz Paket compiliert werden.

  1. SSL-Zertifikat

    Nach der Installation muss ein SSL-Zertifikat erzeugt werden, sofern das die Installationsroutine nicht selbst aufruft, gibt man folgenden Befehl ein: # /usr/lib/courier/imapd-ssl.rc Anschließend wechseln wir nach /etc/courier. Dort liegen die Konfigurationsdateien. Für uns wichtig sind authdeamonrc, imapd und imapd-ssl.

  2. Die Datei authdeamonrc

    Diese Konfigurationsdatei steuert die Kommunikation zwischen SMTP-Server und dem Auth-Deamon. Dieser gewährt oder verbietet den Mailversand über den SMTP-Server aufgrund von festlegbaren Regelkriterien. Die Konfigurationsdatei sollte folgendermaßen aussehen: #authmodulelist="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
    authmodulelist="authuserdb"

    #authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
    authmodulelistorig="authuserdb"

    #Anzahl der laufenden Authentifizierungsdienste. Bei weniger als 20 Mailboxen sollte 1 ausreichen.
    daemons=1

    #Gibt es unterschiedliche authd-Versionen, kann man diese angeben. "" verwendet die erstbeste.
    version=""

    #Diese Variable sollte nicht verändert werden, da sie von mehreren Prozessen verwendet wird.
    authdaemonvar=/var/run/authdaemon.courier-imap
    Mehr Informationen zum auth-Deamon gibt es hier.

  3. Die Datei imapd

    Wie üblich enthält diese Datei eine Fülle von Optionen. Ich gebe hier nur wieder die wichtigen an. Nachdem alles läuft kann man durch Verändern anderer Optionen sicher noch einiges optimieren. # Adresse, auf der CourierIMAP läuft. Standard ist 0.
    ADDRESS = 0

    # Port auf dem CourierIMAP lauscht. Standard ist 143.
    PORT = 143

    # Maximale Anzahl der zu startenden Server.
    MAXDEMOINS = 20

    # Maximale Verbindungen zur gleichen IP.
    MAXPERIP = 20
    Die letzten beiden Variablen müssen an jedes System angepasst werden. Je mehr Accounts man besitzt, desto mehr Verbindungen sollte man auch zu einer IP-Adresse hin zulassen. Die Anzahl der Demons kann bei mehr Postfächern (dazu zählen auch Unterordner) erhöht werden, um zwischen diesen schneller wechseln zu können. Das belegt natürlich entsprechend Ressourcen auf dem Server. Im Normalfall sollte dort ein Wert von 5 ausreichend sein.

  4. Die Datei imapd-ssl

    Diese Konfigurationsdatei wird benötigt, wenn die Mails über SSL-Verschlüsselung abgerufen werden sollen. Auch hier gibt es wieder einiges an Einstellungsmöglichkeiten. Ich zeige nur die lebenswichtigen auf: # Der Port, auf dem IMPS über SSL lauscht. Standard ist 993.
    SSLPORT = 993

    # Die Adresse, auf der CourierIMAP in der SSL Version läuft. Standard ist 0.
    SSLADDRESS = 0

  5. Anlegen der IMAP-User und Accounts

    Nun ist wieder Konsolen-Arbeit angesagt. Wir müssen nun die Umgebung für die Mails, also die Postfächer und Zugriffsrechte darauf anlegen. CourierIMAP verwendet das Prinzip der UserDB. Dabei erhält unser Imap Server ein eigenes Heimatverzeichnis, in dem sämtliche Postfächer abgelegt werden. Ein Postfach besteht standardmäßig aus folgenden 5 Verzeichnissen: cur, new, tmp, .Trash, .Sent. Später können wir auch über unseren Email-Client noch beliebige Ordner hinzufügen.
    Fangen wir also an und erzeugen einen neuen User. # useradd -m -d /home/imap -s /bin/bash -p < \
    testpasswort> imap
    Wir legen nun eine neue Datei namens /etc/userdb an und geben volle Rechte für ihren Besitzer. # touch /etc/userdb
    # chmod 700 /etc/userdb
    Nun rufen wir das Skript pw2userdb auf und konvertieren damit die Datei /etc/passwd in das userdb-Format. Den Inhalt schreiben wir in die /etc/userdb. # pw2userdb > /etc/userdb Nun öffnen wir /etc/userdb und entfernen alle Zeilen bis auf die, mit imap beginnt und die Folgezeile.
    Dies sehen etwa folgendermaßen aus: imap uid=734|gid=734|home=/home/imap|shell=/bin/bash|systempw= \
    $1$CZ8098x837$6iIo83TGlirCgAsvfDY0|gecos=IMAP Mailaccounts
    734= imap
    Wir vergewissern uns, ob auch nach dem Schreiben die /etc/userdb noch die Rechte 700 besitzt.
    Nun erstellen wir die Postfächer. Als Beispielpostfach erstellen wir das Postfach tim. Für die Erstellung der Postfächer gibt es auf vielen Distributionen das Skript maildirmake oder maildirmake++. Sollte dieses nicht vorhanden sein, kann man es auch selbst schreiben. Hier ist der Code: #! /bin/sh
    # maildirmake: Creates a maildir!
    mkdir -p $1/new $1/cur $1/tmp && chmod -R 700 $1
    Nun legen wir die Verzeichnisse an. $ su imap
    $ cd
    $ maildirmake tim
    $ exit
    Wir benötigen nun ein weiters Skript, welches ich auf meiner Distribution nicht gefunden habe. Daher auch hier der Code. #! /bin/sh
    # maildiruser: Creats a mail-useraccount and sets the password
    /usr/sbin/userdb "$1" set home=/home/imap mail=/home/imap/$1 uid=734 gid=734
    /usr/sbin/userdbpw -md5 | /usr/sbin/userdb "$1" set imappw
    /usr/sbin/makeuserdb
    Die User-ID (hier 734) muss mit der User-ID des Benutzers imap übereinstimmen.
    Nun wird das Script als root gestartet. # maildiruser tim Man wird dann aufgefordert, ein Passwort einzugeben. Dieses Passwort ist das spätere Passwort, welches man im E-mail Client eingeben muss, um seine Mails abrufen zu können. Daher sollte man es sich gut merken. Wenn alles geklappt hat, so steht in der Datei /etc/userdb eine neue Zeile, die mit tim beginnt.

  6. Testen von CourierIMAP

    Nun sind wir bereit, um CourierIMAP zu starten. Sollte das Verzeichnis /var/run/courier-imap nicht existieren, muss es angelegt werden. Außerdem muss vor dem Start von CourierIMAP der Auth-Deamon bereits laufen. Nach einem Neustart kann es sein, dass das Verzeichnis erneut angelegt werden muss. # /etc/init.d/authd start
    # /etc/init.d/courier-imap start

Buy cheap web hosting service where fatcow web hosting review will give you advices and please read bluehost review for more hosting information.
Free Joomla Templates designed by Web Hosting Top