Inhaltsverzeichnis

Mailfilterung mit SIEVE auf dem IMAP-Server

Zur Filtern von E-Mails auf IMAP-Server wurde die Programmiersprache SIEVE konzipiert - die genaue Spezifikationen erfolgten hierzu im RFC 5228. Das Hauptaugenmerk von SIEVE liegt auf Einfachheit, Erweiterbarkeit, sowie auf Unabhängigkeit von der verwendeten Zugriffsart und Architektur wie auch dem verwendeten Betriebssystem. Sieve wurde spezifiziert, um den Usern die Möglichkeit zu beiten, bereits serverseitig auf einfache Art eigene Regeln zur Filterung von E-Mails zu definieren. Sieve-Scripte werden bereits während der Zustellung der eMail am IMAP-Server ausgeführt.

Weitere Hintergrundinformationen finden man unter anderem in dem Wikipedia-Artikel zu SIEVE.

sieveshell

Mit Hilf der sieveshell, aus dem Paket cyrus-imapd-utils, kann der versierte, technisch begabte Nutzer, seine eigenen Filterregeln einspielen, verwalten und/oder löschen.

Möchte man zum Beispiel automatisch generierte Nachrichten, von sieve beim Einliefern bei unserem Cyrus-IMAP-Server vorsortieren lassen, so gehen wir wie folgt vor:

Script erstellen

Mit dem Editor unserer Wahl erstellen wir uns ein einfaches Textfile, mit den entsprechenden Filterregeln. So sollen Nachrichten von der Adresse logwatch@nausch.org in den Unterordner /root/logwatch, Nachrichten, die im Betreff das Schlüsselwort „FaxMaster“ und die mit dem Schlüsselwort „PostMaster“ in den Ordner /root/FaxMaster bzw. /root/PostMaster einsortiert werden.

$ vim eigene_Filterregel

require ["fileinto"];
if header :contains "from" ["logwatch@nausch.org"] { fileinto "INBOX/root/logwatch"; }
elsif header :contains "subject" "FaxMaster" { fileinto "INBOX/root/FaxMaster"; }
elsif header :contains "subject" "PostMaster" { fileinto "INBOX/root/PostMaster"; }
else { fileinto "INBOX"; }

Script hochladen

Damit wir unser selbst definiertes Script auch nutzen können, müssen wir es auf unseren IMAP-Server hochladen. Hierzu melden wir uns von unserem Nutzer-Login mittels cyradm an unserem IMAP-Server an. Dank unserer saslauth Konfiguration, erfolgt die Authentifizierung gegen unseren LDAP-server und wir müssen uns kein weiteres Passwort merken.

[django@nss ~]$ sieveshell imap.nausch.org

connecting to imap.nausch.org
Please enter your password: 
> 

Nach dem Prompt der sieveshell können wir uns mittels des „?“ den Befehlsumfang anzeigen lassen.

> ?
Usage:
  sieveshell [-u username] [-a authname] [-r realm] <server>

help             - this screen
list             - list scripts on server
put <filename> [<target name>]
                 - upload script to server
get <name> [<filename>]
                 - get script. if no filename display to stdout
delete <name>    - delete script.
activate <name>  - set a script as the active script
deactivate       - deactivate all scripts
quit             - quit

Mittels put laden wir unser zuvor erstelle Textfile auf den Server hoch.

 > put eigene_Filterregel

Mittel List bekommen wir all unsere hinterlegten Scripte anzeigen lassen. Auf dem Server können durchwegs mehrere Scripte hinterlegt sein, aber nur eines ist aktiv!

> list
erster_Versuch 
eigene_Filterregel
smartsieve  <- active script

Mittels activate <Scriptname> aktivieren wir dann unser neues Script; ein list zeigt uns unsere Änderung entsprechend an.

> activate eigene_Filterregel
> list
erster_Versuch 
eigene_Filterregel <- active script
smartsieve

Dass diese Vorgehensweise, wie Eingangs schon erwähnt, nur für den versierten technischen Nutzer geeignet ist und den WAF1) nicht sonderlich hebt, ist selbstredent. Es muss also eine komfortablere Möglichkeit geschaffen werden. Somit sind wir beim nächsten Thema smart-sieve angelangt.

smart-sieve

SmartSieve ist eine sieve Filter-GUI bzw. Web-Basierte Management-Client. Es ist eine grafische Benutzeroberfläche zum Erstellung und zum Verwaltung von sieve-Skripten auf einem Cyrus-IMAP Mailserver. Hiermit haben auch nicht technisch versierte Nutzer unseres Cyrus-IMAP-Servers die Möglichkeit, Regeln für sieve zu erstellen um e-Mails und Abwesenheitsnachrichten, ohne Vorkenntnisse über die sieve-Script-Sprache, zu definieren und zu verändern.

SmartSieve Administration

Installation

Paketabhängigkeiten

Vor der eigentlichen Installation von SmartSive installieren wir noch drei notwendige PHP-Komponenten (php-imap, php-mcrypt und php-pecl-idn).

 # yum install php-imap php-mcrypt php-pecl-idn

Download

Von der Projektseite auf SourceForge.net laden wir uns die aktuelle Version, hier weiter beschrieben smartsieve-1.0-RC2.tar.gz, herunter.

