Posts Tagged ‘imapfilter’

Sonntag, 5. Februar 2017

imapfilter wechselnde Zertifikats-Fingerabdrücke ignorieren lassen

imapfilter funktioniert bei mir wunderbar, um in meiner INBOX eintreffende Mails automatisiert in Unterordner zu verschieben.

Dann und wann bricht das per Cron aufgerufene Script seine Arbeit aber ab, weil das Zertifikat des Mail-Servers gewechselt wurde:

imapfilter: certificate mismatch in non-interactive mode

imapfilter muss in einem solchen Fall interaktiv gestartet und das neue Zertifikat permanent akzeptiert werden.

Wen dieses Verhalten stört und die eindeutige Identifikation seiner Gegenseite weniger wichtig ist als ein sauber durchlaufendes Script, fügt oben an seine imapfilter-Regeln folgende Zeile ein:

...
options.certificates = false
...

Quelle: Ignore certificate fingerprint mismatch

Ich habe das bei mir nur für ein kaum genutztes Gmail-Konto aktiviert.

Das Problem könnte mit den hier geschilderten zwei gleichzeitig aktiven, unterschiedlichen Gmail-Zertifikaten zusammenhängen.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 29. April 2015

Operatoren zur Kombination von imapfilter-Regeln

Folgende Operatoren sind in imapfilter-Regeln möglich:

not
* and
+ or

Den *-Operator („and“) setze ich beispielsweise folgendermassen ein:

...
messages = mbox.INBOX:contain_subject('Viagra') * mbox.INBOX:is_seen()
messages:move_messages(mbox['Sexual Essentials'])
...

Tags:
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 27. Juni 2014

Spam-Mails mit imapfilter in einen Unterordner verschieben

Der falsche Weg, wie ich ihn bis heute angewendet hatte:

...
-- SPAM
messages = mbox.INBOX:contain_subject('[SPAM]')
messages:move_messages(mbox['Spam'])
...

Das führte in diesem einen speziellen Fall dazu, dass ein legitimes E-Mail eines Kollegen mit „[SPAM]“ im Subject gekennzeichnet wurde. Da das elektronische Gespräch hin- und herging, landeten alle Antworten des Empfängers immer wieder in meinem Spam-Ordner.

Der richtige Weg — jedenfalls für Mail-Accounts, die bei Cyon GmbH gehostet werden — ist:

...
-- SPAM
messages = mbox.INBOX:contain_field('X-Spam-Status','Yes')
messages:move_messages(mbox['Spam'])
...

Tags: , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 10. April 2014

imapfilter funktioniert nach dem Heartbleed-Disaster nicht mehr automatisch

Da offenbar auch der Hoster meines Vertrauens vom Heartbleed-Disaster betroffen war und vorbildlicherweise schnurstracks seine SSL-Zertifikate ausgetauscht hat, kam es zu Problemen mit meiner imapfilter-Installation, welche ich hier in anderen Blog-Artikeln bereits beschrieben habe.

Obwohl das Shell-Script auf meinem Linux-Server zu Hause alle fünf Minuten aufgerufen wird, wurden meine Mails in verschiedenen Mail-Accounts seit Mittwoch 15:15 Uhr nicht mehr gemäss den imapfilter-Regeln verschoben.

Heute Mittag erst wurde ich stutzig, wieso sich soviel Müll in meinen INBOXes stapelte und ging der Sache auf den Grund. Dank meinen Log-Daten fand ich die Ursache dann sofort heraus:

imapfilter: certificate mismatch in non-interactive mode

Um dieses Problem zu beheben, musste ich mich per SSH auf meinen Linux-Server einloggen, in denjenigen User wechseln, unter welchem der imapfilter-Cron Job ausgeführt wird, und danach erst einmal die Datei mit den abgelegten Zertifikaten löschen:

$ rm ~/.imapfilter/certificates

Anschliessend musste ich imapfilter einmalig von Hand von der Kommandozeile ausführen (wer mit imapfilter auf verschiedenen Mail-Servern filtert, muss das Prozedere für jeden Server einzeln durchführen, damit die Zertifikatsdatei wieder mit allen aktuellen Zertifikaten gefüllt wird):

$ imapfilter -c /dir/to/recipes/mail-at-domain-tld
Server key fingerprint: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
    (R)eject, accept (t)emporarily or accept (p)ermanently? p

