Wenn das bei dir nicht so wüst ist, dann kannst du das natürlich mit einer anderen Datenbank machen.
Ich bin da ganz offen und für jeden Tip dankbar.
Das hängt auch etwas davon ab, wie erweiterungsfähig deine Struktur sein soll. Erweiterungsfähig wäre gut, mein Vorschlag ist jedoch, ich fange erstmal einfach an, um das ganze System zu verstehen.
Wenn Emailadressen als Usernamen eingesetzt werden sollen, dann bekommst du Probleme mit passwd und sasldb.
Ich würde sagen, da bin ich recht frei, da sich die user nicht auf der Konsole einloggen werden. Ich kann die usernamen vorgeben und werde mich versuchen an das genannte Schema zu halten.
Siehst du Bedarf für weitere Domains und Unterteilungen oder kannst du absehen, dass die Struktur, die du aufbaust, sich nicht irgendwann um Größenordnungen ändert? Das kann durchaus sein, dass das System irgendwann mehrere hundert Konten verwalten muss.
Okay, ich sehe hier, dass der realm nicht angegeben ist. Sind die User als user@domain.tld angelegt oder nur als nackte Usernamen?
Die User sind nur als nackte Usernamen angelegt, habe es aber auch mit user@domain.tld getestet, da war der realm ausgefüllt, hat aber dennoch nicht geklappt.
Wie sind sie denn in der MySQL-Tabelle angelegt? Ohne domain.tld. Mein Vorschlag: Schrittweise sich dem Problem nähern (s.u.)
Jetzt geht es los: Postfix-Cyrus-Imap unter SUSE 10.1
Hier mein "Schlachtplan":
Vorarbeiten: Hostnamen und Rechnernamen prüfen
Den Hostnamen habe ich mit yast eingerichtet: Netzwerkdienste > DNS- und Hostname Hostname: tux Domainname: domain1.de Nameserver 1: IP-von-NS1 Nameserver 2: IP-von-NS2 Nameserver 3: IP-von-NS3
Prüfen, ob alle benötigten Pakete installiert sind Installiert sind folgende Pakete (alle mit yast installiert): cyrus-imapd cyrus-imapd-devel cyrus-sasl cyrus-sasl-32bit cyrus-sasl-devel cyrus-sasl-devel32bit cyrus-sasl-gssapi cyrus-sasl-plain cyrus-sasl-saslauthd
Mit dem Befehl hostname prüfen: # hostname tux Das ist nur der host, aber nicht der FQDN. Der FQDN lautet tux.domain1.de Prüfen mit ping: # ping tux PING tux.domain1.de (IP-von-domain1) 56(84) bytes of data. 64 bytes from tux.domain1.de (IP-von-domain1): icmp_seq=1 ttl=64 time=0.022 ms 64 bytes from tux.domain1.de (IP-von-domain1): icmp_seq=2 ttl=64 time=0.014 ms 64 bytes from tux.domain1.de (IP-von-domain1): icmp_seq=3 ttl=64 time=0.027 ms 64 bytes from tux.domain1.de (IP-von-domain1): icmp_seq=4 ttl=64 time=0.021 ms (Strg-C zum abbrechen) perl-Authen-SASL-Cyrus perl-Cyrus-IMAP perl-Cyrus-SIEVE-managesieve postfix postfix-mysql procmail mysql mysql-client mysql-devel mysql-shared pam_mysql
Grundkonfiguration prüfen Da meine main.cf inzwischen schon so oft verändert wurde, habe ich mir von postfix.org die sourcen geholt (ftp://ftp.fu-berlin.de/unix/mail/postfix/official/postfix-2.3.5.tar.gz) und die Standard-main.cf eingespielt. Hier die main.cf mit geänderten Werten für mydestination, mydomain, myhostname, die auf die eigenen Werte angepasst wurden:
#postconf -n command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix debug_peer_level = 2 html_directory = mail_owner = postfix mailq_path = manpage_directory = mydestination = $mydomain, localhost mydomain = tux.domain1.de myhostname = mail.domain1.de newaliases_path = queue_directory = /var/spool/postfix readme_directory = sample_directory = sendmail_path = setgid_group = unknown_local_recipient_reject_code = 550 Nach dem versuchten Neustart des Servers (postfix reload) gab es im mail.log Meldungen wie fatal: bad string length 0 < 1: setgid_group = Der Postfix-Server wurde nicht neu gestartet. Jetzt habe ich gelesen, dass diese auskommentiert werden sollten. In meiner alten Konfiguration stand der Wert auf maildrop Das hat mich dazu veranlasst die beiden Konfigurationen mal miteinander zu vergleichen. Hier ein Vergleich meiner alten und der "Standard"(?) Konfiguarion (unerwähnte Parameter sind gleich): alt: daemon_directory = /usr/lib/postfix neu: daemon_directory = /usr/libexec/postfix alt: debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 neu: nicht gesetzt alt: sendmail_path = /usr/sbin/sendmail neu: sendmail_path = alt: newaliases_path = /usr/bin/newaliases neu: newaliases_path = alt: mailq_path = /usr/bin/mailq neu: mailq_path = alt: setgid_group = maildrop neu: setgid_group = alt: html_directory = /usr/share/doc/packages/postfix/html neu: html_directory = alt: manpage_directory = /usr/share/man neu: manpage_directory = alt: sample_directory = /usr/share/doc/packages/postfix/samples neu: sample_directory = alt: readme_directory = /usr/share/doc/packages/postfix/README_FILES neu: readme_directory = Ich vermute, dass diese Parameter bei der manuellen Installation gesetzt werden, beim installieren eines Paketes mit yast aber bereits vorkonfiguriert sind. Habe daher die Werte aus der alten Konfiguration geholt und in main.cf eingesetzt. #postconf -n command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/lib/postfix debug_peer_level = 2 html_directory = /usr/share/doc/packages/postfix/html mail_owner = postfix mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man mydestination = $mydomain, localhost mydomain = tux.domain1.de myhostname = mail.domain1.de newaliases_path = /usr/bin/newaliases queue_directory = /var/spool/postfix readme_directory = /usr/share/doc/packages/postfix/README_FILES sample_directory = /usr/share/doc/packages/postfix/samples sendmail_path = /usr/sbin/sendmail setgid_group = maildrop unknown_local_recipient_reject_code = 550 Jetzt startet auch der Server hier meine master.cf: # # Postfix master process configuration file. For details on the format # of the file, see the Postfix master(5) manual page. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd -vv #submission inet n - n - - smtpd # -o smtpd_etrn_restrictions=reject # -o smtpd_client_restrictions=permit_sasl_authenticated,reject #smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes # -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes #submission inet n - n - - smtpd # -o smtpd_etrn_restrictions=reject # -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes #628 inet n - n - - qmqpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp -o fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil #localhost:10025 inet n - n - - smtpd -o content_filter= scache unix - - n - 1 scache # # ==================================================================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # ==================================================================== # # maildrop. See the Postfix MAILDROP_README file for details. # Also specify in main.cf: maildrop_destination_recipient_limit=1 # maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/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 procmail unix - n n - 20 pipe flags=R user=cyrus argv=/usr/bin/procmail -o SENDER=${sender} -m USER=${user} EXTENSION=${extension} /etc/procmailrc Hier meine /usr/lib64/sasl2/smtpd.conf: pwcheck_method: saslauthd mech_list: plain login Bei 32-Bit SUSE liegt die Datei wohl in /usr/lib/sasl2/smtpd.conf. Hier meine /etc/imapd.conf: postmaster: postmaster configdirectory: /var/lib/imap partition-default: /var/spool/imap admins: cyrus allowanonymouslogin: no allowplaintext: yes sasl_mech_list: plain servername: domain1.de autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 dracinterval: 0 drachost: localhost sasl_pwcheck_method: saslauthd auxprop sasl_auxprop_plugin: sasldb sievedir: /usr/sieve sendmail: /usr/sbin/sendmail sieve_maxscriptsize: 32 sieve_maxscripts: 5 unixhierarchysep: yes Das ist meine aktuelle Einstellung, die Originaleinstellung kann u.U. abweichen. Ich habe auch nicht gesagt, dass diese Einstellung funktioniert. Wenn der Server läuft werde ich alle Einstellungen nochmal aufführen. Ich meine, dass dies hier die Original-Einstellung ist: configdirectory: /var/lib/imap partition-default: /var/spool/imap sievedir: /var/lib/sieve admins: cyrus allowanonymouslogin: no autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 dracinterval: 0 drachost: localhost sasl_pwcheck_method: saslauthd lmtp_overquota_perm_failure: no lmtp_downcase_rcpt: yes # # if you want TLS, you have to generate certificates and keys # #tls_cert_file: /usr/ssl/certs/cert.pem #tls_key_file: /usr/ssl/certs/skey.pem #tls_ca_file: /usr/ssl/CA/CAcert.pem #tls_ca_path: /usr/ssl/CA
Logging für alles ein-/hochstellen (imap, auth, mail) Logging für auth haben wir bereits eingerichtet (saslauthd):
/etc/syslog-ng/syslog-ng.in: destination authlog { file("/var/log/auth.log"); }; filter f_auth { facility(auth); }; log { source(src); filter(f_auth); destination(authlog); }; In /var/log/mail werden standardmässig schon Fehler hineingeschreiben, ich denke imap hat seine eigene Logdatei, diese ist aber bei mir nicht angelegt (?). Ob man das Maillogging noch erhöhen kann/sollte, weiß ich nicht. Ich vermute aber, dass die Einstellungen okay sind. Andreas sagte mal etwas, dass man das Logging in der master.cf hochsetzen kann: Parameter "-v" am smtpd bzw. smtp/lmtp. (ohne) = Error, Warning, Fail -v = Info, Note -vv = Debug, Trace, Pass Ich vermute, er meint damit die Angaben in der master.cf hinter der Zeile, die die entsprechenden transports darstellen. So, hier halte ich jetzt mal an und würde mich freuen, wenn Ihr meine Schritte kommentiert und falsche Aussagen/Begriffe austauscht. Dann hätten wir schon mal einen Anfang für die Doku/Anleitung - und natürlich einen Beginn für einen funktionierenden Mailserver unter suse 10.1 ;-) (Es ist ein Ros entsprungen...) -------- Viele Grüße Ingbert
Okay.
Zwischenschritte: Konfigurationen (nach jedem Schritt) sichern Dienste nach jeder Änderung neu starten
Dokumentiere deine Schritte! Dies ist ganz wichtig, wenn du Jahre später plötzlich das System neu aufbauen musst, weil das Dateisystem von einem kaputten Treiber geschreddert wurde.
1) Postfix für eine Domain domain1.de aufsetzen Zwei Benutzer sind in passwd angelegt (test1, test2) Mail lokal verschicken
Für Postfix brauchst du erst einmal keine user anlegen.
2) Postfix mail nach Cyrus weiterleiten Mit cyradm 2 Mailboxen einrichten test1 schickt mail zu test2 (lokal) test1 schickt mail zu test2@domain1.de
Fange mit Cyrus an:
Ich würde dafür direkt die Unterstützung für virtuelle Domains aktivieren, denn die brauchst du später ohnehin.
- Melde dich als User cyrus an und teste, ob du dich mit "cyradm localhost" anmelden kannst. - Wenn ja, dann teste, ob Webcyradm einen User anlegen kann (in cyradm nachsehen, ob die Mailbox angelegt wurde) - Schau nach, ob die User tatsächlich als domain/user angelegt wurden.
3) Mail von Mailclient bei Cyrus abholen (entfernter Rechner) Bin mir nicht sicher, ob hier schon ein Passwort benötigt wird. Benutzerkonto test2 wird auf Client, z.B. Thunderbird, eingerichtet und soll Mail abholen, die zuvor test1 verschickt hat
4) Authentifizierung einrichten sasl-Passwörter werden in Datenbank gespeichert (z.B. sasldb) Der Mechanismus ist vorerst "plain" User werden in sasldb angelegt Test mit sasldblistusers2 und testsaslauthd
Diese beiden Punkte müssen umgekehrt werden. Du kannst erst dann deine Mails abholen/dich bei Cyrus anmelden, wenn die Authentifikation für den Dienst IMAP eingerichtet ist. Der User cyrus ist systemuser und ein Spezialfall (er hat aber keine Mailbox).
Lass uns das wirklich in MySQL machen. Dann stellen wir einmal die notwendige Doku zusammen und geben es als komplette Anleitung für Suse für die FAQ weiter.
5) Authentifizierung im Mailclient einrichten
Erst einmal ohne Auth nur von internem Netzwerk.
test1 schickt mail an test2 (lokal) Benutzerkonto test2 wird auf Client für Auth-Mechanismus eingerichtet und soll Mail abholen, die zuvor test1 verschickt hat
Senden braucht die Authentifikation bei Postfix, Abholen bei Cyrus.
6) Postfix wird jetzt für das Relaying vorbereitet und die Authentifizierung implementiert Um Mail von entfernten Rechnern an Postfix zu verschicken wird das Relaying eingerichtet, um aber kein offenes Relay zu erhalten wird eine Authentifizierung gegen sasl implementiert. setzen der Werte smtpd_sasl_auth_enable = yes, ... etc.
Das muss vor Punkt 5 geschehen.
7) Im Mailclient muss jetzt auch zum verschicken eine Authentifikation eingerichtet werden Testmail von test2 an test1@domain1.de
8) Eine zweite Domain für Postfix und Cyrus einrichten virtual_mailbox_domains = domain1.de, domain2.de (wird hier domain1 nochmal aufgelistet?)
Nimm nur virtuelle Domains und lasse mydestination leer! Mydestination kannst du dann später für Mailinglisten verwenden.
virtual_mailbox_maps = hash:/etc/postfix/virtual <= hier kommen die Mailadressen hinein, an die geliefert werden soll
Nein, /etc/postfix/virtual ist schon als Standard belegt für normale virtuelle Umschreibungen.
Nimm besser eine eigene Datei dafür: virtual_mailbox_maps = hash:/etc/postfix/virt_mailboxes
virtual_transport = lmtp:unix:/var/imap/socket/lmtp Hier fehlt mir noch etwas der Überblick, ob das so richtig ist und ob die Konten entsprechend so einrichtbar sind.
Das ist in Ordnung.
Danach Test
9) Das ganze sicherer machen smtpd_recipient_restrictions etc. Wieder ein Test
OK.
10) TLS unter Postfix einrichten Generieren von Zertifikaten Clients dafür einrichten Test
OK, aber auch für Cyrus.
11) Umstieg auf mysql-Tabellen/ web-cyradm ??? Ist wohl nach der letzten Diskussionsrunde für meine Bedürfnisse nicht nötig, wäre aber natürlich die Kür für die Einrichtung ;-)
Lass uns versuchen, WebCyrAdm direkt einzubinden.
Ich wäre froh, wenn Du die Liste korrigierst, vielleicht wird mir dann auch etwas klarer vor Augen.
Jedenfalls werden wird jeden einzelnen Schritt erst testen, bevor wir weitergehen. Wenn du nur ein paar Dutzend user hast, kannst du das später noch per Hand nachpflegen, aber bei hunderten oder gar tausenden von usern ist das eine Qual. Deshalb am besten direkt in MySQL.
Sandy
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org