# wget http://ovh.dl.sourceforge.net/sourceforge/smartsieve/smartsieve-1.0-RC2.tar.gz

Installation

Das Paket entpacken wir mittels:

 # tar xvfz smartsieve-1.0-RC2.tar.gz

Das entpackte Verzeichnis verschieben wir nach /usr/share, passen die Nutzerrechte entsprechend an und löschen dann anschließend das Archiv wieder.

# mv /usr/share/smartsieve-1.0-rc2 /usr/share/smartsieve
# chown -R root:apache smartsieve
# rm /usr/share/smartsieve-1.0-RC2.tar.gz 

VHost-Definition

Für unsere Nutzer legen wir einen eigenen V-Host an, über dessen später die Userzugriffe erfolgen sollen. Mit dem Editor unserer Wahl bearbeiten wir also unsere Apache-Konfigdatei /etc/httpd/conf.d/vhosts.conf.

# vim /etc/httpd/conf.d/vhosts.conf
vhosts.conf
#
# smartsieve.nausch.org
#
<VirtualHost *:80>
        ServerAdmin webmaster@nausch.org
        ServerName smartsieve.nausch.org:80
        ServerAlias smartsieve.nausch.org *.smartsieve.nausch.org
        ServerPath /
        DocumentRoot "/usr/share/smartsieve"
        <Directory "/usr/share/smartsieve">
                Options FollowSymLinks
                AllowOverride AuthConfig
                Order allow,deny
                Allow from all
        </Directory>
        AddType application/x-httpd-php .php
        DirectoryIndex index.php
        ErrorLog logs/smartsieve_error.log
        CustomLog logs/smartsieve_access.log combined
</VirtualHost>

Mittels eines anschließende Reload geben wir unseren neu definierten VHost dem System bekannt.

 # service httpd restart

Konfiguration

servers.php

Im Verzeichnis ../smartsieve/conf/ befindet sich die Serverdefinition in dem PHP-Script servers.php. Diese passen wir unseren Gegebenheiten entsprechend an, so dass nur noch unser IMAP-Server aktiv ist. Den Rest löschen, bzw. Marken wir mittels / / aus.

# vim /usr/share/smartsieve/conf/servers.php

<?php
$servers['cyrus'] = array(
    'display' => 'Cyrus IMAP Server @ nausch.org',
    'server' => 'imap.nausch.org',
    'sieveport' => '2000',
    'imapport' => '143/imap/notls',
    'maildomain' => 'nausch.org'
);
?>

config.php

Die eigentliche Konfiguration von SmartSieve erfolgt dann über die Konfigurationsdatei config.php, welche ebenfalls im Verzeichnis ../smartsieve/conf/ liegt. Auch diese bearbeiten wir mittels vi.

 # vim /usr/share/smartsieve/conf/config.php

Zur Dokumentation haben sind nachfolgend nur die aktiven Zeilen ausgegeben.

<?php
$default->language = "de_DE";
$default->charset = "ISO-8859-1";
$default->proxy_authz_users = array();
$default->user_select_lang = true;
$default->user_select_server = false;
$default->user_supply_scriptfile = false;
$default->allow_multi_scripts = false;
$default->scriptfile = 'smartsieve';
$default->allow_write_unrecognised_scripts = true;
$default->allow_change_mode = false;
$default->allow_regex = false;
$default->allow_custom = true;
$default->notify_methods = array('mailto', 'sms');
$default->use_forward_mail_interface = true;
$default->use_vacation_interface = true;
$default->use_whitelist = true;
$default->spam_filter = array('header'=>'X-Spam-Score',
                              'matchStr'=>'^[0-9]',
                              'matchType'=>':regex',
                              'not'=>false);
$default->websieve_auto_matches = false;
$default->session_name = 'SmartSieve';
$default->cookie_domain = $_SERVER['SERVER_NAME'];
$default->page_title = 'SmartSieve';
$default->login_page_heading = 'Willkommen beim SmartSieve-Server bei nausch.org';
$default->initial_page = 'main.php';
$default->vacation_days = '1';
$default->max_vacation_days = '30';
$default->max_field_chars = 500;
$default->max_textbox_chars = 50000;
$default->update_activate_script = false;
$default->return_after_update = false;
$default->socket_timeout = 4;
$default->crypt_lib = 'null';
$default->crypt_args = array();
$default->sasl_mech = 'plain';
$default->logging = true;
$default->logging_level = LOG_DEBUG;
$default->logging_method = 'syslog';
$default->logging_facility = 'LOG_MAIL';
$default->logging_ident = 'smartsieve';
$default->logging_args = array();
?>

Programmstart

Mit dem Webbrowser unserer Wahl öffnen wir die Eingangsseite.

SmartSieve-Anmeldeschirm

Nach erfolgter Anmeldung befinden wir uns im Hauptbildschirm, in der wir nun unsere benutzerindividuellen Regeln anlegen, verwalten und löschen können. Dies erfolgt hierbei Benutzerintuitiv und bedarf keiner großartigen Beschreibung mehr - der WAF ist somit gesichert! LOL

SmartSiev-Haupbildschirm

1)
Woman Acceptance Factor