Voilà! Seither klappt das Filtering meiner IMAP-Konten wieder reibungslos.

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 9. November 2013

E-Mail-Adressen aus einer Textdatei auslesen und mit imapfilter in einen Unterordner verschieben

Seit ich ein Smartphone besitze, verschiebe ich mittels dem alle 5 Minuten per cron-Job auf meinem privaten Server laufenden imapfilter unwichtige E-Mails in Unterordner, damit ich mich auf die wesentlichen Mails konzentrieren kann.

Der grösste Unterordner in meinem privaten E-Mail-Account heisst „_UNPERSOENLICH“ und enthält all den Newsletter-Plunder, welchen man die Woche hindurch so zugeschickt erhält. Die imapfilter-Regel, welche die treffenden E-Mail-Absender herausfiltert und dorthin verschiebt, ist mittlerweile auf über 60 Zeilen (d.h. 60 Absenderadressen) angewachsen. In der imapfilter-Konfigurationsdatei sieht dies dann in etwa so aus:

...
messages = mbox.INBOX:contain_from('domain1.ch') +
           mbox.INBOX:contain_from('domain2.org') +
           mbox.INBOX:contain_from('user@domain3.com')
           ...
           mbox.INBOX:contain_from('userxy@domain112.com')
messages:move_messages(mbox['_UNPERSOENLICH'])
...

Heute habe ich mich dazu entschieden, diese E-Mail-Adressen aus der Konfigurationsdatei herauszulösen, in einer Textdatei zusammenzufassen (je eine E-Mail-Adresse pro Zeile) und dann imapfilter diese Textdatei einlesen zu lassen und die Absenderadressen in einer Schleife in meiner INBOX zu suchen und gegebenenfalls in den Unterordner zu verschieben.

Äusserst hilfreich war dabei die Hilfe, wie man Lua zu einem solchen Vorhaben bewegt (imapfilter setzt auf Lua auf): File Read In Lua?

Basierend auf dieser Antwort habe ich folgenden Code in meine imapfilter-Konfigurationsdatei aufgenommen:

...
function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end

function lines_from(file)
  if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = line
  end
  return lines
end
...
-- Unpersoenlich
local file = '../filters/private-unpersoenlich.txt'
local lines = lines_from(file)

for key,email in pairs(lines) do
--  print('line[' .. key .. ']', email)
  messages = mbox.INBOX:contain_from(email)
  messages:move_messages(mbox['_UNPERSOENLICH'])
end
...

Im Ordner oberhalb desjenigen Ordners, welcher die imapfilter-Konfigurationsdateien enthält (für jeden meiner Accounts existiert eine solche Konfigurationsdatei), gibt es nun einen Ordner filters, welcher momentan die Datei private-unpersoenlich.txt enthält.

