Mailserver mit Postfix, Fetchmail, Dovecot
Autor: montykarlo
Diese Dokumentation beschreibt das Einrichten eines Mailservers unter SUSE 10 mit Fetchmail, Postfix und Dovecot-IMAP-Server. Da ich selbst Linux-Neuling bin, wurde das ganze von einigen größeren und kleineren Problemen begleitet. Letztendlich denke ich aber, dass das ganze eine runde Sache abgibt und hoffe es ist frei von Fehlern.
Im Runleveleditor den Fetchmail Dienst aktivieren (Runlevel 3+5) - User inkl. Homeverzeichnissen anlegen
Damit Fetchmail funktioniert, muss eine Datei namens Fetchmailrc erstellt werden. Ich habe Sie unter /etc abgelegt. Also tun wir das nun:
- vi /etc/fetchmailrc Code:
[Inhalt der fetchmailrc; minimal Konfigration] #Konto für User Fred wird bei 1und1 abgeholt server pop.1und1.com proto pop3 user pt123456789 password sagichnet to fred #lokaler Linux User. # Konto für User Berta wird bei 1und1 abgeholt server pop.1und1.com proto pop3 user pt987654321 password sagichauchnet to berta usw…..
Anschließend sollten die Rechte der Datei geändert werden in 660
- chmod 660 /etc/fetchmailrc
Damit die Emails periodisch vom Server geholt werden, müssen wir nur noch den Dienst über den Runleveleditor im Yast starten. Oder mit
- insserv –d /etc/init.d/fetchmail
Somit wird der Dienst per Default in den Runlevels 3+5 gestartet Jetzt werden die Mails per Default alle 600 sec vom Provider geholt.
Soll der Defaultwert geändert werden, muss in /etc/init.d/fetchmail der Polling Wert geändert werden. z.B. 60 für jede Minute.
- vi /etc/init.d/fetchmail
Code:
# Check for existence of needed config file and read it FETCHMAIL_CONFIG=/etc/sysconfig/fetchmail FETCHMAIL_RC=/etc/fetchmailrc test -r $FETCHMAIL_CONFIG || { echo "$FETCHMAIL_CONFIG not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } test -r $FETCHMAIL_RC || { echo "$FETCHMAIL_RC not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # Read config FETCHMAIL_POLLING_INTERVAL=600 FETCHMAIL_FETCHALL=yes FETCHMAIL_FETCHALL_OPTION= FETCHMAIL_SILENT=no FETCHMAIL_SILENT_OPTION= FETCHMAIL_EXPERT_OPTIONS= . $FETCHMAIL_CONFIG if [ $FETCHMAIL_FETCHALL = "yes" ] ; then FETCHMAIL_FETCHALL_OPTION=" -a" fi if [ $FETCHMAIL_SILENT = "yes" ] ; then FETCHMAIL_SILENT_OPTION=" -s" fi
Anschließend den Polling Wert auch noch unter /etc/sysconfig/fetchmail ändern.
- vi /etc/init.d/fetchmail
Code:
FETCHMAIL_POLLING_INTERVAL=600 Eventuell Fetchmail neu starten - rcfetchmail restart
So fertig. Fetchmail ruft nun alle 6 min die POP3 Postfächer ab, und übergibt die Mails anschließend an den lokalen smtp Server. (sobald er installiert ist Wink )
- Fetchmail Logfile o tail –f /var/log/fetchmail
2. Dovecot-IMAP Server Um über IMAP auf die Emails zugreifen zu können benötigen wir noch ein kleines Programm, welches dies ermöglicht. Ich habe mich für Dovecot entschieden da es sehr einfach aufgebaut ist. Es gibt noch Cyrus, wobei ich denke dass er sich erst „lohnt“ wenn man es mit vielen Usern zu tun hat, da er sehr umfangreich ist. UW-IMAP wäre auch noch ne alternative zu Dovecot.
Also das Paket für Dovecot findet sich nur auf Kauf-DVD oder superumständlich im Internet.
- installiert wird es nach /etc/dovecot - Konfigdatei: /etc/dovecot/dovecot.conf
Der einzige Parameter den ich geändert habe war:
Code:
Devault_mail _env = maildir:%h/mails
Somit schaut Dovecot im Homedir der User im Verzeichnis „mails“ nach Emails.
Das ganze funktioniert dann wieder über den lokalen Linuxuser inkl. Passwort, der dann im Emailclient eingetragen wird. Man kann den IMAP Zugriff auch über ein Zertifikat regeln.
Auch Dovecot sollte als Dienst gestartet werden.
- Dovecot als Dienst starten lassen. Runlevel 3+5. Am besten über den Runleveleditor im Yast.
3. Postfix einrichten
So nun müssen wir noch den Postfix konfigurieren und fertig ist das Ding. Punkt 1: Postfixbuch kaufen, lesen und daneben legen.
Wir müssen Hauptsächlich in einer Datei editieren. Der main.cf.
- installiert ist postfix unter /etc/posfix - konfigdatei: /etc/postfic/main.cf
Code:
[Auszug der main.cf ]
alias_maps = hash:/etc/aliases #in diese Datei werden die lokalen User eingetragen, somit wird lokales Senden und Empfangen über die öffentliche Emailadresse ermöglicht. biff = no canonical_maps = hash:/etc/postfix/canonical command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/lib/postfix debug_peer_level = 2 default_transport = smtp disable_dns_lookups = yes disable_mime_output_conversion = no fast_flush_domains = header_checks = regexp:/etc/postfix/header_checks home_mailbox = mails/ #dieser Pfad verweist automatisch auf das Homedir der user. Und da es bei mir /home/linuxuser/mails heißt, reicht es nur mails/ einzugeben. html_directory = /usr/share/doc/packages/postfix/html inet_protocols = all local_transport = local mail_name = Postfix mail_owner = postfix mail_spool_directory = /var/mail mailbox_size_limit = 0 #Größenbeschränkung der Mailbox in Byte Achtung 0 = unendlich mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man masquerade_classes = envelope_sender, header_sender, header_recipient masquerade_domains = $mydomain masquerade_exceptions = root message_size_limit = 0 #Größe der Emails die akzeptiert werden in Byte. Achtung 0 = unendlich mydestination = $mydomain, $mydomain,localhost, localhost.$mydomain mydomain = maildomaene.de #Beschreibt die Maildomäne des Providers, Hat ein Empfänger oder Absender diese Endung in der Mailadresse ist er schonmal “ein wenig vertrauensvoll“ myhostname = mail.lokaledomaene #Hostname.Domänenname des Linux PC´s mynetworks = 192.168.2.0/24, 127.0.0.0/8 # der Netzbereich von dem Verbindungen zum Postfix aufgebaut werden dürfen inkl. Netzmaske myorigin = $mydomain newaliases_path = /usr/bin/newaliases queue_directory = /var/spool/postfix readme_directory = /usr/share/doc/packages/postfix/README_FILES relayhost = smtp.1und1.com relocated_maps = hash:/etc/postfix/relocated sample_directory = /usr/share/doc/packages/postfix/samples sender_canonical_maps = hash:/etc/postfix/sender_canonical sendmail_path = /usr/sbin/sendmail setgid_group = maildrop smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth #in dieser Datei finden sich die Zugangsdaten zum 1und1 SMTP Server smtp_sasl_security_options = noanonymous #Anonymer login wird verweigert smtp_use_tls = no #Über smtpd_.... warden Berechtigungen/Regeln erstellt. Die Email egal ob nach extern oder nach intern muss diese Prüfungen bestehen ansonsten wird sie nicht zugestellt. smtpd_client_restrictions = permit_mynetworks, #Clients die Mails senden und eine IP aus dem Bereich von $MYNETWORKS haben werden zur nächsten Prüfung “geschickt” wenn Sie einem anderen IP Bereich angehören wird die Zustellung verweigert smtpd_helo_required = yes #Mails von Mailservern die kein HELO oder EHLO senden werden nicht angenommen. Es gibt wohl Spammer die HELO nicht senden smtpd_helo_restrictions = reject_invalid_hostname #Wenn nach dem HELO eine komische Syntax (z.B. Leerzeichen) verwendet wird, wird die Mail verworfen smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_unauth_destination, # reject_unknown_recipient_domain: die EMpfängerdomäne muss einen #gültigen MX Rekord besitzen # reject_unauth_destination verwirft das Absenden von Emails zu Zielen die #nicht unter $inet_interfaces, $mydestination oder $relay_domains, smtpd_sasl_auth_enable = no smtpd_sender_restrictions = reject_unknown_sender_domain, #Absenderadresse muss gültigen MX-Rekord haben. Haben zwar nicht wir aber 1und1 reject_non_fqdn_sendersmtpd_use_tls = no strict_8bitmime = no strict_rfc821_envelopes = no transport_maps = hash:/etc/postfix/transport unknown_local_recipient_reject_code = 550
3.2 Authentifizierung beim Provider
Der Eintrag „smtp_sasl_password_maps“ verweist auf die Datei „smtp-auth“ In dieser Datei müssen die Benutzerdaten des Providers die zur Authentifizierung verwendet werden eingetragen werden. Diese Datei müssen wir erst noch anlegen.
- vi /etc/postfix/smtp-auth
Code:
[Auzug der smtp-auth] smtp.1und1.com pt1235:bastian #SMTP-SERVER #irgendein-1und1-User:passwort_bei_1und1
Anschließend muss Datei gehasht werden:
- postmap /etc/posfix/smtp-auth
3.3 Lokale Mailzustellung
Für die lokale Mailzustellung ist der Eintrag „alias_maps = hash:/etc/aliases“ zuständig. Somit wird erreicht dass eine Email die an einen Kollegen gehen soll nicht erst zu 1und1 und von dort wieder abgeholt wird. Sie bleibt als im LAN. (Es soll auch irgendwie ohne diesen Eintrag gehen, habe das aber nicht geschafft) Die Datei „etc/aliases“ sollte schon vorhanden sein und muss nur noch um die Einträge der User erweitert werden.
Die Einträge müssen nach folgendem Schema erfolgen, wobei beim Mailuser (Emailadresse) das „@Domänenname“ wegzulassen ist. z.B. Mailuser : carlos.dunga@web.de = Linuxuser : carlosd
Dann muss das ganze so aussehen:
- vi /etc/aliases
Code:
[Auszug der /etc/aliases] carlos.dunga: carlosd
Anschließend muss aus der Datei /etc/aliases noch eine Datenbank für den Postfix erstellt werden. Dies muss nach jeder Änderung an der Datei aliases getan werden:
- postalias /etc/aliases
Nun ist der Punkt gekommen an dem man das ganze einmal testen könnte. Einfach eine Email einem Webmailer als das 1und1 Konto auf das 1und1 Konto schicken, 15 min warten (oder fetchmailrc ausführen) und die Email mit dem zuvor auf IMAP Konfigurierten Email Client empfangen und dann wieder zurückschicken. #
Und sehet her es funktioniert. Wenn nicht dann checke alle Konfigfiles nach Tippfehlern, erzeugt noch mal die Datenbanken oder schaut ins maillog (siehe unten)
4. Kommandosammlung
4.1 Linux
ps –ef # laufende Linux Prozesse anzeigen ps –ef | grep Dovecot # zeigt nur Dovecot Prozesse useradd –c „Fred Feuerstein“ –d /home/fred –m –g user fred
- User Fred Feuerstein mit #Anmeldenamen „fred“ und dem Homedir #/home/fred wird angelegt. Gleichzeitig #wird er in die Gruppe „user“ gesteckt
passwd fred #So wird ein Passwort für fred erstellt
4.2 Postfix
/etc/postfix/postfix start | Stopp | reload # starten, beenden, neustarten oder rcpostfix start | stop | reload # starten, beenden, neustarten postconf –n # Konfiguration der main.cf auslesen postalias /etc/aliases # erzeugt DB aus aliases für postfix tail –f /var/log/mail # zeigt Maillog in „Echtzeit“; machmal #lohnt auch ein blick in die Dateien #mail.err; mail.info, mail.warn, messages tail –f /var/log/fetchmail #Maillog von fetchmail postmap /etc/posfix/smtp-auth # Datei smtp-auth wird gehasht telnet „mailserver“ 25 #SMTP auf dem Server test. Kommandos #und wie er reagieren muss / sollte im #Internet suchen oder wissen mailq #zeigt pb irgendwelche mail „hängen“ mailq flush #leert die mailq. Geht es nicht erscheint #ein Fehler/Hinweis in /var/log/mail 4.3 Dovecot
/etc/dovecot # startet dovecot ps –ef | grep Dovecot # zeigt nur Dovecot Prozesse telnet „servername“ 143 # Dovecot sollte sich „OK dovecot ready“ # melden. Dann tut alles kill -9 PID_der_Dovecot_Prozesse # so wird er beendet
5. Quellen
Als Quellen dienten vor allem das Postfixbuch, der Linux-Club, und www.framp.de Ansonsten noch viele verschiedene Webseiten auf denen ich die eine oder andere Info gefunden habe.
Ergänzungen von Carsten und Frankie777:
Fetchmail kann auch als Dämon gestartet werden über den runlevel-editor In der sysconfig kann dazu noch der Polling-Wert geschrieben werden und gut ist.
Auch von mir ein paar (unvollständige) Anmerkungen:
- mydestination = $mydomain, $mydomain,localhost, localhost.$mydomain
$mydomain ist doppelt, dafür $myhostname reinnehmen
- myhostname ist normalerweise rechner.domain.tld und kein nicht auflösbarer lokaler Name
- smtpd_client_restrictions = permit_mynetworks,
- Clients die Mails senden und eine IP aus dem Bereich von $MYNETWORKS haben werden zur nächsten Prüfung “geschickt” wenn Sie einem anderen IP Bereich angehören wird die Zustellung verweigert
Nein, Clients die zu mynetworks gehören bekommen ein OK und damit ist smtpd_client_restrictions bestanden, Clients die NICHT zu mynetworks gehen NEUTRAL in die nächste Prüfung. Da es keine nächste Prüfregel gibt lautet die letzte Regel immer permit also so: smtpd_client_restrictions = permit_mynetworks, permit Das macht überhaupt keinen Sinn.
- smtpd_recipient_restrictions = reject_unknown_recipient_domain,
reject_unauth_destination,
Die Regel ist auch sehr problematisch. Ein interner Client schickt eine email an eine unauth_destination und bekommt ein reject. Der Mailversand an RCPT TO: wird dadurch extrem stark eingeschränkt.
eingefügt von: --Yehudi 05:47, 23. Aug 2006 (CEST)