E-Mails und das Spam-Problem

Die zunehmende Belästigung durch Spam nervt mich ja schon seit langer Zeit. Mittlerweile habe ich meinen E-Mail-Server bzw. meine E-Mail-Accounts halbwegs gegen Spam geschützt. Zwar laufen wohl noch Spams in hoher 2-stelliger Anzahl pro Tag ein, aber die meisten werden geblockt bzw. direkt gelöscht, ohne dass ich das mitbekomme. Und von dem Rest wird die größte Anzahl automatisch in den Spam-Ordner verschoben.

Aber jetzt habe ich das andere Problem gehabt. Bei einem Kunden sind die Mails von mir bzw. meinem Mailserver im Spamordner gelandet. Etwas seltsam, denn seit ich meinen eigenen V-Server und damit auch einen Mailserver betreibe, habe ich noch bei keinem anderen Kommunikationspartner Rückmeldungen über Probleme oder verlorengegangene bzw, nicht angekommene E-Mails bekommen. Und in den Kommunikationen mit mehrfachen Antworten war nie eine logische Lücke zu erkennen. Zwar stelle ich mal hin und wieder was an dem Mailserver um (aber nur, weil ich mich vor Spam schützen will) und aktualisiere die Software regelmäßig, aber ich betreibe ihn ja jetzt gut 25 Jahre unter der Domain.

Aber ich hatte von dem Admin des Kunden einige Tipps bekommen, was an meinem E-Mail-Server nicht korrekt eingerichtet sein könnte. Das waren meine Angaben zu Reverse DNS (war aber ok), DKIM (hatte ich gar nicht aktiviert), SPF und DMARC. Da ich mich ja als Programmierer und nicht Administrator verstehe, sind mir diese Konfigurationsparameter auch nur am Rande vertraut, aber mit den Tipps von dem Kunden-Admin sollte ich meinen E-Mail-Server jetzt hinsichtlich der Konfiguration so verbessert haben, dass er „vertrauenwürdiger“ beim Versenden meiner E-Mails daherkommt.

Preisexplosion beim Raspi

Ich muss zugeben, dass ich mir lange keine Preise für Hardware angesehen habe. Und schon gar nicht für den Raspberry Pi. Hin und wieder krame ich meinen alten Raspi der Version 1 raus und experimentiere damit rum. Aber die Version 1 ist wirklich so schwach auf der Brust, dass man damit eigentlich nur testen kann, welche Minimalhardware für gewisse Dinge notwendig ist und dabei braucht man viel Zeit und Geduld, bis die Programme starten bzw. fertig sind. Und wirklich nützliche Anwendungen habe ich in dem Bereich wenig gefunden, weil ich keine Hardwaresteuerung programmiere. Einzig die Ausführung von einem Python-Skript zur Spamabwehr ist derzeit eine produktive Anwendung des kleinen Raspi. Aber obwohl ich immer noch unter massivem Spambeschuss stehe, haben sich mittlerweile wohl die Antispam-Cloud-Dienste und die internen Spam-Abwehrmechanismen auf die neue Art des Spams eingestellt, die vor einigen Wochen wie eine Schlammlawine durchs Netz gewalzt ist. Der Raspi hat also als Torwächter wieder weniger zu tun. Bei einer anderen Anwendung hat aber die extrem schwache Hardware die Hürden nicht geschafft. Ich wollte für die kommende Cordova-Vorlesung, die ich an der TH Bingen ab übernächster Woche halte, ein Linux-System so konfigurieren, dass Cordova-Android-Apps kompiliert und nach Möglichkeit auch in einem Emulator (oder zur Not auf einem per USB angeschlossenen SmartPhone) ausgeführt werden. Da für Cordova eine ganze Reihe an recht alten Bibliotheken (JDK 8) auf der einen Seite und den elend vielen Ressourcen im Fall von Android auf der anderen Seite verlangt werden, ist meine Workstation nicht passenden konfiguriert – von meinem Matebook mit der kleinen SSD ganz zu schweigen. Und ich habe keine Lust, nur für die Vorlesung meine gesamten Konfigurationen durcheinander zu bringen und zig Sachen da zu installieren, die ich sonst nicht mehr brauche.

