seeseekey.net - Invictus Deus Ex Machina

Vor einigen Tagen wollte ich auf die Schnelle überprüfen ob ein bestimmter Mailserver auf einer Spamblacklist steht. Genutzt habe ich dabei den Webdienst MXToolBox. Bei der MXToolBox handelt es sich um einen Webdienst, welcher unterschiedliche Tools für die Überprüfung und Diagnose von Mailservern bereitstellt.

mxtoolbox.com

mxtoolbox.com

Das fängt bei Werkzeugen für die Blacklist-Überprüfung an und erstreckt sich über Tests der Mailserverkonfiguration bis zur Überprüfung der DNS auf entsprechende Probleme. Der Dienst – welcher unter mxtoolbox.com zu finden ist – kann dabei frei genutzt werden. Für erweiterte Funktionen wie die regelmäßige Blacklistüberprüfung wird ein (je nach Anforderungen; kostenpflichtiger) Account benötigt.

Wenn man einen Server mit einem Mail Transfer Agent wie Postfix betreibt, kann man von diesem auch Mails versenden. Auf der Konsole ist dies dabei mit dem Kommando mail möglich, welches sich im Paket mailutils befindet. Mit dem Kommando kann mittels:

echo "Nachricht" | mail -s 'Betreff' mail@example.com

eine Mail versandt werden. Natürlich können auch lokale Konten bespielt werden:

echo "Nachricht" | mail -s 'Betreff' root

Damit wird in diesem Fall dem Nutzer root eine Mail gesendet.

Vor einigen Tagen ist mir ein Mailserver (bestehend aus Postfix und Dovecot) begegnet, welcher in der mail.err regelmäßig folgende Ausgabe wiederholte:

Apr 2 13:16:35 service dovecot: lda(root): Error: chdir(/root/) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +x perm: /root, dir owned by 0:0 mode=0700)
Apr 2 13:16:35 service dovecot: lda(root): Error: chdir(/root) failed: Permission denied
Apr 2 13:16:35 service dovecot: lda(root): Error: user root: Initialization failed: Namespace '': stat(/root/Maildir) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +x perm: /root, dir owned by 0:0 mode=0700)
Apr 2 13:16:35 service dovecot: lda(root): Fatal: Invalid user settings. Refer to server log for more information.

Der Dovecot-Service versucht auf einen Maildir-Ordner im Nutzerverzeichnis des Nutzers root zuzugreifen, was allerdings nicht gelingt. Einfach lösen lässt sich dieses Problem in dem man einen Alias für die Mailzustellung zum Nutzer root anlegt. Dazu wird im ersten Schritt die Datei /etc/aliases bearbeitet. In dieser Datei kann der entsprechende Alias eingetragen werden:

root: webmaster@example.com

Nachdem die Datei gespeichert wurde, muss die Datei in ihre binäre Form überführt werden und die entsprechenden Services neugestartet werden:

newaliases
service dovecot restart
service postfix restart

Damit werden die Mails von root im entsprechenden Postfach hinterlegt und die Fehlermeldung gehört der Vergangenheit an.

Für das Versenden von Newslettern gibt es spezialisierte Anwendungen. Möchte man kleinere Newsletter verschicken, kann man dies auch mit der freien Software Mozilla Thunderbird und dem AddOn Mail Merge bewerkstelligen.

Der Mail Merge Dialog

Der Mail Merge Dialog

Nach der Installation kann mit der Erzeugung eines Newsletters begonnen werden. Dazu wird im ersten Schritt eine neue Nachricht angelegt. Neben dem Text sollten die Empfänger in das An-Feld geschrieben werden. Wenn der Newsletter fertig ist, wählt man im Verfassen-Fenster den Menüpunkt Datei -> Mail Merge aus. Nach der Bestätigung des Dialoges, trennt Mail Merge die ursprüngliche Mail in die Empfängermails auf und packt sie in den Postausgang. Aus diesem heraus können die Mails anschließend versandt werden.

Wir bekommen täglich immer mehr Mails – und natürlich ist jede Mail „wichtig“ und benötigt eine Antwort. So setzen wir uns an den Rechner und fangen an.

Hallo,

wie geht es dir?

Bezüglich des Problemes …

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Grüße,

Max Mustermann

Und wieder haben wir eine Menge kostbare Lebenszeit vergeudet. Doch die Lösung hört auf den Namen „Very Short Reply Expected“ kurz VSRE. Wenn wir dieses Kürzel mit in den Betreff packen, teilen wir dem Empfänger mit das wir eine kurze Antwort erwarten und er sich alle Grußformeln und ähnliches sparen darf. Dank VSRE können wir mit „Ja“, „Nein“, „Mehr Infos bitte“ antworten, ohne das der Gegenüber es uns übel nimmt. Die Webseite vsre.info klärt dabei über die VSRE-Regeln auf – nun benötigen wir nur noch mehr Nutzer derselben.

Unter Umständen möchte man seine eigene Blacklist direkt auf dem Mailserver führen. Für diesen Zweck gibt es unter Postfix die Einstellung „check_sender_access“. Dazu bearbeitet man die Datei „/etc/postfix/main.cf“ mittels des gewünschten Editors:

nano /etc/postfix/main.cf

In der Abteilung „smtpd_recipient_restrictions“ wird der Eintrag

check_sender_access hash:/etc/postfix/sender_access

ergänzt. In die neu anzulegende Datei „sender_access“ werden nun Einträge nach folgendem Schema definiert.

webmaster@example.org REJECT
spam@example.org REJECT
spam@example.com REJECT

Mittels „postmap“ wird anschließend die binäre Repräsentation erzeugt und mittels „reload“ die Konfiguration neu geladen.

postmap /etc/postfix/sender_access
service postfix reload