Mit den obengenannten Funktionen und Konstrukten wird die Textdatei ausgelesen und in eine Lua-Tabelle (in anderen Programmiersprachen wohl als Array bezeichnet) gespeichert (lines_from(). Anschliessend gehe ich mit einem for-Loop durch die Tabelle, filtere den Absender (contain_from()) und verschiebe treffende E-Mail-Nachrichten in den Ordner „_UNPERSOENLICH“ (move_messages(mbox['_UNPERSOENLICH'])).

Tags: , , , , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Donnerstag, 15. August 2013

Mit imapfilter eingehende E-Mails verschieben — aber erst nach der Lektüre

In einem anderen Blog-Artikel habe ich vor einiger Zeit beschrieben, wie ich mich mittels imapfilter von den Filterregeln meiner Mailserverbetreiber losgelöst habe. Sollte ich mich jemals von der cyon GmbH abwenden, müsste ich die Filterregeln beim neuen Anbieter — falls überhaupt möglich — nicht erneut umständlich über eine Web-Oberfläche einprogrammieren.

In der Zwischenzeit habe ich realisiert, dass nachfolgender Befehl optimal ist, um Nachrichten automatisiert in der IMAP-Ordnerstruktur abzulegen — aber erst, nachdem ich die Nachrichten auch wirklich gelesen habe:

messages = mbox.INBOX:contain_from('email@domain.tld') * mbox.INBOX:is_seen()
messages:move_messages(mbox['IMAP-Folder'])

Der erste Befehl auf der ersten Zeile wählt E-Mails eines bestimmten Absenders aus. Das Asterisk („*“) bedeutet „AND“, während der zweite Teil des Ausdrucks die Bedingung macht, dass die E-mail-Nachricht als gelesen markiert ist.

Ich verwende einen solchen Filter beispielsweise, um Kalendereinladungen abzulegen, sobald ich diese bestätigt habe.

Tags: , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 10. März 2013

Thunderbird effizient mit einem IMAP-Server und zehntausenden E-Mails verwenden

Neben der lokalen Ablage der Logs meines Linux-Servers unter /var/log leite ich Resultate von Cron-Läufen auch an eine E-Mail-Adresse auf einen in einem Rechenzentrum stehenden IMAP-Server weiter. Einerseits stelle ich so sicher, dass ich im Falle eines verheerenden Hacks auf dem IMAP-Server möglicherweise Informationen extrahieren kann, welche mir bei der Forensik helfen. Ob diese Lösung wirklich das Gelbe des Eis ist sei hier dahingestellt (heute würde ich mich wohl für eine Lösung wie Splunk entscheiden).

Nach langer Zeit habe ich heute wieder einmal per Web-Mail in diesen Account hineingeschaut und musst feststellen, dass sich in zwei IMAP-Ordnern je über 50’000 Mails angesammelt haben. Ich entschied mich, diese Ordner zu säubern. Hierzu verwendete ich aber nicht die vom Hoster angebotene Web-Mail-Lösung Roundcube, sondern Mozilla Thunderbird.

Nachfolgend einige Tipps, wie man mit der riesigen Flut an Mails umgeht:

Alle IMAP-Nachrichte herunterladen

Einerseits habe ich unter

  1. Thunderbird
  2. Preferences
  3. Advanced
  4. General
  5. Config Editor

den Wert von mail.server.default.check_all_folders_for_new auf true gesetzt. Ob dies etwas bewirkt, kann ich leider nicht sagen.

Andererseits habe ich auch bemerkt, dass man alle E-Mails in einem Ordner mittels Command-A auswählt und dann mittels Rechtsklick über die Option „Get Selected Messages“ herunterladen kann.

IMAP-Nachrichten auf dem Server durchsuchen

Unter

  1. Edit
  2. Find
  3. Search Messages…
  4. [x] Run search on server

In meinem Fall funktionierte diese Methode aber nicht; es wurden nur die Bodies derjenigen Mails durchsucht, welche sich bereits lokal auf meiner Festplatte befanden.

Zehntausende E-Mails rasch löschen

Nachfolgende Option verhindert, dass Thunderbird während Minuten nicht mehr reagiert, einen Spinning Beachball anzeigt und in Mac OS X‘ Activity Monitor rot als „not responding“ markiert wird:

  1. Tools
  2. Account Settings…
  3. Server Settings
  4. When I delete a message: (x) Remove it immediately

Dies verhindert, dass zu löschende Nachrichten von Thunderbird im Hintergrund in den Ordner „Trash“ verschoben werden, aus welchem man diese danach noch mittels „Empty Trash“ löschen muss.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 27. September 2012

Wenn imapfilter plötzlich mit meinem bei Cyon gehosteten Mail-Server nicht mehr funktioniert

Da verreise ich als auf einen IT-Audit ins „Ländle“, und prompt versagt mein geliebter imapfilter seinen Dienst. Fazit: Meine INBOXes sind plötzlich voller Mails, welche von imapfilter sonst schön brav spätestens 5 Minuten nach deren Ankunft auf meinen Mail-Konti in einen Unterordner verschoben werden. Zuerst dachte ich, dass mein lokaler Linux-Server, auf welchem imapfilter läuft, wegen eines Stromunterbruchs ausgefallen ist.

Doch mittels des äusserst nützlichen SSH-Clients Prompt hatte ich bereits am Dienstag realisiert, dass der Server am Netz hängt und ansprechbar ist.

Ein Blick in das von meinem imapfilter.sh-Script erzeugten Log zeigte, dass das Problem erstmals am Montag um 17 Uhr 15 Minuten aufgetaucht ist (Montag kurz vor Feierabend – dann scheinen die Cyon Sysadmins am liebsten ihre Zertifikate zu erneuern?)

2012-09-24 17:15 - <imapfilter Script> - Error '5' checking mail

Nun gut … letzter Ausweg: Ich versuche mich mittels

imapfilter -d -c <imapfilter Script>

interaktiv anzumelden und Debug-Meldungen abzulegen. Doch zur Analyse dieses Debug-Dumps kommt es nicht, denn auf der Kommandozeile strahlt mich folgender Hinweis an:

Server certificate subject: /OU=Domain Control Validated/CN=*.cyon.ch
Server certificate issuer: /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Domain Validation CA - G2
Server key fingerprint: 39:E9:08:A5:D9:EC:C3:A3:3E:0F:73:7C:14:B7:F2:A5
(R)eject, accept (t)emporarily or accept (p)ermanently? p

Mittels Eingabe von p akzeptiere ich das neue Zertifikat, und gut isses.

Da hat Cyon also einfach nur sein Server-Zertifikat geändert. Wieso nimmt man immer gleich das Schlimmste an?

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 8. Juni 2011

Zertifikatsprobleme mit imapfilter bei einem loadbalancierten Exchange 2010-Server

ACHTUNG: Funktioniert leider doch nicht wie erwünscht.

imapfilter ist das Tool meiner Wahl, um einkommende Mail-Nachrichten in IMAP-Unterordner zu verschieben. Dessen Anwendung habe ich in einem Blog-Artikel erläutert.

Seit mein Arbeitgeber mein E-Mail-Konto von einem Unix-Mailserver auf eine Microsoft Exchange 2010-Lösung migriert hat, gab es Probleme mit den Zertifikaten. (Natürlich hätte ich die Regeln erneut unter Exchange erfassen können, aber der Vorteil von imapfilter ist eben gerade, dass man nur die Serververbindung anpassen muss, und die Mails werden weiter schön sauber sortiert).

imapfilter lässt man bekanntlich beim ersten Verbindungsversuch im interaktiven Modus laufen und akzeptiert dort dann brav das Zertifikat das Mail-Servers:

Server certificate subject: /1.3.6.1.4.1.311.60.2.1.3=CH/ 
1.3.6.1.4.1.311.60.2.1.2=Bern/businessCategory=Government Entity/ 
serialNumber=1834-03-14/C=CH/ST=Bern/L=Bern/O=Universitaet Bern/ 
OU=Informatikdienste - SYS/CN=mail.campus.unibe.ch
Server certificate issuer: /C=BM/O=QuoVadis
Limited/OU=http://www.quovadisglobal.com/CN=QuoVadis 
 Global SSL ICA
Server key fingerprint: CD:10:34:E9:6D:1D:07:09:3D:9E:53:FC:B5:94:B0:10
(R)eject, accept (t)emporarily or accept (p)ermanently? p

Doch leider schien dieser Server in der Folge einfach so den Fingerprint zu wechseln. Als ich imapfilter nach einiger Zeit (und Fehlermeldungen im cron.log) erneut im interaktiven Modus ausführte, erschien folgende Warnung:

Server certificate subject: /1.3.6.1.4.1.311.60.2.1.3=CH/ 
1.3.6.1.4.1.311.60.2.1.2=Bern/businessCategory=Government Entity/ 
serialNumber=1834-03-14/C=CH/ST=Bern/L=Bern/O=Universitaet Bern/ 
OU=Informatikdienste - SYS/CN=mail.campus.unibe.ch
Server certificate issuer: /C=BM/O=QuoVadis
Limited/OU=http://www.quovadisglobal.com/CN=QuoVadis 
 Global SSL ICA
Server key fingerprint: 6D:D9:E8:FF:A3:70:2A:D8:44:10:0C:7D:0E:94:65:FC
ATTENTION: SSL/TLS certificate fingerprint mismatch.
Proceed with the connection (y/n)? y

Leider führte das Bestätigen der Warnung nicht dazu, dass dieses neue Zertifikat akzeptiert wurde (wohl, weil für denselben Server bereits ein anderes Zertifikat gespeichert war). Meine Vermutung: Da mein Arbeitgeber einen loadbalancierte Exchange 2010-Infrastruktur aufgebaut hat, besitzt jeder Server ein anderes Zertifikat (auch wenn beide gegen aussen als mail.campus.unibe.ch in Erscheinung treten).

Der Workaround sah folgendermassen aus:

$ copy ~/.imapfilter/certificates ~/.imapfilter/certificates.old
$ imapfilter -c myconfigfile
(... accept certificate permanently ...)
$ cat ~/.imapfilter/certificates.old >> ~/.imapfilter/certificates

Ab sofort motzte imapfilter nicht mehr über den gelegentlich wechselnden Fingerprint, weil nun einfach beide möglichen Zertifikate in der Datei gespeichert sind.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen