{"id":656,"date":"2014-06-29T17:37:15","date_gmt":"2014-06-29T15:37:15","guid":{"rendered":"http:\/\/blog.gafu.de\/?p=656"},"modified":"2014-10-21T23:36:10","modified_gmt":"2014-10-21T21:36:10","slug":"mails-von-kolab-3-2-mit-externem-mailserver-des-isp-versenden","status":"publish","type":"post","link":"http:\/\/blog.gafu.de\/?p=656","title":{"rendered":"Mails von Kolab 3.2 mit externem Mailserver des ISP versenden"},"content":{"rendered":"<p>Hallo.<br \/>\nNachdem Kolab installiert ist, kann man mit mehreren Benutzern bereits intern Mailverkehr haben \ud83d\ude42<br \/>\nSelbstverst\u00e4ndlich reicht das aber nicht, man will ja auch anderen Leuten mail schicken k\u00f6nnen.<\/p>\n<p>Ich habe meine Webseiten beim gro\u00dfen deutschen Hoster STRATO. Dank einiger Umbr\u00fcche in letzter Zeit gibts hier einiges zu beachten.<br \/>\nExemplarisch beschreibe ich nun, wie man ausgehenden Mailverkehr \u00fcber den Kunden-Mailserver bei Strato einrichtet.<br \/>\nDabei werden die Mails <strong>genau so<\/strong> versandt, wie es ein Mailclient auch tuen w\u00fcrde, etwa Thunderbird oder Outlook.<\/p>\n<p><!--more--><br \/>\nBei Strato gibt es zu beachten: Nach den Enth\u00fcllungen \u00fcber die umfassenden Geheimdienstaktivit\u00e4ten durch Edward Snowden hat Strato die eigenen Mailserver angepasst. Ab 01\/2013 koennen nur noch Mailkonten angelegt werden, die Verschl\u00fcsselt per SSL kontaktiert werden <b>m\u00fcssen<\/b>.<\/p>\n<p>Dabei geht Strato weiter als andere Anbieter. Im gegensatz zu z.B. GMX, die eine unverschl\u00fcsselte Verbindung auf Port 578 mit nachfolgendem StartTLS Befehl (Umschalten auf verschl\u00fcsselte Kommunikation) anbieten, besteht Strato auf einer von Anfang an verschl\u00fcsselten Kommunikation.<br \/>\nDazu soll der SMTP Server auf Port 465 mit einer SSL-Verbindung kontaktiert werden, bevor irgendetwas anderes passiert.<br \/>\nDazu werden alle anderen verbindungsversuche \u00fcber Port25 und 578 sofort nach zustandekommen ohne Fehlermeldung wieder abgebrochen.<\/p>\n<p>Der bei Kolab verwendete Mailserver POSTFIX jedoch beherrscht kein SMTPS (SMTP over SSL) auf port 465 und wechselt trotz anderer configuration selbstst\u00e4ndig auf das Verfahren StartTLS auf Port578, und wird dort vom Strato-server sofort wieder vor die T\u00fcr gesetzt.<\/p>\n<p>Dieses Problem kann man nur l\u00f6sen, wenn man die Kontaktaufnahme zum Strato-Server \u00fcber einen Tunnel leitet, der bereits au\u00dferhalb des Mailservers die SSL-Verschl\u00fcsselung bereitstellt.<br \/>\nDazu bietet sich das debian-Paket <b>stunnel4<\/b> an.<br \/>\nNach dem Installieren (z.B. per apt-get) muss die configuration angepasst werden:<br \/>\nMit <code>touch \/etc\/stunnel\/stunnel.conf<\/code> kann die konfigurationsdatei angelegt werden.<br \/>\nEin editor (ebenfalls mit Rootrechten) kann dann die Datei bearbeiten.<br \/>\n(Ich verwende gerne den MC, wer sich noch mit dem legend\u00e4ren Norton Commander auskennt kommt auf anhieb damit zurecht)<\/p>\n<p>Ich habe aus der Beispielconfig (siehe Readme) mir die passenden Zeilen herauskopiert und entsprechend angepasst:<\/p>\n<blockquote><p>; PID is created inside the chroot jail<br \/>\npid = \/stunnel4.pid<\/p>\n<p>; Debugging stuff (may useful for troubleshooting)<br \/>\n;debug = 7<br \/>\n;output = \/var\/log\/stunnel4\/stunnel.log<\/p>\n<p>; * Service defaults may also be specified in individual service sections *<br \/>\n; Disable support for insecure SSLv2 protocol<br \/>\noptions = NO_SSLv2<\/p>\n<p>; * Service definitions (remove all services for inetd mode) *<br \/>\n[strato-smtps]<br \/>\nclient = yes<br \/>\naccept = 127.0.0.1:10010<br \/>\nconnect = smtp.strato.de:465<\/p><\/blockquote>\n<p>Kurz zur Erl\u00e4uterung: Der SSL-Tunnel-daemon lauscht auf der internen IP-Adresse 127.0.0.1 Port 10010 und schleust die ankommenden Daten durch den Tunnel auf die SSL-Verbindung zum Strato-SMTP-Server auf Port465.<\/p>\n<p>Damit ist schon einmal die SMTPS-Verbindung eingerichtet.<\/p>\n<p><strong>Jetzt kommt der Mailserver an die Reihe:<\/strong><br \/>\nBei Strato ist man gezwungen, Mails mit der zur Authentifizierung passenden Mailadresse einzuliefern. Es werden keine Mails angenommen, die nicht von dem zum Nailaccount passenden Absender stammen. Will man so wie ich mehrere Mailadressen verwenden, muss man den Mailserver so einrichten, das er f\u00fcr jede Mailadresse das jeweils dazu geh\u00f6rene Passwort verwendet.<br \/>\nAu\u00dferdem muss jeweils vor dem Mailversand die entsprechende Authentifizierung durchgef\u00fchrt werden.<br \/>\nDas geht so:<\/p>\n<p>\/etc\/postfix\/main.cf<\/p>\n<blockquote><p># See \/usr\/share\/postfix\/main.cf.dist for a commented, more complete version<\/p>\n<p># Debian specific: Specifying a file name will cause the first<br \/>\n# line of that file to be used as the name. The Debian default<br \/>\n# is \/etc\/mailname.<br \/>\n#myorigin = \/etc\/mailname<\/p>\n<p>smtpd_banner = $myhostname ESMTP $mail_name (Debian\/GNU)<br \/>\nbiff = no<\/p>\n<p># appending .domain is the MUA&#8217;s job.<br \/>\nappend_dot_mydomain = no<\/p>\n<p># Uncomment the next line to generate &#8222;delayed mail&#8220; warnings<br \/>\n#delay_warning_time = 4h<\/p>\n<p>readme_directory = no<\/p>\n<p># TLS parameters<br \/>\nsmtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem<br \/>\nsmtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key<br \/>\nsmtpd_use_tls=yes<br \/>\nsmtpd_tls_session_cache_database = btree:${data_directory}\/smtpd_scache<br \/>\nsmtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache<\/p>\n<p># See \/usr\/share\/doc\/postfix\/TLS_README.gz in the postfix-doc package for<br \/>\n# information on enabling SSL in the smtp client.<\/p>\n<p>myhostname = kolab.home.gafu.de<\/p>\n<p>alias_maps = hash:\/etc\/aliases<br \/>\nalias_database = hash:\/etc\/aliases<br \/>\nmyorigin = \/etc\/mailname<br \/>\nmydestination = ldap:\/etc\/postfix\/ldap\/mydestination.cf<br \/>\nmynetworks = 127.0.0.0\/8 [::ffff:127.0.0.0]\/104 [::1]\/128<br \/>\nmailbox_command = procmail -a &#8222;$EXTENSION&#8220;<br \/>\nmailbox_size_limit = 0<br \/>\nrecipient_delimiter = +<br \/>\nlocal_recipient_maps = ldap:\/etc\/postfix\/ldap\/local_recipient_maps.cf<br \/>\ninet_interfaces = all<br \/>\ntransport_maps = ldap:\/etc\/postfix\/ldap\/transport_maps.cf, hash:\/etc\/postfix\/transport<br \/>\ncontent_filter = smtp-amavis:[127.0.0.1]:10024<br \/>\nvirtual_alias_maps = $alias_maps, ldap:\/etc\/postfix\/ldap\/virtual_alias_maps.cf, ldap:\/etc\/postfix\/ldap\/virtual_alias_maps_mailfor<br \/>\nwarding.cf, ldap:\/etc\/postfix\/ldap\/virtual_alias_maps_sharedfolders.cf, ldap:\/etc\/postfix\/ldap\/mailenabled_distgroups.cf, ldap:\/e<br \/>\ntc\/postfix\/ldap\/mailenabled_dynamic_distgroups.cf<br \/>\nsubmission_sender_restrictions = reject_non_fqdn_sender, check_policy_service unix:private\/submission_policy, permit_sasl_authent<br \/>\nicated, reject<br \/>\nsubmission_recipient_restrictions = check_policy_service unix:private\/submission_policy, permit_sasl_authenticated, reject<br \/>\nsubmission_data_restrictions = check_policy_service unix:private\/submission_policy<\/p>\n<p>#incoming mail<br \/>\nsmtpd_sender_login_maps = $relay_recipient_maps<br \/>\nsmtpd_tls_auth_only = yes<br \/>\nsmtpd_recipient_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_rbl_client zen.spamhaus.org, reject_non_fqdn_r<br \/>\necipient, reject_invalid_helo_hostname, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service unix:pri<br \/>\nvate\/recipient_policy_incoming, permit<br \/>\nsmtpd_tls_security_level = may<br \/>\nsmtpd_sasl_auth_enable = yes<br \/>\nsmtpd_sender_restrictions = permit_mynetworks, check_policy_service unix:private\/sender_policy_incoming<\/p>\n<p>#outgoing mail<br \/>\nrelayhost = [127.0.0.1]:10010<br \/>\nsender_canonical_maps = hash:\/etc\/postfix\/sender_canonical<br \/>\nsender_dependent_relayhost_maps = hash:\/etc\/postfix\/sender_relay<br \/>\nsmtp_tls_security_level = may<br \/>\nsmtp_sender_dependent_authentication = yes<br \/>\nsmtp_sasl_auth_enable = yes<br \/>\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd<br \/>\nsmtp_sasl_security_options = noanonymous noplaintext<\/p><\/blockquote>\n<p>Ich denke mit den kommentaren &#8222;incoming&#8220; und &#8222;outgoing&#8220;, insbesondere letzterem kann jeder die entsprechenden Eintr\u00e4ge auffinden.<br \/>\nDer letzte Absatz ist nat\u00fcrlich der entscheidende.<br \/>\n&#8222;sender_canonical_maps&#8220; dient einem Mapping der E-Mail-adressen von den Lokalen Mailserveradressen auf die Adresse des Mailkonto bei Strato, ich nenne es jetzt &#8222;externe Adresse&#8220;<br \/>\n&#8222;sender_dependent_relayhost&#8220; erlaubt die verwendung von verschiedenen externen Mailservern (also verschiedene Mailanbieter)<br \/>\n&#8222;sender_sasl_password_maps&#8220; enth\u00e4lt die Passworte zu den externen Mailkonten.<\/p>\n<p>Der Inhalt der Dateien ist folgender:<br \/>\n\/etc\/postfix\/sender_canonical:<br \/>\n<code>interne_mail_1@fqdn externe_mailadresse@externe_domain.com<\/code><\/p>\n<p>\/etc\/postfix\/sender_relay<br \/>\n<code>interne_mail_1@fqdn [127.0.0.1]:10010<\/code><\/p>\n<p>Ganz klar gehts hier in den Port des SSL-Tunnels, der zu smtp.strato.de:465 mit SSL weiterleitet.<br \/>\nStatt der IP k\u00f6nnen andere Mailserver von dritten Anbietern auch eingetragen werden, wenn man mehrere verwenden m\u00f6chte.<\/p>\n<p>\/etc\/postfix\/sasl_passwd<br \/>\n<code>externe_mail@externe_domain.com externe_mail@externe_domain.com:[ext_mailpw]<\/code><\/p>\n<p>Um die Daten in ein f\u00fcr den Mailserver brauchbares Format zu bringen, m\u00fcssen diese in Datenbanken umgewandelt werden. Au\u00dferdem ist der Tunnel zu starten und der Mailserver neu zu starten, um die Daten zu \u00fcbernehmen:<br \/>\n<code><br \/>\n\/etc\/init.d\/stunnel4 start<br \/>\ncd \/etc\/postfix<br \/>\npostmap sasl_passwd<br \/>\npostmap sender_canonical<br \/>\npostmap sender_relay<br \/>\n\/etc\/init.d\/postfix restart<br \/>\n<\/code><\/p>\n<p>Jetzt geht ausgehende Mail auch mit dem Strato-Mailserver. Gehts nicht, dann die Fehlerlogs mal durchsehen:<br \/>\n<code>cat \/var\/log\/mail.log | grep postfix<\/code><\/p>\n<p>Viel Erfolg!<\/p>\n<p>edit: Bei mir ist der Fehler &#8222;Destination Host unrechable&#8220; beim Mail-versenden aufgetreten. Das lag daran, dass in der VM ipv6 lief, aber der Host nur f\u00fcr IPv4 konfiguriert ist. Daher kann es sinnvoll sein in der VM ebenfalls <a href=\"http:\/\/www.thomas-krenn.com\/de\/wiki\/IPv6_deaktivieren\">IPv6 zu deaktivieren<\/a>.<\/p>\n<p>Nachtrag: Die default-configuration von Postfix nimmt nur mails bis maximal 5 Mbyte an, sofern nichts anderes in der config steht. Sind mails, die mit Fetchmail abgeholt werden, gr\u00f6\u00dfer, wird die mail nicht angenommen, und eine Mailer-Daemon (Bounce-) Mail versandt. Diese geht zur\u00fcck an den Empf\u00e4nger. Da die Absenderadresse nun MAILER-DAEMON@host ist, muss ggf. noch die Adresse entsprechend umgemappt werden, damit sie korrekt versendet werden kann. Alternativ k\u00f6nnen bouncemails abgestellt werden (werden dann statt an den Absender an der Postmaster versendet) oder bereits im Fetchmail die Mailgr\u00f6\u00dfe auf ein Ma\u00df beim abrufen beschr\u00e4nkt werden, die Postfix auf jeden fall annimmt.<br \/>\nUm die Postmaster Mails zugestellt zu bekommen, muss Root und \/ oder Postmaster als lokale zus\u00e4tzliche (alias-)email-Adresse im Kolab-Webadmin einem Nutzerkonto hinzugef\u00fcgt werden. Sonst entstehen weitere Bouncemails.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hallo. Nachdem Kolab installiert ist, kann man mit mehreren Benutzern bereits intern Mailverkehr haben \ud83d\ude42 Selbstverst\u00e4ndlich reicht das aber nicht, man will ja auch anderen Leuten mail schicken k\u00f6nnen. Ich habe meine Webseiten beim gro\u00dfen deutschen Hoster STRATO. Dank einiger Umbr\u00fcche in letzter Zeit gibts hier einiges zu beachten. Exemplarisch beschreibe ich nun, wie man [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[435,433,448],"class_list":["post-656","post","type-post","status-publish","format-standard","hentry","category-computer","tag-groupware","tag-kolab","tag-mailserver"],"_links":{"self":[{"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=656"}],"version-history":[{"count":8,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions"}],"predecessor-version":[{"id":664,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions\/664"}],"wp:attachment":[{"href":"http:\/\/blog.gafu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.gafu.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}