Postfix und Cyrus Imapd: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 3: | Zeile 3: | ||
Für den Mailserver kommt die gängige Kombination Postfix + Cyrus Imapd zum Einsatz. Postfix ist der sog. MTA (Mail Transport Agent), der sich um die Annahme und den Versand von Mails kümmert. Cyrus Imapd ist, wie der Name schon sagt, ein IAMP Server. Er beherrscht aber auch das weit verbreitete PO3 - Protokoll. | Für den Mailserver kommt die gängige Kombination Postfix + Cyrus Imapd zum Einsatz. Postfix ist der sog. MTA (Mail Transport Agent), der sich um die Annahme und den Versand von Mails kümmert. Cyrus Imapd ist, wie der Name schon sagt, ein IAMP Server. Er beherrscht aber auch das weit verbreitete PO3 - Protokoll. | ||
Postfix reicht die erhaltenen Mails an Cyrus weiter, der sie schließlich an die MUA's(Mail User Agents wie Outlook, Thunderbird, Kmail, ...) ausliefert. | |||
Postfix kann mails direkt aus dem Internet annehmen, wenn eine Dynamic DNS-Adresse zur verfügung steht, und der Port 25 im Router an die NSLU weitergeleitet wird. | |||
Alternativ können mails mittels Fetchmail von einem Provider wie z.B. GMX abgerufen werden. Tetchmail übergibt die Mails an Postfix zur weiteren Verarbeitung. | |||
Zur Spamabwehr kann Spamassassin zwischen die Kette Postfix und Cyrus eingeschleust werden. Dieser kann die evtl. Spammails als solche kennzeichnen, die schließlich ein Mailfilter wie Sieve (Teil von Cyrus) in spezielle Unterverzeichnisse einordnen kann. | |||
== Vorbereitungen == | |||
Im ersten Schritt werden einige nötige Pakete installiert, die für die folgende Mailserver installation nötig sind. | |||
ipkg update | |||
ipkg install perl libdb coreutils cyrus-sasl readline | |||
ipkg | |||
ipkg | |||
SASL- | SASL-konformes Passwort für den bereits beim Unsling-Vorgang angelegten User mail: | ||
/opt/sbin/saslpasswd2 mail | |||
Dem Linux-User "mail" das selbe Passwort vergeben, damit bei laufendem Imap-Server der Zugriff auf die Cyrus-Admin-Konsole klappt: | |||
passwd mail | |||
Bei der Abfrage nach dem Passwort das selbe Passwort (2x) eingeben wie beim Befehl saslpasswd2 | |||
Anpassen der Zugriffsrechte für die Datei SASL2 | |||
chmod 644 /opt/etc/sasl2 | |||
Gruppe maildrop anlegen: | |||
vi /etc/group | |||
Folgenden Eintrag ergänzen: | |||
maildrop:x:69:maildrop | |||
Mailuser (mindestens einen, z.B. Tux) in der Weboberfläche anlegen. | |||
== Installation von Postfix und Imapd == | |||
Zum Installieren der nötigen Pakete folgenden Befehl eingeben: | |||
ipkg install cyrus-imapd postfix | |||
Hinweis: Der Download und die Installation der Pakete nimmt einige Zeit in Anspruch. | |||
== Konfiguration Postfix == | |||
Zunächst wird Postfix eingerichtet. Die komplette Konfiguration von Postfix erfolgt mittels main.cf und master.cf, die im Order /opt/etc/postfix abgelegt sind. | |||
=== Generelle Einstellungen === | |||
vi /opt/etc/postfix/main.cf | |||
'''Folgende Einstellungen vornehmen:''' | |||
'''Folgende | |||
'''Hinweise:''' | '''Hinweise:''' | ||
* Zum Teil müssen die Einträge auskommentiert werden (Entfernen des # - Zeichens). | |||
* Die verwendete '''Domain''' ist: schiele.homelinux.org | |||
* der '''Hostname''' der NSLU ist nslu | |||
* mynetworks_style = subnet: Freigabe eines kompletten IP-Subnetzes | |||
* '''mynetworks''': die ersten 3 Stellen der IP-Adresse der NSLU verwenden. Die Letzte Stelle auf 0 setzten und um /24 ergänzen. Diese Angabe entspricht einem kompletten Subnet. Falls die IP-Adresse der NSLU 192.168.1.77 => '''mynetworks = 192.168.1.0/24'''. D.h. alle PC's im Bereich 192.168.1.1 bis 192.168.1.255 haben Zugriff auf die NSLU. | |||
myhostname = nslu.schiele.homelinux.org | |||
mydomain = schiele.homelinux.org | |||
myorigin = $mydomain | |||
inet_interfaces = all | |||
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain | |||
mynetworks_style = subnet | |||
mynetworks = 192.168.1.0/24 | |||
myhostname = nslu | |||
mydomain = schiele | |||
homelinux.org | |||
myorigin = $ | |||
inet_interfaces = | |||
mydestination = $ | |||
mynetworks_style = | |||
subnet | |||
mynetworks = 192. | |||
'''Generierung | '''Generierung eines Alias-Files:''' | ||
Aliase sind Namen bzw. Mailadressen, unter denen ein bekannter eingerichteter User ebenfalls erreichbar ist. D.H. Mails ein die Alias-Adresse landen im Posteingang des Nutzers, auf den der Alias verweist. | |||
So ist es z.B. empfehlenswert für den User root einen Alias auf einen normalen Benutzer anzulegen. | |||
Aliase sind Namen | |||
So ist es z.B. | |||
vi /opt/etc/aliases | |||
Aufbau des Files: | Aufbau des Files: | ||
Aliasname:tatsächlicher Nutzer | |||
#root: you | #root: you | ||
root: | root: tux | ||
Aliasname root und Nutzer Tux evtl anpassen. Es können beliebig viele Aliase eingetragen werden. | |||
Nachdem das File geändert wurde '''MUSS''' folgender Befehl ausgeführt werden, um das Alias-File in eine für Postfix kompatible Datenbank zu verwandeln: | |||
Nachdem das File | |||
/opt/bin/newaliases | /opt/bin/newaliases | ||
== | ===Spamabwehr=== | ||
Spamabwehr=== | Viele Spam-Mails können bereits vor der Annahme der Mail durch Postfix aussortiert werden. Spammer verwenden oft Host- und Domainnamen, die nicht einem FQDN (Fully Qualified Domain Name) entsprechen. Postfix kann relativ einfach angewiesen werden, solche mails erst gar nicht anzunehmen. Hier wird nicht beschrieben, wie Spammails aufgrund ihres Inhalts gefiltert werden können. Dies ist Teil der [[Spamassassin|→ Spamassassin-Anleitung]]. | ||
Viele | |||
Mail können mit den Parametern: | |||
Mail können mit den | |||
#smtpd_client_restrictions | #smtpd_client_restrictions | ||
# | #smtpd_helo_restrictions | ||
#smtpd_sender_restrictions | |||
# | #smtpd_recipient_restrictions | ||
# | |||
#smtpd_data_restrictions | #smtpd_data_restrictions | ||
gefiltert werden. | |||
''' | #'''smtpd_client_restrictions''' | ||
#;reject_unknown_client | #;reject_unknown_client | ||
#: | #:Verwirft die Anfrage, wenn der Hostname des SMTP-Clients unbekannt ist (die IP-Adresse oder der Hostname des TCP/IP-Clients). | ||
#;reject_rbl_client domain.tld | |||
der Hostname des SMTP-Clients unbekannt ist (die IP-Adresse oder der Hostname des TCP/IP-Clients). | #:Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat. | ||
#;reject_rbl_client domain. | #;reject_rhsbl_client domain.tld | ||
#:Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat. | |||
#:Verwirft die Anfrage, wenn | |||
der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat. | |||
#;reject_rhsbl_client domain | |||
tld | |||
#:Verwirft die Anfrage, wenn | |||
der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat. | |||
#;warn_if_reject | #;warn_if_reject | ||
#:Schreibt | #:Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen. | ||
#;check_client_access maptype:mapname | |||
#:Löst die Client-Namen, Client-Adressen und Parent-Domains auf anhand der in maptype:mapname angegebenen Map. | |||
#;check_client_access | |||
:mapname | |||
#:Löst die Client-Namen, | |||
#;permit_mynetworks | #;permit_mynetworks | ||
#:Gewährt | #:Gewährt Zugriff, wenn der Client in $mynetworks zu finden ist. | ||
Zugriff, wenn der | |||
#'''smtpd_helo_restrictions''' | #'''smtpd_helo_restrictions''' | ||
#;reject_invalid_hostname | #;reject_invalid_hostname | ||
#: | #:Verwirft den im HELO/EHLO angegebenen Hostnamen, falls dieser eine falsche Syntax hat. Wenn man in einem Netzwerk ist und man will, dass die Maschinen, die auch im Netzwerk sind, Emails über unseren MTA verschicken wollen, dann ist es sinnvoll, diese Beschränkung erst nach permit_mynetworks anzugeben (wie ich schon gesagt habe, die Reihenfolge ist sehr wichtig), sonst wird er vom MTA verworfen oder zurückgewiesen. | ||
#;reject_unknown_hostname | #;reject_unknown_hostname | ||
#: | #:Verwirft den im HELO/EHLO angegebenen Hostnamen, welcher keinen DNS Rekord vom Typ A oder MX hat. Hier ist es auch sinnvoll permit_mynetworks zuerst anzugeben, wenn man ein Relay-MTA für das innere Netzwerk ist. | ||
#;reject_non_fqdn_hostname | #;reject_non_fqdn_hostname | ||
#: | #:Verwirft den im HELO/EHLO angegebenen Hostnamen, wenn dieser nicht in FQDN-Form ist. Was bedeutet FQDN? Full Qualified Domain Name. Dafür ein Beispiel: www.chains.ch ist ein FQDN. | ||
#;warn_if_reject | #;warn_if_reject | ||
#:Schreibt ein | #:Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen. | ||
stellt die Nachricht zu, anstatt die Nachricht zu verwerfen. | |||
#;check_helo_access | #;check_helo_access | ||
#:Löst den im | #:Löst den im HELO/EHLO angegebenen Hostnamen oder die Parent-Domain auf. | ||
Hostnamen oder die Parent-Domain auf. | |||
#;permit_mynetworks | #;permit_mynetworks | ||
#:Gewährt | #:Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist. | ||
, wenn der Client | |||
#'''smtpd_sender_restrictions''' | #'''smtpd_sender_restrictions''' | ||
#; | #;reject_unknown_sender_domain | ||
#:Verwirft die Sender-Domain, wenn diese keinen DNS-Record vom Typ A oder MX hat. | |||
#: | |||
#;reject_non_fqdn_sender | #;reject_non_fqdn_sender | ||
#:Verwirft | #:Verwirft die Sender-Domain, wenn diese nicht in FQDN-Form ist. | ||
#;reject_rhsbl_sender domain.tld | #;reject_rhsbl_sender domain.tld | ||
#: | #:Verwirft die Anfrage, wenn der Sender einen DNS-Record vom Typ A unter domain.tld hat. | ||
#;reject_sender_login_mismatch | #;reject_sender_login_mismatch | ||
#: | #:Verwirft, wenn $smtpd_sender_login_maps für eine MAIL FROM- Adresse einen Besitzer spezifiziert, aber der sich nicht mit SASL authentifiziert hat; verwirft, wenn der Sender sich authentifiziert hat, aber die MAIL FROM-Adresse nicht mit dem Sender übereinstimmt. | ||
#;warn_if_reject | #;warn_if_reject | ||
#:Schreibt ein WARN | #:Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen. | ||
#;check_sender_access maptype:mapname | #;check_sender_access maptype:mapname | ||
# | #;Löst die Sender-Adresse, Parent-Domain oder localpart@ auf. | ||
Löst die Sender-Adresse, Parent- | |||
#;check_sender_mx_access maptype:mapname | #;check_sender_mx_access maptype:mapname | ||
#:Löst den DNS-Record vom Typ MX des | #:Löst den DNS-Record vom Typ MX des Senders auf. | ||
#;permit_mynetworks | #;permit_mynetworks | ||
#:Gewährt Zugriff, | #:Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist. | ||
Liste von $mynetworks ist. | |||
#'''smtpd_recipient_restrictions''' | #'''smtpd_recipient_restrictions''' | ||
#; | #;reject_unknown_recipient_domain | ||
#:Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers keinen DNS-Record vom Typ A oder MX hat. | |||
#: | |||
#;reject_non_fqdn_recipient | #;reject_non_fqdn_recipient | ||
#:Verwirft die | #:Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers nicht in FQDN-Form ist. | ||
Domain des Empfängers nicht in FQDN-Form ist. | |||
#;reject_rhsbl_recipient domain.tld | #;reject_rhsbl_recipient domain.tld | ||
#: | #:Verwirft die Anfrage, wenn der Empfänger einen DNS-Record vom Typ A unter domain.tld hat. | ||
#;reject_unauth_pipelining | #;reject_unauth_pipelining | ||
#:Verwirft die | #:Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht. | ||
#;reject_unauth_destination | #;reject_unauth_destination | ||
#:Verwirft das | #:Verwirft das Absenden von Emails: | ||
#;* zu Zielmaschinen, die nicht unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind. | |||
#;* zu | #;* zu Zielmaschinen, die nicht unter $relay_domains oder in deren Subdomains zu finden sind (ausser Sender-spezifisches Routing). | ||
#;* zu Zielmaschinen, die nicht unter $ | |||
#;warn_if_reject | #;warn_if_reject | ||
#:Schreibt ein WARN ins | #:Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen. | ||
#;check_recipient_access maptype:mapname | #;check_recipient_access maptype:mapname | ||
#: | #:Löst die Empfänger-Adresse, Parent-Domain oder localpart@ auf. | ||
#;check_recipient_mx_access maptype:mapname | #;check_recipient_mx_access maptype:mapname | ||
#: | #:Löst den DNS-Record vom Typ MX des Empfängers auf. | ||
auf. | |||
#;permit_auth_destination | #;permit_auth_destination | ||
#:Erlaubt das Absenden | #:Erlaubt das Absenden von Emails: | ||
#:* zu Zielmaschinen, die unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind. | |||
#:* zu | #:* zu Zielmaschinen, die unter $relay_domains oder in deren Subdomains zu finden sind (außer Sender-spezifisches Routing). | ||
$mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind. | |||
#:* zu Zielmaschinen, die unter $relay_domains | |||
#;permit_mx_backup | #;permit_mx_backup | ||
#:Erlaubt das Empfangen von | #:Erlaubt das Empfangen von Emails für Seiten, die mich als MX Host auflisten. | ||
mich als MX Host auflisten. | |||
#;permit_mynetworks | #;permit_mynetworks | ||
#:Gewährt Zugriff, wenn der | #:Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist. | ||
$mynetworks ist. | |||
#'''smtpd_data_restrictions''' | #'''smtpd_data_restrictions''' | ||
#; | #;reject_unauth_pipelining | ||
#:Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht. | |||
#:Verwirft die Anfrage, | |||
'''Anpassen der Konfigurationsdatei main.cf:''' | '''Anpassen der Konfigurationsdatei main.cf:''' | ||
vi | vi /opt/etc/postfix/main.cf | ||
Gute Erfahrungen wurden mit folgenden Einstellungen gesammelt (Diese evtl am Ende von main.cf anhängen): | |||
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client | |||
Gute Erfahrungen | smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender | ||
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient | |||
smtpd_client_restrictions = permit_mynetworks, | |||
smtpd_sender_restrictions = permit_mynetworks, | |||
smtpd_recipient_restrictions = permit_mynetworks, | |||
=== Einstellungen Relay-Server === | === Einstellungen Relay-Server === | ||
Falls die NSLU | Falls die NSLU mails an externe Mailadressen verschicken soll, dann ist es ratsam, den SMTP-Server eines Providers als sog. Ralay zu verwenden. Postfix ist zwar selber in der Lage mails direkt an andere Mailserver zu verschicken, diese landen dann aber sehr häufig im Spamfilter. Spammer verwenden meist diese Möglichkeit, um "unerkannt" Massenmails zu verschicken. Daher geraten leider alle Mailserver mit variabler IP-Adresse unter Generalverdacht Spammer zu sein. Wenn stattdessen ein Mail-Relay verwendet wird, verbindet sich Postfix mit dem SMTP-Server des Providers, meldet sich dort mit Username und Passwort an und übergit diesem die Mail. Postfix verhält sich also analog wie ein Mailprogramm, bei dem der SMTP-Server des Providers eingetragen ist. | ||
Um einen Relay-Server zu verwenden, müssen noch folgende Angaben in der main.cf gemacht werden (ansonsten kann dieses Kapitel'chen komplett übersprungen werden): | |||
vi /opt/etc/postfix/main.cf | vi /opt/etc/postfix/main.cf | ||
'''Hinweis:''' Relayserver in | '''Hinweis:''' Relayserver in [] einschließen | ||
[] einschließen | relayhost = [SMTP des Providers] z.B. [smtp.test.de] | ||
relayhost = | smtp_sasl_auth_enable = yes | ||
smtp_sasl_security_options = noanonymous | |||
SMTP des Providers] z.B. [smtp | smtp_sasl_password_maps = hash:/opt/etc/postfix/sasl_passwd | ||
smtp_always_send_ehlo = yes | smtp_always_send_ehlo = yes | ||
Erstellen des Files /opt/etc/ | Erstellen des Files /opt/etc/postfix/sasl_passwd, das User und Passwort für den Relayserver enthält: | ||
vi /opt/etc/postfix/sasl_passwd | vi /opt/etc/postfix/sasl_passwd | ||
Zeile mit folgendem Aufbau | Zeile mit folgendem Aufbau einfügen: | ||
'''ACTUNG:''' Relay- | '''ACTUNG:''' Relay-Server nicht in [] setzen im Gegensatz zum Eintrag in der main.cf (siehe oben) | ||
Relay-Server Benutzername:Passwort | |||
z.B. | z.B. | ||
smtp.test.de | smtp.test.de mustermann@test.de:mustermann_Passwort | ||
Passwortfile vor neugierigen Blicken schützen: | |||
chmod 600 /opt/etc/postfix/sasl_passwd | |||
chmod 600 /opt | |||
Folgenden Befehl eingeben, um das Passwortfile in ein Datenbankformat (sasl_passwd.db)zu konvertieren: | |||
Folgenden Befehl | |||
postmap hash:/opt/etc/postfix/sasl_passwd | postmap hash:/opt/etc/postfix/sasl_passwd | ||
== Konfiguration | == Konfiguration Cyrus Imapd== | ||
'''Konfiguartion:''' | '''Konfiguartion:''' | ||
vi /opt | vi /opt/etc/imap.conf | ||
Folgende Einstellungen vornehmen, damit nur Klartext-Passwörter akzeptiert werden: | |||
Folgende | |||
sasl_pwcheck_method: saslauthd | sasl_pwcheck_method: saslauthd | ||
sasl_mech_list: PLAIN LOGIN | sasl_mech_list: PLAIN LOGIN | ||
''' | '''Cyrus Imap Server starten:''' | ||
/opt/etc/init.d/S59cyrus-imapd restart | |||
/ | |||
'''Anlegen der IMAP-User Mailboxen:''' | |||
/opt/bin/cyradm --user mail localhost | |||
Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). | |||
Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche. | |||
Passwort des Users mail | |||
Nach erfolgreichem Login befindet man sich in der Cyrus | |||
Folgende cm Befehle (create Mailbox) eingeben (Tux durch realen | Folgende cm Befehle (create Mailbox) eingeben (Tux durch realen Mailuser, wie unter Vorbereitungen angelegt, ersetzen) | ||
cm user.tux | cm user.tux | ||
cm user.tux.Drafts | cm user.tux.Drafts | ||
cm user.tux.Outbox | cm user.tux.Outbox | ||
cm user.tux. | cm user.tux.Sent | ||
cm user.tux.Trash | |||
cm user | |||
tux.Trash | |||
cm- | cm-Befehle für alle anzulegenden Benutzermailboxen widerholen. | ||
Mit dem Befehl lm können alle definierten Mailboxen angezeigt werden. | |||
dem Befehl lm können alle definierten Mailboxen angezeigt | |||
. | |||
lm | lm | ||
Die Adminoberfläche mit folgenden Befehlen verlassen: | Die Adminoberfläche mit folgenden Befehlen verlassen: | ||
Zeile 474: | Zeile 243: | ||
'' | '''Löschen von IMAP-User Mailboxen:''' | ||
Nur der Vollständigkeit halber soll hier auch das Löschen von Mailboxen bzw. Unterordnern erläutert werden. Dies ist leider nicht ganz so einfach wie das Anlegen von Usern und Unterverzeichnissen. | |||
/opt/bin/cyradm --user mail localhost | /opt/bin/cyradm --user mail localhost | ||
Passwort des Users mail eingeben | Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). | ||
wie im Kapitel Vorbereitungen | |||
. | |||
Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche. | Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche. | ||
Zunächst muss dem User 'mail' das Recht eingeräumt werden, die zu | Zunächst muss dem User 'mail' das Recht eingeräumt werden, die zu löschende Mailboxen bzw. Unterverzeichnis zu löschen. Dies ist aus Sicherheitsgründen standardmäßig deaktiviert. Hier soll exemplarisch das Löschen einer Usermailbox "Mailbox" und eines Unterordners "Test" in der Mailbox "Mailbox2" demonstriert werden. (Achtung: auf Groß/Kleinschreibung achten). | ||
sam user.Mailbox mail all | sam user.Mailbox mail all | ||
Damit bekommt der User "mail" sämtliche Rechte (incl. | Damit bekommt der User "mail" sämtliche Rechte (incl. löschen) an der Mailbox "Mailbox" zugewiesen. Der folgende Befehl löscht die Usermailbox schließlich: | ||
dm user.Mailbox | dm user.Mailbox | ||
Nun das Löschen des Unterordners "Mailbox2/Test" | Nun das Löschen des Unterordners "Mailbox2/Test" | ||
sam user.Mailbox2. | sam user.Mailbox2.Test mail all | ||
dm user.Mailbox2.Test | |||
dm | Die Adminoberfläche mit folgenden Befehlen verlassen: | ||
Die Adminoberfläche mit | |||
quit | quit | ||
== | == Test von Postfix und Cyrus Imapd == | ||
Hinweis: | Hinweis: | ||
Es ist ratsam für die folgenden | Es ist ratsam für die folgenden Tests ein weiteres Putty-Fenster mit Verbindung zur NSLU zu öffnen und permanent die Logging-Ausgaben zu beobachten, um im Falle eines Fehlers entsprechende Fehler einzukreisen: | ||
tail -f /var/log/messages | tail -f /var/log/messages | ||
Postfix neu starten, um sämtliche durchgeführte Änderungen | Postfix neu starten, um sämtliche durchgeführte Änderungen bekannt zu geben: | ||
/opt/etc/init.d/S69postfix stop | |||
/opt/etc/ | |||
d/S69postfix stop | |||
/opt/etc/init.d/S69postfix start | /opt/etc/init.d/S69postfix start | ||
Zunächst wird mittels | Zunächst wird mittels Telnet geprüft, ob Postfix in der Lage ist, mails intern zu versenden. Anschließend wird Cyrus mit einem Mailprogramm überprüft. | ||
Am PC eine Telnet-Verbindung zum Mailserver aufbauen | Am PC eine Telnet-Verbindung zum Mailserver aufbauen | ||
telnet IP_der_NSLU 25 | telnet IP_der_NSLU 25 | ||
oder alternativ mit | oder alternativ mit Putty: | ||
Protokoll=Telnet | Protokoll=Telnet | ||
Port=25 | Port=25 | ||
Zeile 550: | Zeile 283: | ||
'''Hinweis:''' | '''Hinweis:''' | ||
* Im | * Im folgenden Abschnitt sind sowohl Ausgaben von Postfix, als auch notwendige Eingaben im Telnet hintereinander dargestellt. Eingaben sind mit einem ">" zu Beginn versehen. | ||
* mydomain durch die Domäne wie in der main.cf definiert ersetzen. | * mydomain durch die Domäne wie in der main.cf definiert ersetzen. | ||
* tux durch tatsächlich | * tux durch tatsächlich angelegten Benutzer ersetzen | ||
220 nslu.mydomain ESMTP Postfix | 220 nslu.mydomain ESMTP Postfix | ||
>ehlo | >ehlo mydomain | ||
250-nslu.mydomain | 250-nslu.mydomain | ||
250-PIPELINING | 250-PIPELINING | ||
250-SIZE | 250-SIZE 10240000 | ||
250-VRFY | 250-VRFY | ||
250-ETRN | 250-ETRN | ||
250- | 250-8BITMIME | ||
250 DSN | 250 DSN | ||
> | >mail from: root@mydomain | ||
250 Ok | 250 Ok | ||
> | >rcpt to: tux@mydomain | ||
250 Ok | 250 Ok | ||
>data | |||
data | 354 End data with <CR><LF>.<CR><LF> | ||
354 | |||
End data with | |||
<CR><LF> | |||
<CR><LF> | |||
>SUBJECT: Test 1 | >SUBJECT: Test 1 | ||
> | >Testmail | ||
>. | >. | ||
> | > | ||
250 Ok: | 250 Ok: queued as 6DA50EAAC | ||
>quit | >quit | ||
221 Bye | 221 Bye | ||
Connection to host lost. | |||
Email-Programm starten und ein neues Konto anlegen. | |||
Einstellungen: | |||
), Mailserver sammelt mails | *Faill 1: Kein Relay-Betrieb ([[Postfix und Cyrus Imapd#Einstellungen Relay-Server|→ siehe oben]]), Mailserver sammelt mails per fetchmail ([[Postfix und Cyrus Imapd#Optional Fetchmail|→ siehe Kapitel Fetchmail]]) ein und verwaltet diese | ||
email-adresse: user@provider (z.B. test@gmx.de) | |||
Protokoll: Imap | Protokoll: Imap | ||
Posteingangsserver: IP_der_NSLU | |||
Postausgangsserver: SMTP-Server des Providers | |||
Benutzername (Posteingang): Tux | |||
Benutzername (Postausgang): Benutzername des Providers | |||
* Fall 2: "vollwertiger" Mailserver, der Mails direkt in Empfang nimmt und mittels Relay absendet: | |||
email-adresse: tux@domain | |||
Benutzername ( | |||
* Fall 2: " | |||
Protokoll: Imap | Protokoll: Imap | ||
Posteingangsserver: IP_der_NSLU | Posteingangsserver: IP_der_NSLU | ||
Postausgangsserver: | Postausgangsserver: IP_der_NSLU | ||
Benutzername (Posteingang): Tux | |||
Benutzername ( | Benutzername (Postausgang): Tux | ||
Nach Eingabe des Passwortes darf keine Fehlermeldung erscheinen. | |||
Wenn alles geklappt hat, sollte sich im Posteingang die Mail aus obigem Postfix Test befinden. | |||
==Erweiterungen der Funktionalität des Mailservers:== | |||
== | |||
* Mails abholen mittels [[Fetchmail]] | * Mails abholen mittels [[Fetchmail]] | ||
* | * Spamabwehr mit [[Spamassassin]] | ||
* Zugriff aus dem Web per Webmailer [[Roundcube]] | |||
* Direkter SSL-geschützter IMAP-Zugriff aus dem Internet [[Cyrus SSL]] | |||
* Zugriff aus dem Web per | |||
* | |||
Aktuelle Version vom 7. März 2009, 15:40 Uhr
Mailserver
Für den Mailserver kommt die gängige Kombination Postfix + Cyrus Imapd zum Einsatz. Postfix ist der sog. MTA (Mail Transport Agent), der sich um die Annahme und den Versand von Mails kümmert. Cyrus Imapd ist, wie der Name schon sagt, ein IAMP Server. Er beherrscht aber auch das weit verbreitete PO3 - Protokoll.
Postfix reicht die erhaltenen Mails an Cyrus weiter, der sie schließlich an die MUA's(Mail User Agents wie Outlook, Thunderbird, Kmail, ...) ausliefert.
Postfix kann mails direkt aus dem Internet annehmen, wenn eine Dynamic DNS-Adresse zur verfügung steht, und der Port 25 im Router an die NSLU weitergeleitet wird.
Alternativ können mails mittels Fetchmail von einem Provider wie z.B. GMX abgerufen werden. Tetchmail übergibt die Mails an Postfix zur weiteren Verarbeitung.
Zur Spamabwehr kann Spamassassin zwischen die Kette Postfix und Cyrus eingeschleust werden. Dieser kann die evtl. Spammails als solche kennzeichnen, die schließlich ein Mailfilter wie Sieve (Teil von Cyrus) in spezielle Unterverzeichnisse einordnen kann.
Vorbereitungen
Im ersten Schritt werden einige nötige Pakete installiert, die für die folgende Mailserver installation nötig sind.
ipkg update ipkg install perl libdb coreutils cyrus-sasl readline
SASL-konformes Passwort für den bereits beim Unsling-Vorgang angelegten User mail:
/opt/sbin/saslpasswd2 mail
Dem Linux-User "mail" das selbe Passwort vergeben, damit bei laufendem Imap-Server der Zugriff auf die Cyrus-Admin-Konsole klappt:
passwd mail
Bei der Abfrage nach dem Passwort das selbe Passwort (2x) eingeben wie beim Befehl saslpasswd2
Anpassen der Zugriffsrechte für die Datei SASL2
chmod 644 /opt/etc/sasl2
Gruppe maildrop anlegen:
vi /etc/group
Folgenden Eintrag ergänzen:
maildrop:x:69:maildrop
Mailuser (mindestens einen, z.B. Tux) in der Weboberfläche anlegen.
Installation von Postfix und Imapd
Zum Installieren der nötigen Pakete folgenden Befehl eingeben:
ipkg install cyrus-imapd postfix
Hinweis: Der Download und die Installation der Pakete nimmt einige Zeit in Anspruch.
Konfiguration Postfix
Zunächst wird Postfix eingerichtet. Die komplette Konfiguration von Postfix erfolgt mittels main.cf und master.cf, die im Order /opt/etc/postfix abgelegt sind.
Generelle Einstellungen
vi /opt/etc/postfix/main.cf
Folgende Einstellungen vornehmen:
Hinweise:
- Zum Teil müssen die Einträge auskommentiert werden (Entfernen des # - Zeichens).
- Die verwendete Domain ist: schiele.homelinux.org
- der Hostname der NSLU ist nslu
- mynetworks_style = subnet: Freigabe eines kompletten IP-Subnetzes
- mynetworks: die ersten 3 Stellen der IP-Adresse der NSLU verwenden. Die Letzte Stelle auf 0 setzten und um /24 ergänzen. Diese Angabe entspricht einem kompletten Subnet. Falls die IP-Adresse der NSLU 192.168.1.77 => mynetworks = 192.168.1.0/24. D.h. alle PC's im Bereich 192.168.1.1 bis 192.168.1.255 haben Zugriff auf die NSLU.
myhostname = nslu.schiele.homelinux.org mydomain = schiele.homelinux.org myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks_style = subnet mynetworks = 192.168.1.0/24
Generierung eines Alias-Files:
Aliase sind Namen bzw. Mailadressen, unter denen ein bekannter eingerichteter User ebenfalls erreichbar ist. D.H. Mails ein die Alias-Adresse landen im Posteingang des Nutzers, auf den der Alias verweist. So ist es z.B. empfehlenswert für den User root einen Alias auf einen normalen Benutzer anzulegen.
vi /opt/etc/aliases
Aufbau des Files: Aliasname:tatsächlicher Nutzer
#root: you root: tux
Aliasname root und Nutzer Tux evtl anpassen. Es können beliebig viele Aliase eingetragen werden.
Nachdem das File geändert wurde MUSS folgender Befehl ausgeführt werden, um das Alias-File in eine für Postfix kompatible Datenbank zu verwandeln:
/opt/bin/newaliases
Spamabwehr
Viele Spam-Mails können bereits vor der Annahme der Mail durch Postfix aussortiert werden. Spammer verwenden oft Host- und Domainnamen, die nicht einem FQDN (Fully Qualified Domain Name) entsprechen. Postfix kann relativ einfach angewiesen werden, solche mails erst gar nicht anzunehmen. Hier wird nicht beschrieben, wie Spammails aufgrund ihres Inhalts gefiltert werden können. Dies ist Teil der → Spamassassin-Anleitung.
Mail können mit den Parametern:
- smtpd_client_restrictions
- smtpd_helo_restrictions
- smtpd_sender_restrictions
- smtpd_recipient_restrictions
- smtpd_data_restrictions
gefiltert werden.
- smtpd_client_restrictions
- reject_unknown_client
- Verwirft die Anfrage, wenn der Hostname des SMTP-Clients unbekannt ist (die IP-Adresse oder der Hostname des TCP/IP-Clients).
- reject_rbl_client domain.tld
- Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat.
- reject_rhsbl_client domain.tld
- Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat.
- warn_if_reject
- Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
- check_client_access maptype
- mapname
- Löst die Client-Namen, Client-Adressen und Parent-Domains auf anhand der in maptype:mapname angegebenen Map.
- permit_mynetworks
- Gewährt Zugriff, wenn der Client in $mynetworks zu finden ist.
- smtpd_helo_restrictions
- reject_invalid_hostname
- Verwirft den im HELO/EHLO angegebenen Hostnamen, falls dieser eine falsche Syntax hat. Wenn man in einem Netzwerk ist und man will, dass die Maschinen, die auch im Netzwerk sind, Emails über unseren MTA verschicken wollen, dann ist es sinnvoll, diese Beschränkung erst nach permit_mynetworks anzugeben (wie ich schon gesagt habe, die Reihenfolge ist sehr wichtig), sonst wird er vom MTA verworfen oder zurückgewiesen.
- reject_unknown_hostname
- Verwirft den im HELO/EHLO angegebenen Hostnamen, welcher keinen DNS Rekord vom Typ A oder MX hat. Hier ist es auch sinnvoll permit_mynetworks zuerst anzugeben, wenn man ein Relay-MTA für das innere Netzwerk ist.
- reject_non_fqdn_hostname
- Verwirft den im HELO/EHLO angegebenen Hostnamen, wenn dieser nicht in FQDN-Form ist. Was bedeutet FQDN? Full Qualified Domain Name. Dafür ein Beispiel: www.chains.ch ist ein FQDN.
- warn_if_reject
- Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
- check_helo_access
- Löst den im HELO/EHLO angegebenen Hostnamen oder die Parent-Domain auf.
- permit_mynetworks
- Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
- smtpd_sender_restrictions
- reject_unknown_sender_domain
- Verwirft die Sender-Domain, wenn diese keinen DNS-Record vom Typ A oder MX hat.
- reject_non_fqdn_sender
- Verwirft die Sender-Domain, wenn diese nicht in FQDN-Form ist.
- reject_rhsbl_sender domain.tld
- Verwirft die Anfrage, wenn der Sender einen DNS-Record vom Typ A unter domain.tld hat.
- reject_sender_login_mismatch
- Verwirft, wenn $smtpd_sender_login_maps für eine MAIL FROM- Adresse einen Besitzer spezifiziert, aber der sich nicht mit SASL authentifiziert hat; verwirft, wenn der Sender sich authentifiziert hat, aber die MAIL FROM-Adresse nicht mit dem Sender übereinstimmt.
- warn_if_reject
- Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
- check_sender_access maptype
- mapname
- Löst die Sender-Adresse, Parent-Domain oder localpart@ auf.
- check_sender_mx_access maptype
- mapname
- Löst den DNS-Record vom Typ MX des Senders auf.
- permit_mynetworks
- Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
- smtpd_recipient_restrictions
- reject_unknown_recipient_domain
- Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers keinen DNS-Record vom Typ A oder MX hat.
- reject_non_fqdn_recipient
- Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers nicht in FQDN-Form ist.
- reject_rhsbl_recipient domain.tld
- Verwirft die Anfrage, wenn der Empfänger einen DNS-Record vom Typ A unter domain.tld hat.
- reject_unauth_pipelining
- Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht.
- reject_unauth_destination
- Verwirft das Absenden von Emails:
- zu Zielmaschinen, die nicht unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind.
- zu Zielmaschinen, die nicht unter $relay_domains oder in deren Subdomains zu finden sind (ausser Sender-spezifisches Routing).
- warn_if_reject
- Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
- check_recipient_access maptype
- mapname
- Löst die Empfänger-Adresse, Parent-Domain oder localpart@ auf.
- check_recipient_mx_access maptype
- mapname
- Löst den DNS-Record vom Typ MX des Empfängers auf.
- permit_auth_destination
- Erlaubt das Absenden von Emails:
- zu Zielmaschinen, die unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind.
- zu Zielmaschinen, die unter $relay_domains oder in deren Subdomains zu finden sind (außer Sender-spezifisches Routing).
- permit_mx_backup
- Erlaubt das Empfangen von Emails für Seiten, die mich als MX Host auflisten.
- permit_mynetworks
- Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
- smtpd_data_restrictions
- reject_unauth_pipelining
- Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht.
Anpassen der Konfigurationsdatei main.cf:
vi /opt/etc/postfix/main.cf
Gute Erfahrungen wurden mit folgenden Einstellungen gesammelt (Diese evtl am Ende von main.cf anhängen):
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient
Einstellungen Relay-Server
Falls die NSLU mails an externe Mailadressen verschicken soll, dann ist es ratsam, den SMTP-Server eines Providers als sog. Ralay zu verwenden. Postfix ist zwar selber in der Lage mails direkt an andere Mailserver zu verschicken, diese landen dann aber sehr häufig im Spamfilter. Spammer verwenden meist diese Möglichkeit, um "unerkannt" Massenmails zu verschicken. Daher geraten leider alle Mailserver mit variabler IP-Adresse unter Generalverdacht Spammer zu sein. Wenn stattdessen ein Mail-Relay verwendet wird, verbindet sich Postfix mit dem SMTP-Server des Providers, meldet sich dort mit Username und Passwort an und übergit diesem die Mail. Postfix verhält sich also analog wie ein Mailprogramm, bei dem der SMTP-Server des Providers eingetragen ist.
Um einen Relay-Server zu verwenden, müssen noch folgende Angaben in der main.cf gemacht werden (ansonsten kann dieses Kapitel'chen komplett übersprungen werden):
vi /opt/etc/postfix/main.cf
Hinweis: Relayserver in [] einschließen
relayhost = [SMTP des Providers] z.B. [smtp.test.de] smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/opt/etc/postfix/sasl_passwd smtp_always_send_ehlo = yes
Erstellen des Files /opt/etc/postfix/sasl_passwd, das User und Passwort für den Relayserver enthält:
vi /opt/etc/postfix/sasl_passwd
Zeile mit folgendem Aufbau einfügen:
ACTUNG: Relay-Server nicht in [] setzen im Gegensatz zum Eintrag in der main.cf (siehe oben)
Relay-Server Benutzername:Passwort z.B. smtp.test.de mustermann@test.de:mustermann_Passwort
Passwortfile vor neugierigen Blicken schützen:
chmod 600 /opt/etc/postfix/sasl_passwd
Folgenden Befehl eingeben, um das Passwortfile in ein Datenbankformat (sasl_passwd.db)zu konvertieren:
postmap hash:/opt/etc/postfix/sasl_passwd
Konfiguration Cyrus Imapd
Konfiguartion:
vi /opt/etc/imap.conf
Folgende Einstellungen vornehmen, damit nur Klartext-Passwörter akzeptiert werden:
sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN LOGIN
Cyrus Imap Server starten:
/opt/etc/init.d/S59cyrus-imapd restart
Anlegen der IMAP-User Mailboxen:
/opt/bin/cyradm --user mail localhost
Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche.
Folgende cm Befehle (create Mailbox) eingeben (Tux durch realen Mailuser, wie unter Vorbereitungen angelegt, ersetzen)
cm user.tux cm user.tux.Drafts cm user.tux.Outbox cm user.tux.Sent cm user.tux.Trash
cm-Befehle für alle anzulegenden Benutzermailboxen widerholen. Mit dem Befehl lm können alle definierten Mailboxen angezeigt werden.
lm
Die Adminoberfläche mit folgenden Befehlen verlassen:
quit
Löschen von IMAP-User Mailboxen:
Nur der Vollständigkeit halber soll hier auch das Löschen von Mailboxen bzw. Unterordnern erläutert werden. Dies ist leider nicht ganz so einfach wie das Anlegen von Usern und Unterverzeichnissen.
/opt/bin/cyradm --user mail localhost
Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche.
Zunächst muss dem User 'mail' das Recht eingeräumt werden, die zu löschende Mailboxen bzw. Unterverzeichnis zu löschen. Dies ist aus Sicherheitsgründen standardmäßig deaktiviert. Hier soll exemplarisch das Löschen einer Usermailbox "Mailbox" und eines Unterordners "Test" in der Mailbox "Mailbox2" demonstriert werden. (Achtung: auf Groß/Kleinschreibung achten).
sam user.Mailbox mail all
Damit bekommt der User "mail" sämtliche Rechte (incl. löschen) an der Mailbox "Mailbox" zugewiesen. Der folgende Befehl löscht die Usermailbox schließlich:
dm user.Mailbox
Nun das Löschen des Unterordners "Mailbox2/Test"
sam user.Mailbox2.Test mail all dm user.Mailbox2.Test
Die Adminoberfläche mit folgenden Befehlen verlassen:
quit
Test von Postfix und Cyrus Imapd
Hinweis: Es ist ratsam für die folgenden Tests ein weiteres Putty-Fenster mit Verbindung zur NSLU zu öffnen und permanent die Logging-Ausgaben zu beobachten, um im Falle eines Fehlers entsprechende Fehler einzukreisen:
tail -f /var/log/messages
Postfix neu starten, um sämtliche durchgeführte Änderungen bekannt zu geben:
/opt/etc/init.d/S69postfix stop /opt/etc/init.d/S69postfix start
Zunächst wird mittels Telnet geprüft, ob Postfix in der Lage ist, mails intern zu versenden. Anschließend wird Cyrus mit einem Mailprogramm überprüft.
Am PC eine Telnet-Verbindung zum Mailserver aufbauen
telnet IP_der_NSLU 25
oder alternativ mit Putty:
Protokoll=Telnet Port=25 Hostname=IP_der_NSLU
Hinweis:
- Im folgenden Abschnitt sind sowohl Ausgaben von Postfix, als auch notwendige Eingaben im Telnet hintereinander dargestellt. Eingaben sind mit einem ">" zu Beginn versehen.
- mydomain durch die Domäne wie in der main.cf definiert ersetzen.
- tux durch tatsächlich angelegten Benutzer ersetzen
220 nslu.mydomain ESMTP Postfix >ehlo mydomain 250-nslu.mydomain 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-8BITMIME 250 DSN >mail from: root@mydomain 250 Ok >rcpt to: tux@mydomain 250 Ok >data 354 End data with <CR><LF>.<CR><LF> >SUBJECT: Test 1 >Testmail >. > 250 Ok: queued as 6DA50EAAC >quit 221 Bye Connection to host lost.
Email-Programm starten und ein neues Konto anlegen.
Einstellungen:
- Faill 1: Kein Relay-Betrieb (→ siehe oben), Mailserver sammelt mails per fetchmail (→ siehe Kapitel Fetchmail) ein und verwaltet diese
email-adresse: user@provider (z.B. test@gmx.de) Protokoll: Imap Posteingangsserver: IP_der_NSLU Postausgangsserver: SMTP-Server des Providers Benutzername (Posteingang): Tux Benutzername (Postausgang): Benutzername des Providers
- Fall 2: "vollwertiger" Mailserver, der Mails direkt in Empfang nimmt und mittels Relay absendet:
email-adresse: tux@domain Protokoll: Imap Posteingangsserver: IP_der_NSLU Postausgangsserver: IP_der_NSLU Benutzername (Posteingang): Tux Benutzername (Postausgang): Tux
Nach Eingabe des Passwortes darf keine Fehlermeldung erscheinen. Wenn alles geklappt hat, sollte sich im Posteingang die Mail aus obigem Postfix Test befinden.
Erweiterungen der Funktionalität des Mailservers:
- Mails abholen mittels Fetchmail
- Spamabwehr mit Spamassassin
- Zugriff aus dem Web per Webmailer Roundcube
- Direkter SSL-geschützter IMAP-Zugriff aus dem Internet Cyrus SSL