{"id":885,"date":"2015-01-31T10:38:11","date_gmt":"2015-01-31T08:38:11","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=885"},"modified":"2015-03-14T15:03:22","modified_gmt":"2015-03-14T13:03:22","slug":"der-eigene-mailserver-teil-3","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/","title":{"rendered":"Der eigene Mailserver &#8211; Teil 3"},"content":{"rendered":"<p>Es ist Zeit f\u00fcr Teil 3 dieser kleinen Artikelreihe. In diesem Teil wird der Server einsatzbereit gemacht. Dazu sind im Wesentlichen die folgenden sechs Aufgaben zu erledigen.<\/p>\n<ul>\n<li>Installation von <a href=\"#opendkim\">OpenDKIM<\/a>[1. <a title=\"OpenDKIM Website\" href=\"http:\/\/www.opendkim.org\/\" target=\"_blank\">OpenDKIM Homepage<\/a>] zur Nutzung von <a title=\"Wikipedia: DomainKeys\" href=\"https:\/\/de.wikipedia.org\/wiki\/DomainKeys\" target=\"_blank\">DomainKeys Identified Mail<\/a>. Damit k\u00f6nnen Empf\u00e4nger den Absender einer E-Mail \u00fcberpr\u00fcfen.<\/li>\n<li>Installation von <a title=\"Wikipedia: SpamAssassin\" href=\"https:\/\/de.wikipedia.org\/wiki\/SpamAssassin\" target=\"_blank\">SpamAssassin<\/a>[2. <a title=\"Projektseite Spamassassin\" href=\"http:\/\/spamassassin.apache.org\/\" target=\"_blank\">Projektseite Apache SpamAssassin<\/a>] f\u00fcr den Kampf gegen Spam<\/li>\n<li>Installation von <a title=\"Wikipedia: ClamAV\" href=\"http:\/\/de.wikipedia.org\/wiki\/ClamAV\" target=\"_blank\">ClamAV<\/a>[3. <a title=\"ClamAV Webpr\u00e4senz\" href=\"http:\/\/www.clamav.net\/index.html\" target=\"_blank\">ClamAV Webpr\u00e4senz<\/a>] gegen l\u00e4stige Virenprobleme<\/li>\n<li>Konfiguration von <a href=\"#der_ewige_kampf_gegen_spam\">SpamAssassin<\/a> und <a href=\"#clamav\">ClamAV<\/a> mit einem kleinen Abriss \u00fcber den Kampf gegen Spam<\/li>\n<li><a href=\"#dns_konfiguration\">DNS Konfiguration<\/a><\/li>\n<li>Serverseitige Einrichtung von <a href=\"#mit_email_filtern_gegen_spam\">Mailfiltern<\/a> mit <a title=\"Wikipedia: Sieve\" href=\"http:\/\/de.wikipedia.org\/wiki\/Sieve\" target=\"_blank\">Sieve<\/a><\/li>\n<\/ul>\n<p>Es gibt wieder viel zu tun. Also legen wir los.<\/p>\n<p><strong>Haben wir nicht was vergessen?<\/strong><\/p>\n<p>Wie ist es denn um den Update-Status des eigenen Servers bestellt? Evtl. ist jetzt eine gute Gelegenheit das System auf Updates zu pr\u00fcfen und diese einzuspielen. Doch muss dies nicht manuell passieren.<\/p>\n<p>In <a title=\"Automatische Installation von Sicherheitsupdates\" href=\"https:\/\/www.my-it-brain.de\/wordpress\/automatische-installation-von-sicherheitsupdates\/\" target=\"_blank\">&#8222;Automatische Installation von Sicherheitsupdates&#8220;<\/a> erkl\u00e4re ich, wie man die Update-Installation unter Ubuntu automatisieren kann. Exkurs Ende.<\/p>\n<h2 id=\"opendkim\">OpenDKIM<\/h2>\n<p>OpenDKIM soll Mailservern dabei helfen die Authentizit\u00e4t und die Integrit\u00e4t von eingehenden E-Mails zu \u00fcberpr\u00fcfen.<\/p>\n<p>Versendet ein Mailserver eine E-Mail mit OpenDKIM, so bildet der Server einen Hashwert \u00fcber den Inhalt der E-Mail. Dieser Hashwert wird mit einem privaten Schl\u00fcssel verschl\u00fcsselt und im Header der E-Mail gespeichert. Der empfangende Mailserver fragt \u00fcber DNS einen speziellen TXT-Record ab, welcher das \u00f6ffentliche Gegenst\u00fcck zum privaten Schl\u00fcssel enth\u00e4lt, mit welchem der Hash verschl\u00fcsselt wurde. Der empfangende Mailserver nutzt diesen \u00f6ffentlichen Schl\u00fcssel, um den Hashwert der Nachricht zu entschl\u00fcsseln. Abschlie\u00dfend bildet der Mailserver selbst den Hashwert der empfangenen E-Mail und vergleicht ihn mit dem soeben entschl\u00fcsselten Hashwert aus dem Mailheader. Stimmen beide Hashwerte \u00fcberein, kann man mit hinreichender Sicherheit davon ausgehen, dass die E-Mail von einem autorisierten Absender stammt und unterwegs nicht ver\u00e4ndert wurde.<\/p>\n<p>F\u00fcr die einzelnen Schritte in diesem Teil werden wieder root-Rechte ben\u00f6tigt. Entweder man \u00f6ffnet eine root-Shell oder stellt den folgenden Befehlen ein <code>sudo<\/code> voran.<\/p>\n<p>Als erstes wird das Paket OpenDKIM installiert.<\/p>\n<pre>:~$ sudo apt-get install opendkim opendkim-tools\r\n<\/pre>\n<p>Das OpenDKIM Paket richtet bei der Installation automatisch die ben\u00f6tigten Benutzerkonten und Upstart Jobs ein. Es muss nur noch ein Verzeichnis erstellt werden, in dem die Konfigurationsdateien und der private Schl\u00fcssel gespeichert werden. Der Zugriff auf dieses Verzeichnis wird auf den Benutzer und die Gruppe von opendkim beschr\u00e4nkt.<\/p>\n<pre>mkdir \/etc\/opendkim\r\nchown opendkim:opendkim \/etc\/opendkim\r\n<\/pre>\n<p>Im n\u00e4chsten Schritt wird im soeben erstellen Verzeichnis ein DKIM Schl\u00fcsselpaar erstellt.<\/p>\n<pre>cd \/etc\/opendkim\r\nopendkim-genkey -r -h sha256 -d domainname.tld -s mail\r\n<\/pre>\n<p>Mit dem Parameter <code>-r<\/code> schr\u00e4nkt man das erstellte Schl\u00fcsselpaar in der Art ein, dass es nur zur Signatur von E-Mails verwendet werden kann. Die Angabe des Hash-Algorithmus sollte selbsterkl\u00e4rend sein. Der Parameter <code>-d<\/code> spezifiziert die Domain und <code>-s<\/code> gibt den Selektor an.[9. <a title=\"opendkim-genkey \u2212 DKIM filter key generation tool\" href=\"http:\/\/www.opendkim.org\/opendkim-genkey.8.html\" target=\"_blank\">opendkim-genkey Manual<\/a>] Das Kommando gibt die beiden Dateien <em>mail.private<\/em> und <em>mail.txt<\/em> aus. Letztere enth\u00e4lt den \u00f6ffentlichen Schl\u00fcssel in Form eines DNS TXT Records. Dies macht es einfach, den ben\u00f6tigten DNS Eintrag auf dem DNS Server hinzuzuf\u00fcgen. Ich komme in K\u00fcrze darauf zur\u00fcck.<\/p>\n<p>Die Datei <em>mail.private<\/em> wird in <em>mail<\/em> umbenannt. Anschlie\u00dfend wird festgelegt, welche Dienste den Schl\u00fcssel zur Signatur von Mails nutzen d\u00fcrfen. Aber ein Schritt nach dem Anderen.<\/p>\n<p>Zuerst wird die Datei umbenannt:<\/p>\n<pre>mv mail.private mail\r\n<\/pre>\n<p>Anschlie\u00dfend wird die Datei <em>\/etc\/opendkim\/KeyTable<\/em> angelegt und mit Inhalt nach folgendem Muster bef\u00fcllt:<\/p>\n<pre>domainname.tld domainname.tld:mail:\/etc\/opendkim\/mail\r\n<\/pre>\n<p>Hier wird domainname.tld mit dem privaten Schl\u00fcssel f\u00fcr diese Domain verkn\u00fcpft. Hat man mehrere Domains und Schl\u00fcssel, werden diese nach dem gleichen Muster hier eingetragen.<\/p>\n<p>Als n\u00e4chstes wird die Datei <em>\/etc\/opendkim\/SigningTable<\/em> erstellt und mit folgendem Inhalt gef\u00fcllt:<\/p>\n<pre>*@domainname.tld domainname.tld\r\n<\/pre>\n<p>Dieser Eintrag weist OpenDKIM an, alle E-Mails von allen Adressen, die auf @domainname.tld enden, mit der Signatur von mail.domainname.tld zu versehen. Auch hier lassen sich ganz einfach weitere Domains hinzuf\u00fcgen.<\/p>\n<p>Als letzte Datei wird die Datei <em>\/etc\/opendkim\/TrustedHosts<\/em> erstellt, welche lediglich eine lokale IP-Adresse enth\u00e4lt:<\/p>\n<pre>127.0.0.1\r\n::1\r\n<\/pre>\n<p>Diese Datei gibt an, welche Server Mails signieren d\u00fcrfen und welche Server signierte Mails versenden d\u00fcrfen, ohne Benutzeranmeldedaten zu \u00fcbermitteln.<\/p>\n<p>Damit nur OpenDKIM auf die Dateien unterhalb von <em>\/etc\/opendkim<\/em> zugreifen kann, wird der Zugriff noch entsprechend eingeschr\u00e4nkt:<\/p>\n<pre>chown -R opendkim:opendkim \/etc\/opendkim\r\n<\/pre>\n<p>Jetzt kann es der Konfigurationsdatei <em>\/etc\/opendkim.conf<\/em> an den Kragen gehen. An das Ende der Datei wird der folgende Inhalt angeh\u00e4ngt:<\/p>\n<pre>## Benutzerspezifische OpenDKIM Konfiguration\r\nCanonicalization        relaxed\/relaxed\r\nExternalIgnoreList      refile:\/etc\/opendkim\/TrustedHosts\r\nInternalHosts           refile:\/etc\/opendkim\/TrustedHosts\r\nKeyTable                refile:\/etc\/opendkim\/KeyTable\r\nSigningTable            refile:\/etc\/opendkim\/SigningTable\r\nLogWhy                  Yes\r\nPidFile                 \/var\/run\/opendkim\/opendkim.pid\r\nSocket                  local:\/var\/spool\/postfix\/opendkim\/opendkim.sock\r\nSyslogSuccess           Yes\r\nTemporaryDirectory      \/var\/tmp\r\nUserID                  opendkim:opendkim\r\n<\/pre>\n<p>Da das Verzeichnis f\u00fcr den Socket noch nicht existiert, wird es jetzt angelegt und mit den entsprechenden Berechtigungen versehen.<\/p>\n<pre>mkdir \/var\/spool\/postfix\/opendkim\r\nchown opendkim:root \/var\/spool\/postfix\/opendkim\r\n<\/pre>\n<p>Damit die Konfiguration wirksam wird, muss der Dienst einmal neugestartet werden:<\/p>\n<pre>service opendkim restart\r\n<\/pre>\n<p>Damit Postfix \u00fcber den Socket mit OpenDKIM kommunizieren kann, f\u00fcgt man den Benutzer Postfix der OpenDKIM Gruppe hinzu.<\/p>\n<pre>usermod -G opendkim postfix\r\n<\/pre>\n<p>Damit ist die erste Aufgabe f\u00fcr diesen Teil erledigt. Bevor wir OpenDKIM endg\u00fcltig mit Postfix verbinden, wenden wir uns einem anderen Schlachtfeld zu.<\/p>\n<h2 id=\"der_ewige_kampf_gegen_spam\">Der ewige Kampf gegen den Spam&#8230;<\/h2>\n<p>&#8230;beginnt an dieser Stelle mit der Installation des <a title=\"Wikipedia: Mailfilter\" href=\"http:\/\/de.wikipedia.org\/wiki\/Mailfilter\" target=\"_blank\">milters<\/a> und der Pakete, die ben\u00f6tigt werden, damit Spamassassin mit den DKIM Headers zusammenarbeitet.<\/p>\n<pre>sudo apt-get install spamass-milter pyzor razor libmail-dkim-perl\r\n<\/pre>\n<p>Es gibt mehrere Wege, SpamAssassin zu konfigurieren und zu nutzen. Der einfachste w\u00e4re alle Dienstfunktionalit\u00e4ten zu ignorieren und Postfix die Mails einfach an SpamAssassin weiterleiten zu lassen, bevor diese an Dovecot geleitet werden. Doch dieser Weg f\u00fchrt zur dunklen Seite der Macht.<\/p>\n<p>Ich m\u00f6chte, dass Postfix die E-Mails \u00fcber einen Unix-Socket an <code>spamd<\/code> zur \u00dcberpr\u00fcfung gibt. <code>spamd<\/code> l\u00e4uft im Hintergrund und wartet auf die Mails von Postfix. Dies ist schneller und ressourcenschonender. Denn es muss nicht f\u00fcr jede eintreffende E-Mail ein SpamAssassin Prozess gestartet werden.<\/p>\n<p>In der Standardkonfiguration legt <code>spamass-milter<\/code> f\u00fcr jedes Postfach eine eigene AntiSpam-Datenbank an. Ob man dies m\u00f6chte, h\u00e4ngt vom Einsatzzweck des jeweiligen Servers ab. Ich pers\u00f6nlich plane den Server f\u00fcr meine eigenen Domains und meine eigenen Postf\u00e4cher zu nutzen. Daher werde ich es mit einer globalen Konfiguration versuchen, die f\u00fcr alle Postf\u00e4cher gilt.<\/p>\n<h3 id=\"benutzerkonten_und_konfigurationsdateien\">Benutzerkonten und Konfigurationsdateien<\/h3>\n<p>Bevor die Betriebsbereitschaft hergestellt werden kann, muss noch ein System-Benutzer f\u00fcr den Dienst <code>spamd<\/code> erzeugt und der Benutzer <code>spamass-milter<\/code> der <code>spamd<\/code> Benutzergruppe hinzugef\u00fcgt werden.<\/p>\n<pre>addgroup --system spamd\r\nadduser --system --home \/var\/lib\/spamassassin --ingroup spamd spamd\r\nusermod -a -G spamd spamass-milter\r\n<\/pre>\n<p>Fertig, nun werden erstmal ein paar Konfigurationsdateien gehackt.<\/p>\n<p>Zu Beginn ist <em>\/etc\/default\/spamassassin<\/em> dran. Nach der Bearbeitung sollte die Datei wie folgt aussehen:<\/p>\n<pre>SAHOME=\"\/var\/lib\/spamassassin\"\r\nSAGLOBALCFGPATH=\"\/etc\/spamassassin\"\r\n \r\n# Change to one to enable spamd\r\nENABLED=1\r\n \r\n# Options\r\n# See man spamd for possible options. The -d option is automatically added.\r\nOPTIONS=\"-x --max-children 5 --helper-home-dir ${SAHOME} -u spamd -g spamd --siteconfigpath ${SAGLOBALCFGPATH} --socketpath=\/var\/spool\/postfix\/spamassassin\/spamd.sock --socketowner=spamd --socketgroup=spamd --socketmode=0660\"\r\n \r\n# Pid file\r\n# Where should spamd write its PID to file? If you use the -u or\r\n# --username option above, this needs to be writable by that user.\r\n# Otherwise, the init script will not be able to shut spamd down.\r\nPIDFILE=\"\/var\/run\/spamd.pid\"\r\n \r\n# Cronjob\r\n# Set to anything but 0 to enable the cron job to automatically update\r\n# spamassassin's rules on a nightly basis\r\nCRON=1\r\n<\/pre>\n<p>Die ersten beiden Zeilen enthalten Variablen, die das SpamAssassin Home-Verzeichnis und das Verzeichnis mit der globalen Konfiguration beinhalten. Als n\u00e4chstes wird der <code>spamd<\/code> Daemon aktiviert. OPTIONS enth\u00e4lt einen ganzen Blumenstrau\u00df an Parametern. Hier wird festgelegt, dass nur eine Konfigurationsdatei f\u00fcr alle Benutzer verwendet wird. Die UID und GID, unter denen SpamAssassin ausgef\u00fchrt werden soll, werden festgelegt. Der Pfad zur globalen Konfigurationsdatei wird angegeben, usw. usf. Am Ende wird noch das automatische Policyupdate aktiviert. F\u00fcr weitere Erl\u00e4uterungen dieser Datei verweise ich auf die Projektseite[2. <a title=\"Projektseite Spamassassin\" href=\"http:\/\/spamassassin.apache.org\/\" target=\"_blank\">Projektseite Apache SpamAssassin<\/a>], welche unter den Quellen verlinkt ist.<\/p>\n<p>Das Verzeichnis f\u00fcr den Socket wird manuell erstellt und die entsprechenden Benutzerrechte vergeben:<\/p>\n<pre>mkdir \/var\/spool\/postfix\/spamassassin\r\nchown spamd:root \/var\/spool\/postfix\/spamassassin\/\r\n<\/pre>\n<p>Speichern und schlie\u00dfen! Jetzt geht es mit <em>\/etc\/default\/spamass-milter<\/em> weiter. Diese Datei enth\u00e4lt nur eine einzige Zeile, die nach der Bearbeitung wie folgt aussehen sollte.<\/p>\n<pre>OPTIONS=\"-u spamass-milter -i 127.0.0.1 -m -I -- --socket=\/var\/spool\/postfix\/spamassassin\/spamd.sock\"\r\n<\/pre>\n<p>Die Option &#8222;-u&#8220; definiert, unter welchem Benutzerkontext der Milter ausgef\u00fchrt wird. &#8222;-i&#8220; gibt die Quell-IPs der Systeme an, deren Mails der Milter ignorieren soll. &#8222;-I&#8220; ignoriert E-Mails von authentifizierten SMTP-Sendern. &#8222;-m&#8220; h\u00e4lt SpamAssassin davon ab, sich zu sehr mit den Mail-Headern zu besch\u00e4ftigen. Der Rest der Zeile gibt an, wohin der Milter die Mails zum Scannen leiten soll. Hier wird der Socket angegeben, der im letzten Schritt erstellt wurde.<\/p>\n<p>Speichern, schlie\u00dfen, n\u00e4chster!<\/p>\n<p>An die Datei <em>\/etc\/spamassassin\/init.pre<\/em> werden die beiden folgenden Zeilen angef\u00fcgt:<\/p>\n<pre>## Add TextCat to assist enable language-based filtering\r\nloadplugin Mail::SpamAssassin::Plugin::TextCat\r\n<\/pre>\n<p>Die beiden Zeilen bewirken, dass das TextCat-Plugin geladen wird, welches wir in der folgenden Konfigurationsdatei verwenden.<\/p>\n<p>In der Datei <em>\/etc\/spamassassin\/local.cf<\/em> wird direkt unterhalb des ersten Kommentars der folgende Code eingef\u00fcgt:<\/p>\n<pre>## Force global Bayesian databases instead of per-user\r\nbayes_path \/var\/lib\/spamassassin\/.spamassassin\/bayes\r\nbayes_file_mode 0777\r\n \r\n## Ensure non-English and non-German e-mails are treated as spam\r\nok_languages en de\r\nok_locales en\r\n \r\n## Set Pyzor and Razor config file paths\r\nrazor_config \/etc\/razor\/razor-agent.conf\r\npyzor_options --homedir \/var\/lib\/spamassassin\/.pyzor\r\n<\/pre>\n<p>Zu Beginn wird festgelegt, wo die Datenbank f\u00fcr den Bayesian-Filter liegt.<\/p>\n<p>Die n\u00e4chsten beiden Optionen geben an, in welcher Sprache und welchem Zeichensatz eine E-Mail entsprechen muss, um nicht als Spam aussortiert zu werden. Die aktuelle Einstellung erlaubt E-Mails in englischer so wie deutscher Sprache und westlichem Zeichensatz. Eine vollst\u00e4ndige Liste der untest\u00fctzten Sprachen gibt es in der TextCat Dokumentation[4. <a title=\"Dokumentation TextCat Plugin\" href=\"https:\/\/spamassassin.apache.org\/full\/3.1.x\/doc\/Mail_SpamAssassin_Plugin_TextCat.html\" target=\"_blank\">Dokumentation TextCat Plugin<\/a>], die verf\u00fcgbaren Zeichens\u00e4tze sind in der SpamAssassin Dokumentation f\u00fcr Konfigurationsdateien[5. <a title=\"SpamAssassin Language Options\" href=\"https:\/\/spamassassin.apache.org\/full\/3.2.x\/doc\/Mail_SpamAssassin_Conf.html#language_options\" target=\"_blank\">SpamAssassin Language Options<\/a>] zu finden.<\/p>\n<p>Auf die letzten beiden Zeilen werde ich in K\u00fcrze noch eingehen.<\/p>\n<p>Wann immer man an den Konfigurationsdateien von SpamAssassin herumgemacht hat, ist es eine gute Idee, die Konfiguration mit folgendem Befehl auf Fehler zu \u00fcberpr\u00fcfen.<\/p>\n<pre>spamassassin --lint\r\n<\/pre>\n<p>Liefert das Kommando keine Ausgabe zur\u00fcck, ist alles in Ordnung.<\/p>\n<p>Zum Start werden einmal die aktuellen SpamAssassin-Regeln mit dem Kommando <code>sa-update<\/code> abgerufen. In Zukunft passiert dies automatisch.<\/p>\n<pre>sa-update\r\nchown -R spamd:spamd \/var\/lib\/spamassassin\r\n<\/pre>\n<p>Nun werden noch das Verzeichnis f\u00fcr den Socket angelegt, die Benutzerrechte korrigiert und die beiden Dienste neugestartet. Anschlie\u00dfend kann es schon zum n\u00e4chsten Schritt weitergehen.<\/p>\n<pre>chown spamd:spamd \/var\/lib\/spamassassin\/.spamassassin\r\nservice spamassassin restart\r\nservice spamass-milter restart\r\n<\/pre>\n<h3 id=\"razor2_und_pyzor\">Razor2 und Pyzor<\/h3>\n<p>Razor2 und Pyzor sind zwei Add-Ons f\u00fcr SpamAssassin. Sie erweitern die F\u00e4higkeit Spam auszusortieren, indem auf zwei AntiSpam-Datenbanken zur\u00fcckgegriffen wird, die st\u00e4ndig erweitert werden. Einmal eingerichtet, muss man sich nicht weiter um die beiden k\u00fcmmern.<\/p>\n<p>Zuerst werden die ben\u00f6tigten Verzeichnisse angelegt:<\/p>\n<pre>mkdir \/var\/lib\/spamassassin\/.razor\r\nmkdir \/var\/lib\/spamassassin\/.pyzor\r\n<\/pre>\n<p>Laut der Dokumentation[7. <a title=\"ApacheSpamAssassin - Using Pyzor\" href=\"https:\/\/wiki.apache.org\/spamassassin\/UsingPyzor\" target=\"_blank\">Using Pyzor<\/a>] braucht es nur ein Kommando, um Pyzor in Gefechtsbereitschaft zu versetzen.<\/p>\n<pre>pyzor --homedir \/var\/lib\/spamassassin\/.pyzor discover\r\n<\/pre>\n<p>Um Razor in Gefechtsbereitschaft zu versetzen, bedarf es nur weniger Kommandos mehr:<\/p>\n<pre>razor-admin -home=\/var\/lib\/spamassassin\/.razor -register\r\nrazor-admin -home=\/var\/lib\/spamassassin\/.razor -create\r\nrazor-admin -home=\/var\/lib\/spamassassin\/.razor -discover\r\n<\/pre>\n<p>Der Datei <em>\/var\/lib\/spamassassin\/.razor\/razor-agent.conf<\/em> ist folgende Zeile hinzuzuf\u00fcgen:<\/p>\n<pre>razorhome = \/var\/lib\/spamassassin\/.razor\r\n<\/pre>\n<p>Das wars&#8230;fast&#8230;noch zwei Kommandos und SpamAssassin ist klar zum Gefecht.<\/p>\n<pre>chown -R spamd:spamd \/var\/lib\/spamassassin\r\nservice spamassassin restart\r\nservice spamass-milter restart\r\n<\/pre>\n<h3 id=\"training_fuer_spamassassin\">Training f\u00fcr SpamAssassin<\/h3>\n<p>Die Filter von SpamAssassin lernen selbstst\u00e4ndig. Doch kann man den Lernprozess durch aktives Training unterst\u00fctzen. Dazu l\u00e4sst man eine gewisse Menge an E-Mails durch das Hilfsprogramm <code>sa-learn<\/code> analysieren.<\/p>\n<p>Hat man z.B. nur solche E-Mails im Posteingang, bei denen es sich ganz sicher nicht um Spam handelt, kann man SpamAssassin wie folgt darauf trainieren, dass es sich dabei nicht um Spam handelt:<\/p>\n<pre>sa-learn --ham \/path\/to\/your\/inbox\/on\/the\/server --progress\r\n<\/pre>\n<p>Genau so gut funktioniert das andersherum. Hat man einen Ordner, der ausschlie\u00dflich Spam-Mails enth\u00e4lt, kann man den Filter wie folgt trainieren:<\/p>\n<pre>sa-learn --spam \/path\/to\/directory\/of\/spam --progress\r\n<\/pre>\n<p>Der Trainingsprozess ist am effektivsten, wenn man ca. je 1.000 Nachrichten Spam und echte E-Mail hat. Der Filter wird sogar erst dann aktiv genutzt, wenn sich mindestens 200 Spam-Mails in der Datenbank befinden. Das Training kann man beschleunigen, indem man Mails aus seinem Google-Postfach mit Hilfe von Google exportiert, in ein Verzeichnis auf dem Server entpackt und das Trainingsprogramm auf dieses Verzeichnis anwendet.[8. <a title=\"Official Gmail Blog - Download a copy of your Gmail and Google Calendar data\" href=\"http:\/\/gmailblog.blogspot.de\/2013\/12\/download-copy-of-your-gmail-and-google.html\" target=\"_blank\">Download a copy of your Gmail and Google Calendar data<\/a>] F\u00fchrt man das Lernprogramm als root aus, muss man anschlie\u00dfend sicherstellen, dass alle Dateien in <em>\/var\/lib\/spamassassin\/.spamassassin<\/em> dem Benutzer spamd geh\u00f6ren.<\/p>\n<p>Falls man SpamAssassin versehentlich mal falsch angelernt hat, kann man dies auch wieder r\u00fcckg\u00e4ngig machen, in dem man das oben genannte Kommando mit der Option &#8211;forget auf die betroffene Menge Nachrichten anwendet.<\/p>\n<h2 id=\"clamav\">ClamAV<\/h2>\n<p>Mit ClamAV wird ein Virenscanner in Stellung gebracht, der E-Mails und Anh\u00e4nge auf Sch\u00e4dlingsbefall hin untersucht. Damit ClamAV die die E-Mail-Anh\u00e4nge auch auf Virusbefall untersuchen kann, werden neben dem Milter auch noch eine ganze Reihe an Dekomprimierungsprogrammen installiert.<\/p>\n<pre>apt-get install clamav-milter arj bzip2 cabextract cpio file gzip lha lzop nomarch p7zip pax rar rpm unrar unzip zip zoo\r\n<\/pre>\n<p>Nach der Installation sind \u00c4nderungen an der Konfigurationsdatei <em>\/etc\/clamav\/clamav-milter.conf<\/em> vorzunehmen. Die folgenden Zeilen sind auszukommentieren und durch die Zeilen im zweiten Codeblock zu ersetzen.<\/p>\n<pre>MilterSocket \/var\/run\/clamav\/clamav-milter.ctl\r\n...\r\nOnInfected Quarantine \r\n...\r\nLogFacility LOG_LOCAL6\r\n<\/pre>\n<pre>MilterSocket \/var\/spool\/postfix\/clamav\/clamav-milter.ctl\r\n...\r\nOnInfected Accept \r\n...\r\nLogFacility LOG_MAIL\r\n<\/pre>\n<p>Die erste Option gibt an, wo der Socket erstellt wird, der auf E-Mails von Postfix wartet. Da wie bei allen anderen Miltern auch der Socket innerhalb des Postfix chroot jail liegen muss, legt man das Verzeichnis f\u00fcr den Socket wie folgt an und setzt die Benutzerrechte entsprechend.<\/p>\n<pre>mkdir \/var\/spool\/postfix\/clamav\r\nchown clamav:root \/var\/spool\/postfix\/clamav\/\r\n<\/pre>\n<p>Die n\u00e4chste Option erlaubt es, Nachrichten mit infiziertem Inhalt weiterzuleiten, statt sie in Postfix Warteschlange zu belassen. Denn um diese soll sich sp\u00e4ter Sieve k\u00fcmmern. Zum Schluss wird ClamAV angewiesen, das Log von Postfix zu verwenden, um bei Problemen nur an einer Stelle suchen zu m\u00fcssen.<\/p>\n<p>Nun wird noch die Zeile<\/p>\n<pre>SOCKET_RWGROUP=postfix\r\n<\/pre>\n<p>in der Datei <em>\/etc\/default\/clamav-milter<\/em> einkommentiert. Jetzt ist es Zeit f\u00fcr einen Neustart.<\/p>\n<pre>service clamav-daemon restart\r\nservice clamav-milter restart\r\n<\/pre>\n<p>ClamAV beinhaltet <code>freshclam,<\/code> um automatisch die Virusdefinitionen zu aktualisieren. Zum Abschluss sollte man sich vergewissern, dass der Updatemechanismus korrekt funktioniert. In der Logdatei <em>\/var\/log\/clamav\/freshclam.log<\/em> sollte in etwa folgende Ausgabe zu finden sein:<\/p>\n<pre>--------------------------------------\r\nfreshclam daemon 0.97.8 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)\r\nClamAV update process started at Sun Mar 16 18:32:49 2014\r\nWARNING: Your ClamAV installation is OUTDATED!\r\nWARNING: Local version: 0.97.8 Recommended version: 0.98.1\r\nDON'T PANIC! Read http:\/\/www.clamav.net\/support\/faq\r\nDownloading main.cvd [100%]\r\nmain.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)\r\nDownloading daily.cvd [100%]\r\ndaily.cvd updated (version: 18609, sigs: 824724, f-level: 63, builder: neo)\r\nDownloading bytecode.cvd [100%]\r\nbytecode.cvd updated (version: 236, sigs: 43, f-level: 63, builder: dgoddard)\r\nDatabase updated (3248992 signatures) from db.local.clamav.net (IP: 207.57.106.31)\r\n--------------------------------------\r\n<\/pre>\n<p>Nach der Konfiguration der ganzen Milter ist es jetzt noch n\u00f6tig, diese in Postfix zu aktivieren. Dazu sind folgende Zeilen in der Datei <em>\/etc\/postfix\/main.cf<\/em> einzukommentieren und die Konfiguration neu zu laden.<\/p>\n<pre>milter_default_action = accept\r\nmilter_connect_macros = j {daemon_name} v {if_name} _\r\nnon_smtpd_milters = $smtpd_milters\r\nsmtpd_milters = unix:\/spamass\/spamass.sock unix:\/clamav\/clamav-milter.ctl unix:\/opendkim\/opendkim.sock\r\n<\/pre>\n<pre>service postfix reload\r\n<\/pre>\n<h2 id=\"dns_konfiguration\">DNS Konfiguration<\/h2>\n<p>Ohne DNS funktioniert kein E-Mailsystem. Damit der Mailserver erreichbar ist, muss im DNS-Manager des eigenen Domainproviders ein MX-Record angelegt werden, welcher auf die \u00f6ffentliche IP-Adresse oder einen A-Record des eigenen Mailservers zeigt.<\/p>\n<p>Wie genau man einen DNS-Eintrag f\u00fcr die eigene Domain erstellt, ist von Anbieter zu Anbieter unterschiedlich. Zieht dazu am besten die Anleitung bzw. Hilfe eures Anbieters zu Rate. Ich werde am Ende dieses Abschnitts beispielhaft noch ein Bild meines DNS-Providers einf\u00fcgen.<\/p>\n<p>Als N\u00e4chstes wird noch ein TXT-Eintrag ben\u00f6tigt, welcher den \u00f6ffentlichen DKIM Schl\u00fcssel beinhaltet. Dazu kann der Inhalt der Datei \/etc\/opendkim\/mail.txt verwendet werden. Bitte zieht im Zweifel auch hierbei die Hilfe eures DNS-Anbieters zu Rate. Dort sollte beschrieben werden, wie ihr diesen Eintrag am besten erstellt.<\/p>\n<p>Es folgt noch der Eintrag f\u00fcr die Funktionalit\u00e4t des <a title=\"Wikipedia: Sender Policy Framework\" href=\"https:\/\/de.wikipedia.org\/wiki\/Sender_Policy_Framework\" target=\"_blank\">SPF<\/a>.<\/p>\n<div id=\"attachment_904\" style=\"width: 737px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-904\" class=\"size-full wp-image-904\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns.png\" alt=\"dns configuration\" width=\"727\" height=\"121\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns.png 727w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-300x50.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-624x104.png 624w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/a><p id=\"caption-attachment-904\" class=\"wp-caption-text\">Beispielhafte DNS-Konfiguration im Interface von Goneo.<\/p><\/div>\n<p>Im obigen Bild sind insgesamt 5 DNS Eintr\u00e4ge zu sehen. Bei den ersten beiden Eintr\u00e4gen handelt es sich um einen A-Record f\u00fcr IPv4 und einen AAAA-Record f\u00fcr IPv6. Mit diesen Eintr\u00e4gen wird den IP-Adressen ein Name zugeordnet. Diese beiden Eintr\u00e4ge sind nicht zwingend notwendig, man kann sich einen Namen jedoch leichter merken als eine IP-Adresse. In der dritten Zeile sieht man den MX-Record. Dieser gibt Auskunft dar\u00fcber, welcher Server f\u00fcr die E-Mails einer Domain zust\u00e4ndig ist. Existiert f\u00fcr die Domain kein A-Record, muss hier eine IP-Adresse angegeben werden. Andernfalls kann man, wie in diesem Beispiel, auch einen Namen verwenden.<\/p>\n<p>In Zeile 4 steht der TXT-Eintrag f\u00fcr das Sender Policy Framework (SPF)[10. <a title=\"Wikipedia: Sender Policy Framework\" href=\"https:\/\/de.wikipedia.org\/wiki\/Sender_Policy_Framework\" target=\"_blank\">Sender Policy Framework (SPF) bei Wikipedia<\/a>] Hier wird festgelegt, welche Server E-Mails f\u00fcr die genannte Domain versenden d\u00fcrfen.<\/p>\n<p>Und in der letzten Tabellenzeile steht der Eintrag, welcher den \u00f6ffentlichen DKIM-Schl\u00fcssel enth\u00e4lt. Der Name des Eintrags wird dabei nach dem Muster &lt;selector&gt;<code>._domainkey.&lt;domainname.tld&gt;<\/code> gebildet. Als Wert wird der \u00f6ffentliche Schl\u00fcssel verwendet. Damit kann ein fremder Mailserver die Signatur der E-Mails \u00fcberpr\u00fcfen, die von dem eigenen Mailserver versendet werden.<\/p>\n<p>Ein sehr wichtiger Schritt in der DNS Konfiguration fehlt jedoch noch. Es sollte unbedingt noch ein passender PTR-Record konfiguriert werden, welcher ein Reverse-Lookup der IP-Adresse des Servers erlaubt. Fast alle E-Mail-Server versuchen, mit einem Reverse-Lookup die IP-Adresse eines Servers in einen DNS Namen aufzul\u00f6sen. Entspricht der aufgel\u00f6ste Name nicht dem Namen aus dem Forward-Lookup, werden die meisten Mailserver die eingehende E-Mail abweisen. Dies ist eine \u00fcbliche Vorgehensweise, um den Versand von Spam einzud\u00e4mmen. Denn Spam wird oft von gekaperten Maschinen versendet, oder von Servern, wo sich der Spammer nicht die M\u00fche macht, den PTR korrekt zu konfigurieren.<\/p>\n<div id=\"attachment_906\" style=\"width: 788px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-reverse.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-906\" class=\"size-full wp-image-906\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-reverse.png\" alt=\"dns-reverse\" width=\"778\" height=\"240\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-reverse.png 778w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-reverse-300x93.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/dns-reverse-624x192.png 624w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><p id=\"caption-attachment-906\" class=\"wp-caption-text\">PTR-Eintr\u00e4ge f\u00fcr IPv4 und IPv6<\/p><\/div>\n<p>Der Screenshot zeigt einen Ausschnitt aus dem DNS-Konfigurationstool von Strato. Es zeigt zwei PTR-Eintr\u00e4ge. Jeweils einen f\u00fcr IPv4 und einen f\u00fcr IPv6.<\/p>\n<p>Konsultiert die Hilfe oder den Support eures Anbieters, wenn sich das Men\u00fc mit den entsprechenden Konfigurationsm\u00f6glichkeiten nicht auf Anhieb finden l\u00e4sst.<\/p>\n<p>Angeblich gibt es auch noch Hosting-Provider, die ihren Kunden das Recht vorenthalten, einen PTR-Eintrag zu setzen. In diesem Fall kann man sich entweder damit abfinden, dass es mit dem eigenen E-Mailserver nichts mehr wird, oder man wechselt den Hosting-Provider.<\/p>\n<h2 id=\"mit_email_filtern_gegen_spam\">Mit E-Mail Filtern gegen Spam<\/h2>\n<p>Wir sind nun im letzten Abschnitt von Teil 3 dieser Artikelreihe angelangt. Zum Abschluss kommt die Konfiguration von Sieve, welcher zwei Dinge erledigen soll:<\/p>\n<ol>\n<li>E-Mails filtern, die von SpamAssassin als Spam markiert wurden.<\/li>\n<li>E-Mails filtern, die von ClamAV als virusinfiziert markiert wurden.<\/li>\n<\/ol>\n<p>Sieve Filter finden sich an mehreren Stellen. Jeder virtuelle Benutzer kann eigene Filter im virtuellen E-Mail Home-Verzeichnis haben (das ist <em>\/var\/mail\/vmail\/domainname\/Benutzername\/sieve<\/em>). Global definierte Filter befinden sich in <em>\/var\/mail\/vmail\/sieve-before<\/em> und <em>\/var\/mail\/vmail\/sive-after<\/em>. Die Filterregeln in <em>sieve-before<\/em> werden vor den benutzerdefinierten Filtern angewendet, die in <em>sieve-after<\/em> nach diesen.<\/p>\n<p>Ich erstelle einen ersten Filter im Verzeichnis <em>\/var\/mail\/vmail\/sieve-before<\/em>, indem ich die Datei <em>masterfilter.sieve<\/em> erstelle und mit folgendem Inhalt f\u00fclle:<\/p>\n<pre># cat masterfilter.sieve \r\nrequire [\"envelope\", \"fileinto\", \"imap4flags\", \"regex\"];\r\n \r\n# I don't even want to see spam higher than level 10\r\nif header :contains \"X-Spam-Level\" \"**********\" {\r\n    discard;\r\n    stop;\r\n}\r\n \r\n# Twitter? Die in a fire.\r\nif anyof (envelope \"From\" \"bounce@tweet.twitter.com\",\r\n          envelope :contains \"From\" \"@bounce.twitter.com\") {\r\n    discard;\r\n    stop;\r\n}\r\n \r\n# Trash messages with improperly formed message IDs\r\nif not header :regex \"message-id\" \".*@.*\\\\.\" {\r\n    discard;\r\n    stop;\r\n}\r\n \r\n# File low-level spam in spam bucket, and viruses in Infected folder\r\nif anyof (header :contains \"X-Spam-Level\" \"*****\",\r\n          header :contains \"X-Virus-Status\" \"Infected\") {\r\n    if header :contains \"X-Spam-Level\" \"*****\" {\r\n        fileinto \"Junk\";\r\n        setflag \"\\\\Seen\";\r\n    }\r\n    else {\r\n        fileinto \"Infected\";\r\n    }\r\n}\r\n<\/pre>\n<p>Sieve wendet die Filter sequentiell von oben nach unten an. Es spielt daher eine gro\u00dfe Rolle, an welcher Stelle eine Filterregel erstellt wird.<\/p>\n<p>Der erste Filter wertet das Spam-Scoring aus, welches von SpamAssassin durchgef\u00fchrt und in den Header der E-Mails eingef\u00fcgt wird. Dazu pr\u00fcft der Filter das Feld &#8222;X-Spam-Level&#8220; im Header einer E-Mail. Finden sich hier wenigstens zehn &#8222;*&#8220;, l\u00e4sst Sieve die E-Mail verschwinden. Die Aktion wird in <em>\/var\/log\/mail.log<\/em> protokolliert, doch nirgendwo sonst wird man etwas von dieser E-Mail zu Gesicht bekommen. Die Option <code>stop<\/code> sorgt daf\u00fcr, dass die \u00fcbrigen Mailfilter nicht mehr ausgewertet werden.<\/p>\n<p>Der n\u00e4chste Filter sortiert Twitter-Werbung aus. E-Mails zum Zur\u00fccksetzen des Passworts werden von diesem Filter nicht erfasst, da sie von einer anderen Absenderadresse kommen.<\/p>\n<p>Darunter werden E-Mails abgefangen, die \u00fcber keine g\u00fcltige Message-ID verf\u00fcgen. Dieser Filter nutzt regul\u00e4re Ausdr\u00fccke. In Sieve k\u00f6nnen regul\u00e4re Ausdr\u00fccke verwendet werden, die dem <a title=\"IETF RFC 5228\" href=\"http:\/\/www.ietf.org\/rfc\/rfc5228.txt\" target=\"_blank\">RFC 5228<\/a> entsprechen.[11. <a title=\"IETF RFC 5228\" href=\"http:\/\/www.ietf.org\/rfc\/rfc5228.txt\" target=\"_blank\">IETF RFC 5228<\/a>]<\/p>\n<p>Der letzte Filter funktioniert wie folgt. Er pr\u00fcft, ob ein E-Mail Header entweder ein X-Spam-Level von 5 oder die Markierung &#8222;Infected&#8220; enth\u00e4lt und verschiebt sie in den &#8222;Junk&#8220;-Ordner. E-Mails, die sowohl als Spam klassifiziert sind, als auch einen Virus enthalten, werden in den &#8222;Junk&#8220;-Ordner verschoben. Nur Mails, die nur einen Virus enthalten, aber nicht als Spam markiert sind, landen im Ordner &#8222;Infected&#8220;.<\/p>\n<p>Sieve Filter sind extrem komplex. Es w\u00fcrde den Umfang dieser Artikelreihe sprengen, wenn ich versuche, sie allumfassend zu behandeln. Zum tieferen Verst\u00e4ndnis empfehle ich die Quellen <a title=\"Pigeonhole Sieve examples\" href=\"http:\/\/wiki2.dovecot.org\/Pigeonhole\/Sieve\/Examples\" target=\"_blank\">12<\/a>[12. <a title=\"Pigeonhole Sieve examples\" href=\"http:\/\/wiki2.dovecot.org\/Pigeonhole\/Sieve\/Examples\" target=\"_blank\">Pigeonhole Sieve examples<\/a>], <a title=\"Sieve example rules von Tiger technologies\" href=\"http:\/\/support.tigertech.net\/sieve#sieve-example-rules-jmp\" target=\"_blank\">13<\/a>[13. <a title=\"Sieve example rules von Tiger technologies\" href=\"http:\/\/support.tigertech.net\/sieve#sieve-example-rules-jmp\" target=\"_blank\">Sieve example rules von Tiger technologies<\/a>] und <a title=\"Sieve.info\" href=\"http:\/\/sieve.info\/\" target=\"_blank\">14<\/a>[14. <a title=\"Sieve.info\" href=\"http:\/\/sieve.info\/\" target=\"_blank\">Sieve.info<\/a>].<\/p>\n<p>Die Datei <em>masterfile.sieve<\/em> wandeln wir in eine Bin\u00e4rdatei um. Dabei wird auch gleich eine Syntax\u00fcberpr\u00fcfung durchgef\u00fchrt.<\/p>\n<pre>sievec masterfilter.sieve\r\n<\/pre>\n<p>Wird dieses Kommando als <code>root<\/code> ausgef\u00fchrt, m\u00fcssen die Besitzrechte wieder korrigiert werden.<\/p>\n<pre>chown vmail:vmail *.svbin\r\n<\/pre>\n<p>In Teil 4 dieser Artikelreihe werde ich noch darauf eingehen, wie man Sieve-Filter \u00fcber das Webinterface von Roundcube erstellen kann, ohne sich in die Tiefen der RegEx-Syntax einarbeiten zu m\u00fcssen.<\/p>\n<h2 id=\"einrichtung_eines_email_clients_mua\">Einrichtung eines E-Mail Clients (MUA)<\/h2>\n<p>Mit dem Ende dieses Artikels ist der Webserver bereits voll einsatzbereit und kann mit einem Mail User Agent genutzt werden. Dies ist ein guter Zeitpunkt, um ein Konto z.B. in Mozilla Thunderbird[15. <a title=\"Ubuntuusers Wiki: Thunderbird Einrichtung\" href=\"http:\/\/wiki.ubuntuusers.de\/Thunderbird\/Einrichtung\" target=\"_blank\">Ubuntuusers Wiki: Thunderbird Einrichtung<\/a>] einzurichten, um die Konfiguration zu testen. Die folgenden Screenshots zeigen exemplarisch, wie ein Konto in Thunderbird hinzugef\u00fcgt wird.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 25%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-885 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/thunderbird_konto_einrichten\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/Thunderbird_Konto_einrichten-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"thunderbird-account-creation\" aria-describedby=\"gallery-1-912\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-912'>\n\t\t\t\tDialog zur Einrichtung eines E-Mail Kontos\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/thunderbird_konto_einrichten2\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/Thunderbird_Konto_einrichten2-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"thunderbird-create-account\" aria-describedby=\"gallery-1-913\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-913'>\n\t\t\t\tEinstellungen f\u00fcr Posteingangs- und Postausgangsserver\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/thunderbird_imap_ordner_abonnieren\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/Thunderbird_IMAP_Ordner_abonnieren-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-911\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-911'>\n\t\t\t\tThunderbird IMAP Ordner abonnieren\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/thunderbird_abonnieren\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2014\/12\/Thunderbird_Abonnieren-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-910\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-910'>\n\t\t\t\tIMAP Ordner abonnieren\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Wer an dieser Stelle bereits die Nase voll hat von den doch recht langen Artikeln, kann sich bereits entspannt zur\u00fccklehnen. Denn er betreibt einen f\u00fcr das Internet gewappneten MTA, MDA und MUA mit Anti-Spam und Anti-Virus Modulen.<\/p>\n<p>Ich werde in Teil 4 noch weitergehen und Webmail einrichten, um die konfigurierten Postf\u00e4cher auch \u00fcber einen Webbrowser nutzen zu k\u00f6nnen. Teil 4 wird sich au\u00dferdem mit der M\u00f6glichkeit besch\u00e4ftigen, eine zertifikatsbasierte Anmeldung zu konfigurieren.<\/p>\n<p>Wenn ihr ebenfalls noch weitermachen m\u00f6chtet, sehen wir uns in einer Woche. ;-)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es ist Zeit f\u00fcr Teil 3 dieser kleinen Artikelreihe. In diesem Teil wird der Server einsatzbereit gemacht. Dazu sind im Wesentlichen die folgenden sechs Aufgaben zu erledigen. Installation von OpenDKIM[1. OpenDKIM Homepage] zur Nutzung von DomainKeys Identified Mail. Damit k\u00f6nnen Empf\u00e4nger den Absender einer E-Mail \u00fcberpr\u00fcfen. Installation von SpamAssassin[2. Projektseite Apache SpamAssassin] f\u00fcr den Kampf<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/der-eigene-mailserver-teil-3\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[178,8,290,75,58,305,291,292,34,35,37,289,60],"class_list":["post-885","post","type-post","status-publish","format-standard","hentry","category-linux","tag-antispam","tag-antivirus","tag-clamav","tag-e-mail","tag-linux","tag-planet","tag-pyzor","tag-razor2","tag-security","tag-server","tag-sicherheit","tag-spamassassin","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=885"}],"version-history":[{"count":26,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/885\/revisions"}],"predecessor-version":[{"id":1021,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/885\/revisions\/1021"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}