Mailserver mit Postfix, Fetchmail, Dovecot

Aus Linupedia.org
Wechseln zu: Navigation, Suche

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

  1. 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,
  1. 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)


Zurück zu Mail