Damit werden Mails von den definierten Adressen immer abgewiesen.

Manchmal möchte aus einer Desktopanwendung heraus eine Mail verschicken. Das ist insofern problematisch, da man die Zugangsdaten für einen Mailaccount nicht in einer Anwendung hinterlegen sollte. Aus Webanwendungen heraus ist das Senden von Mails dagegen eine einfache Sache. Also was liegt näher als diesen Vorteil für das Senden von Mails aus Desktopanwendungen heraus zu nutzen.

<?php
    $reciever=$_POST["reciever"];
    $allowedRecieverDomain="example.org";
    $subject=$_POST["subject"];
    $text=$_POST["message"];

    //Sender
    $senderName="Mailer";
    $sender="mailer@example.org";

    //Additional challenge
    $challenge="abc123";
    if($challenge!=$_POST["challenge"]) return;

    //Check reciever
    $atCount=substr_count($reciever, "@");
    if($atCount>1) return;

    if(!(strpos($reciever, "@" . $allowedRecieverDomain)===FALSE))
    {
        mail($reciever, $subject . " - (" . date("d.m.y - H:m:s") . ")", $text, "From: $senderName <$sender>");
    }
?>

Ein kleines PHP Skript mit dem Namen „mailer.php“ sorgt dafür das die Mail bzw. der Text der Mail in Empfang genommen wird. Anschließend wird nachgeschaut ob die Mail an einen validen Sender adressiert ist. In diesem Beispiel werden nur Mails an @example.org weitergeleitet. Schließlich möchte man keine Spamschleuder betreiben. Nun müssen die Parameter in der Anwendung noch per POST-Request übergeben werden. Unter C# könnte das ganze so aussehen:

System.Net.ServicePointManager.Expect100Continue=false;

string url="http://example.org/mailer.php";

using(var wb=new WebClient())
{
    var data=new NameValueCollection();
    data["sendername"]="Mailer";
    data["sender"]="mailer@example.org";
    data["reciever"]="developer@example.org";
    data["subject"]="Mail from Application";
    data["message"]="Message";

    var response=wb.UploadValues(url, "POST", data);
}

Der Quellcode ist dabei auf GitHub zu finden und steht unter der AGPL.

Mails verschlüsselt mit GnuPG zu verschicken, ist unter den Desktop-Betriebssystemen, wie Windows, Linux oder Mac OS X kein Problem. Schwieriger wird es unter Mobilsystemen. Für Android gibt es da eine Reihe von Lösungen. Bei iOS sieht das Ganze ziemlich mau aus. Das offizielle Mailprogramm, verfügt leider über keine Möglichkeiten es über Schnittstellen zu erweitern. Als einzige brauchbare App für das Verschlüsseln von Mails ist iPGMail zu nennen.

iPGMail
Preis: 2,29 €

Mangels möglicher Integration in das Mailprogramm müssen die Texte mittels Copy & Paste zwischen den beiden Apps ausgetauscht werden. Das ist natürlich nicht bequem, so das zu hoffen steht, das es hier in Zukunft eine elegantere Methode gibt. Die offizielle Seite ist unter http://ipgmail.com/ zu finden.

Vor einiger Zeit beschrieb ich wie man einen Mailserver unter Ubuntu mittels Postfix und Dovecot aufsetzt. Der dort installierte Server ist, in der Lage Mails zu senden und zu empfangen. Allerdings enthält er keinerlei Maßnahmen zum Schutz vor unerwünschten Mails. An dieser Stelle setzt Postgrey, eine Greylisting Implementierung für Postfix, an. Beim Greylisting werden Mails von einem unbekannten Sender erst einmal mit einem temporären Fehler beantwortet. RFC konforme Mailserver senden die Mail nach einer Verzögerung nochmal. Beim Spamversendern ist dies meist nicht der Fall, womit der Spam nicht im System auftaucht. Die Installation ist dabei relativ einfach:

apt-get install postgrey

Nach der Installation muss die „/etc/postfix/main.cf“ Datei angepasst werden. Der Zeile „smtpd_recipient_restrictions“ wird dabei der Wert „check_policy_service inet:127.0.0.1:10023“ hinzugefügt. Nachdem der Service mittels:

service postfix restart

neugestartet wurde, ist das Greylisting aktiv. In der Logdatei „/var/log/mail.log“ findet man, sobald man eine Mail von einem unbekanntem Sender bekommt folgende Zeile:

Oct 10 10:32:39 service postfix/smtpd[22287]: NOQUEUE: reject: RCPT from mail.example.org[178.19.71.5]: 450 4.2.0 <mailinglists@example.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example.com.html; from=<mail.example.org> to=<mailinglists@example.com> proto=ESMTP helo=<mail.example.org>

Wenn die Mail erneut empfangen wird und die Greylistingzeit vorbei ist, wird Postgrey die Mail annehmen. Möchte man die Greylistingzeit ändern, so muss die Datei „/etc/default/postgrey“ bearbeitet werden. Für eine Verzögerung von 60 Sekunden könnte das ganze dann wie folgt aussehen:

POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=60"

Natürlich muss der Service für diese Änderung neugestartet werden.

Unter Umständen kann es vorkommen, das man sein WordPress auf einem Server betreibt, welcher keine PHP „mail()“ Funktion unterstützt. In diesem Fall sollten die Mails per SMTP versendet werden. Möglich wird dies mit dem Plugin „Easy WP SMTP„. Damit werden die Mails nicht mehr über die PHP-Funktion, sondern über einen SMTP Account versendet.

Die Einstellungen des Plugins Easy WP SMTP

Die Einstellungen des Plugins Easy WP SMTP

Bei der Konfiguration des Plugins werden SSL und TLS unterstützt, so das hier die Zugangsdaten nicht im Klartext durch das Netz gesendet werden.