Zwar habe ich einen passenden Docker-Container noch von der letzten Vorlesung vorbereitet und auf den neusten Stand gebracht und auch mein altes Terra-Notebook hat Cordova sogar mit Visual Studio verfügbar (das geht maximal bis Visual Studio 2017 und das habe ich aus dem Grund auch noch auf dem alten Notebook gelassen). Aber unter meinen Linux-Systemen klappt die Installation von Cordova und den Android-Ressourcen nicht so richtig. In dem parallel auf dem alten Notebook installierten Linux ist irgendwas zerschossen und ich kann gar keine Aktualisierungen vornehmen. Das muss ich vermutlich komplett neu aufsetzen. Und bei den virtuellen Maschinen habe ich sowohl bei VM Ware als auch VirtualBox eine Reihe von anderen – und ganz verschiedenen – Problemen. Alles nix Tragisches, aber es kostet Zeit und wenn ein Problem gelöst ist, kommt das nächste. Unbefriedigend und es raubt Zeit.

Da kam mir die Idee, entgegen meiner bisherigen Planungen vielleicht doch einen neuen Raspi zu kaufen und den als Linux-System ins lokale Netz zu hängen und je nach notwendigem Ziel immer wieder neu aufzusetzen. Also so eine Art Hardware-Docker-Container-VM-Ersatz. Ich hatte für den ersten Raspi so um die 35 – 40 EUR ausgegeben, bin mit der Erwartung gerade auf die Suche gegangen und fast vom Glauben abgefallen. Die wollen ja teils weit über 200 EUR für die Platine mit ein bisschen Krimskrams dazu. Ne, wirklich nicht. Das hat ja gar nichts mehr mit der ursprünglichen Idee einer möglichst billigen Platine zu tun. Ich schaue mal weiter oder vielleicht gebe ich doch alternativen Platinen eine Chance, bei denen nicht noch zusätzlich ein Hype die Preise hochtreibt. Oder lasse es.

Derzeit kann man wohl weder Sprit bzw. Öl als auch Hardware kaufen. Benzin muss leider ab und zu sein (auch wenn ich weniger fahre und zudem wenn möglich auf das Rad oder eBike umsteige), aber Hardwarekauf kann verschoben werden, bis die Preise wieder normal sind.

(Liebe) Spamer gebt gut acht, der kleine Raspi wacht

Nachdem ich mein Python-Skript zur Identifizierung und Löschung von Spam auf Basis bestimmter Schlagworte im Betreff ein bisschen getestet habe, habe ich es sowohl auf meinem Server als auch dem Raspberry Pi als CronJob bereitgestellt. Mal sehen, wie gut die Putzkolonne das E-Mail-Postfach frei hält. Die letzten Nächte hatte ich – trotz SpamAssasin & Co jeden Morgen gut 20 Dreckmails im Postfach. Ich bin guter Hoffnung, dass Raspi einen guten Torwächter abgibt und da das Python-Skript redundant auch auf dem eigentlichen Server per CronTab aufgerufen wird, werde ich mal schauen, wie ich das in Zukunft austariere. Aber vorher werde ich das Skript noch optimieren.

Python-Skript zur Spam-Abwehr

Die momentane Überflutung mit E-Mail-Spam auf meinem eigenen Server geht mir gewaltig auf die Nerven. Ich habe die Woche etwas Zeit gehabt und immer mal wieder diverse Wege ausprobiert, um diesen Angriffen etwas entgegenzusetzen. Und dabei – das ist das Positive – doch wieder was gelernt. Ich habe zig Einstellungen und Optionen an meinem Server verändert, was aber nur begrenzten Erfolg hatte und auch nicht ungefährlich ist. Sogar den Email-Server habe ich gewechselt.

Klar verwende ich SpamAssassin und habe auch Blacklist- und Whitelist-Einstellungen. Aber das hilft in meinem Fall nicht wirklich was. Oder anders ausgedrückt – ohne das Zeug würde ich vermutlich die 10-fache Menge an Spam bekommen, aber was immer noch durchkommt, ist erschreckend. Vor allen Dingen greifen die Einstellungen, dass man Absender blockiert oder freigibt, nicht. Wie gesagt – bekannte Spammer zu blocken ist garantiert sinnvoll, um 90% des Drecks wegzuhalten, aber nicht ausreichend. Denn die Spammer in der derzeitigen Flut verwenden Einmal-Adressen. Es ist daher leider vollkommen nutzlos, den Server, die Domain oder gar einen einzelnen Absender zu blockieren.

Leider kann ich auf meinem Server kein Greylisting aktivieren. Grundsätzlich ist es verfügbar, aber beim Aktivieren bekomme ich einen Bug im Serverskript angezeigt :-(. Dabei wäre Greylisting in vielen Fällen garantiert sinnvoll. Im Gegensatz zu Whitelisting (bekannte Adresse immer durchlassen) und Blacklisting (bekannte Adressen immer blockieren) lehnt man bei Greylisting unbekannte Adressen genau 1x mit einer passenden Meldung ab und trägt die Absenderadresse in eine DB ein, um bei der nächsten Zustellung den Absender durchzulassen. Seriöse Versender bzw. SMTP-Server senden einfach nach einer ersten Fehlermeldung des Adressaten automatisch nochmal (ohne dass es der Absender bemerkt), Spammer in der Regel nicht. Aber wie gesagt – kann ich (derzeit) nicht aktivieren. Mal sehen, ob ich den Fehler noch rausbekomme, aber ich bin einfach kein (echter) Admin – sondern Programmierer.

Natürlich habe ich auch SPF-Spamschutz aktiviert, aber dennoch erscheint mir das als ein nutzloser Kampf gegen Windmühlen. Eigentlich helfen nur Inhaltsfilter, denn die Spam-Flut lässt sich derzeit bei mir auf etwa 5 – 10 Schlagworte eingrenzen.

Solche Filter kann ich in Thunderbird sehr schön anlegen und auch meine GMX-Accounts erlauben das. Nur die E-Mail-Programme, die ich bisher für mein SmartPhone gefunden habe, haben dieses Feature nicht. Deshalb habe ich sogar mal versucht, meine rjs.de-Adresse auf eine GMX-Adresse weiterzuleiten, dort mit Inhaltsfiltern zu reinigen und dann zurück auf eine neue rjs.de-Adresse weiterzuleiten. Funktioniert, aber ist mir dann doch zu umständlich gewesen. Außerdem will ich meine bisherige E-Mail-Adresse nicht wegen diesen Dreckschweinen aufgeben bzw. so kastrieren.

Überhaupt – das Filtern verlagert die Sache – soweit ich es hinbekomme – vom Server in den Client, denn bei beiden POP3/IMAP-Servern, die ich verwende, gibt es dieses Filtern nach dem Inhalt leider nicht – soweit ich es herausgefunden habe .

Bei POP3-Accounts ist das Filtern mit einem E-Mail-Client aber sowieso ziemlich unnütz und deshalb habe ich jetzt mal die Geschichte komplett auf IMAP umgestellt. Hätte ich schon lange tun müssen. Aber auch dann muss ein Client mit Filtern regelmäßig das Konto überwachen (etwa ein entsprechend konfigurierter Thunderbird auf einem meiner Rechner), damit ein anderer Client ohne die passenden Filter (etwa auf dem SmartPhone) gar nicht erst den Schmutz lädt.

Die Grundidee schien mir aber ok, da ich anders nicht weiter kam. Aber einen PC Tag und Nacht laufen lassen und alle paar Minuten Thunderbird das Konto checken lassen? Das kostet zu viel Strom und ist schon auf den zweiten Blick nicht wirklich optimal.

Mir kam dann die Idee, meinen alten Raspberry Pi das machen zu lassen. Braucht kaum Strom und die Platine verstaubt sowieso vor sich hin, nachdem ich den Zwerg vom Kryptomining wieder abgezogen habe. Also damit eine Weile experimentiert. Da ich an der Platine weder Maus und Tastatur noch Monitor hängen habe und auch W-LAN nicht eingerichtet war, musste ich das Kistchen erst einmal etwas aktualisieren bzw. neu einrichten. Natürlich kann ich mit klassischem SSH mit X-Umleitung darauf zugreifen, aber ich arbeite auch bei Fernzugriff gerne mit dem Desktop. Nur komischer Weise ging der Zugriff über VNC auf den Raspi nicht. Obwohl auf der Raspi auch ein VNC-Server automatisch mit startet und ich das schon früher so gemacht habe. Ich habe es absolut nicht hinbekommen und in meiner Verzweiflung sogar xrdp installiert und – oh Wunder – der Remotedesktop-Zugriff ging einwandfrei – von Windows (!) aus.

Aber da es sich bei meinem Raspi um die Version 1 handelt, konnte ich da kein vernünftiges E-Mail-Programm installieren. Viel experimentiert bis hin zur versuchten Installation von iceweasel und icedove, aber erfolglos. Der Weg war mir dann einfach zu steinig und ich habe ihn als Sackgasse begraben.

Und dann kam mir ein Gedanke! Warum kein Python-Skript schreiben und damit das IMAP-Postfach regelmäßig abfragen? Die ursprüngliche Idee war, dass ich das dann auf dem Raspi laufen lasse, aber relativ schnell kam ich auf den Dreh, dass das natürlich auch auf dem Server selbst erfolgen kann. Ich habe ja in meinen regelmäßigen Entwickler-Tipp zu Python bei LinkedIn Learning schon einen Tipp veröffentlich, wie man per CronTab zeitgesteuert Python-Skripte ausführen kann. Was aber natürlich auch für den Raspi interessant wäre.

Das Skript, das ich dann programmiert habe, nutzt im Wesentlichen imaplib, ist aber noch nicht ganz fertig und auch noch nicht auf dem Server bzw. Raspi installiert. Aber wenn ich die derzeitige Vorversion in IDLE laufen lasse, kann ich recht zuverlässig im Betreff von E-Mails (theoretisch auch in der gesamten Mail) Schlagworte finden, die ich als SPAM empfinde und dann die Mails vom Skript automatisiert löschen lassen.

Ich werde von dem Skript noch eine Datei mit den Schlagworten einlesen lassen, reguläre Ausdrücke mit dem Modul re integrieren, das Skript eine Weile manuell testen, und dann in einen Cron-Job auf dem Server und/oder Raspi einbauen. Das sollte eine brauchbare Ergänzung meiner Spamabwehr werden und ich habe wie gesagt wieder neue Sachen gelernt, was dem Mist etwas Positives abgewinnt.

Und wenn mein Vorrat an bereits eingespielten Videos für die regelmäßigen Entwickler-Tipps zu Python zur Neige geht, habe ich damit ein interessantes Thema für die neuen Tipps, die ich dann vermutlich einspiele.

 

Spam-Terror

Im Moment werde ich geradezu mit E-Mail-Spam geflutet. Zumindest bei meinem eigenen Server. Ich habe keine Ahnung, warum das von einem auf den anderen Moment explodiert ist. Nun kann ich in meinem E-Mail-Programm auf dem Desktop ganz gut Filter gegen den Müll einsetzen. Einfach die üblichen Busswords, die derzeit die Flut ausmachen (da haben mir etwa 5 – 10 gelangt, um 95% des Spams zu erfassen), als Filter verwendet und gut ist. Zumindest was die derzeitige Welle angeht, die komplett das horizontale Niveau anspricht.

Aber die E-Mail-Programme, die ich bisher für mein SmartPhone gefunden habe, taugen hinsichtlich Spam-Schutz keinen Schuss Pulver. Kein einziges. Die Dinger haben alle denkbaren ach so tollen Features, aber das einfache Anlegen von Filtern aufgrund von Keywords habe ich nirgendwo gefunden. Maximal kann man Absender bannen, aber das ist wirkungslos, denn die Absenderadressen sind Einmal-Adressen. Diese Art der Filterung bzw. des Spamschutzes ist von vorgestern und wirklich nutzlos.

Ich habe jetzt mal den Server versucht besser gegen Spam zu konfigurieren und hoffe, dass ich damit nichts kaputt gemacht habe und/oder fehlerhaft korrekte Mails abweise. Ich bin ja Programmierer und kein Admin. Aber ich kann mir sonst nicht mehr helfen, um dieser Flut Herr zu werden.

Die Konfiguration der Spam-Abwehr habe ich gleich dazu genutzt, auch die Zertifikate als auch Verschlüsselungseinstellungen zu verschärfen. Hilft nichts gegen Spam, sollte aber an anderen Stellen Verbesserungen und mehr Sicherheit bringen.

SMTP-Problem identifiziert – GMX lehnt meinen Server ab

Nachdem die Probleme beim Versenden von Mails auch mit QMail nicht aufgehört haben, bin ich der Sache auf den Grund gegangen. Zuerst ist mir aufgefallen, dass ich nur Probleme mit GMX-Adressen hatte. Aber nicht mit allen bzw. nicht immer. Hin und wieder wurden die einfach nicht zugestellt.

Die Recherchen im Internet haben schnell das Problem gefunden – es gibt zahllose Beschwerden, dass bei GMX und Web.de Mails nicht zugestellt werden können.

Das liegt wohl daran, dass bestimmte Mailserver beim Empfang einfach nicht akzeptiert werden. Vordergründig geht es im Spam-Vermeidung, was ja gut ist. Aber ein Schelm, der an die Ausbootung von konkurrierenden Mailsystemen denkt…

DNS-Reverse

Egal – das Problem muss gelöst werden und letztendlich scheint es an der sogenannten DNS-Reverse zu liegen. So was kann man für IP-Adressen individuell festlegen. Anders als bei der normalen DNS Abfrage (Hostname löst in IP-Adresse auf), können mithilfe des DNS Reverse Lookups feste IP-Adressen dem Hostname zugeordnet werden.

Der Reverse DNS Eintrag (PTR-Eintrag) ist der „Name“ einer IP-Adresse. Diese Reverse-DNS-Eintrag wird von vielen Mailservern zur Identifizierung verwendet. Sollte dieser Eintrag nicht valide sein, z.B. der Eintrag fehlt oder ist nicht symmetrisch (der Name aus dem DNS-Reverse wird wieder auf die IP-Adresse aufgelöst und muss der ursprünglichen IP-Adresse entsprechen), weisen manche Mailserver eingehende Mails ab.

Ich habe nur das DNS-Reverse auf meinem Server geändert und hoffe, dass damit E-Mails, die ich von meinem Mailserver versende, von den Mailservern der entsprechenden Provider nicht mehr abgelehnt werden. Bevor die Änderung wirksam wird, dauert es eine Weile, aber dann werde ich es ja sehen.

Schwierigkeiten mit meinem SMTP-Server

Nach dem Umzug meiner Domain rjs.de auf meinen V-Server habe ich auch gleichzeitig die Verantwortung bzw. Kontrolle über einen eigenen Mailserver. Bis dahin wurde das bei dem reinen Hostingangebot direkt beim Provider gemanaged. Im Grunde geht auch das Empfangen und Versenden mit dem Mailserver. Allerdings landen unverständlicher Weise einige Mails beim Versenden in der Warteschlange. Entweder akzeptieren andere Mailserver meinen SMTP-Server nicht oder Postfix hat andere Probleme. Ich habe jetzt mal Postfix durch einen anderen Mailserver ausgetauscht und schaue mal, ob das die Probleme beseitig. Auf dem Weg habe ich gleich auch noch erweiterte Spam- und Virenschutztools installiert. Leider kommt bisher noch – trotz Blacklist – ziemlich viel Spam durch.