home   articles   archive   forum   masthead  
Published at 27.10.02
Author: Thomas Grotevent
Languages: de
Printer printer-version
Support Us!
  Warning: This article needs a translator.

Wollmilchsau Server: 5. SIEVE (Websieve 0.61 / Easysieve 1.1)

Kapitelübersicht:
1. Einleitung
2. Basisinstallation
3. LAMP
4. Mailserver
5. SIEVE (Websieve 0.61 / Easysieve 1.1)
6. Hylafax: Fax & Fax/Mail-Integration
7. Squirrelmail
8. Horde PHP Framework
9. Horde IMP - Webmail mit Komfort
10. Horde Turba: Kontaktmanagement
11. VBOX - Anrufbeantworter im Server
12. WebMin


5.1. Grundsätzliches

lovely SPAM Sieve ist eine Sprache zur Mail-Filterung. Bis jetzt ist der Cyrus-IMAPD der einzige mir bekannte Mailserver, der Sieve implementiert hat. Das geht allerdings auch dort (noch) nicht ohne Bauchschmerzen ab. Die Funktionen für Automatische Rücksendung (Urlaubsnachricht bzw. Mail-Reject) neigten in den Tests noch dazu, die Empfängeradresse zu zerschreddern.....

Allerdings ist mittlerweile ein RFC zu Sieve erschienen, so dass hoffentlich mehr Programmierer und Hersteller diese standardisierte Lösung unterstützen werden, anstatt die Benutzer mit immer mehr Featuritis zu belasten.

Für die Installation der Frontends werden folgende Sourcen benötigt:

Websieve Login
Websieve Login

5.2. SIEVE: Websieve: Beschreibung

Websieve ist ein perl-basiertes Skript zur Verwaltung von Sieve-Mailfilterregeln.
Es besitzt zwei Arbeitsmodi:

  • Basic mode:
    ist ein "Eingabeformular", mit dem Filterregeln erstellt werden. Eigentlich ein Fall von "Na ja".
    Für's gelegentliche Einstellen einer Urlaubsnachricht eigentlich schon zu kompliziert.
  • Advanced Mode:
    Hier geht es ans Eingemachte. Der Advanced Mode ist im Grunde nur ein Texteditor, man kann seine Regeln manuell einprogrammieren und Sieve bis auf's Letzte auswringen. Eher ein Modus für Power-User als für den Otto-Normalo-Mailer also. Dafür wird man mit Möglichkeiten belohnt, die manch anderes Mailfiltersystem ziemlich blass erscheinen lassen.
    In der Konfigurationsdatei wird ein User als Sieve-Admin festgelegt, der zusätzliche Funktionen wie Anlegen von Mailboxen usw. mit WebSieve durchführen darf.

Websieve Konfiguration
Websieve Konfiguration

5.3. Easysieve: Beschreibung

Easysieve ist ein Minimalist. Hier geht es wirklich nur um "Bin nicht da" bzw. "Bin in Urlaub"-Meldungen sowie Weiterleitung ohne große Konfigurationsmöglichkeit. Die Einfachheit ist allerdings kaum zu unterbieten, da lediglich einige Formularfenster genutzt werden, die auch noch eine Hilfe einblenden.

5.4. Hinweis: Ein rabiater Nachteil...

...beider Webfrontends sei allerdings nicht verschwiegen: Sowohl die beiden Arbeitsmodi von Websieve als auch Easysieve überschreiben gegenseitig bereits erstellte Regeln. Ein Wechsel vom Advanced Mode in den Basic Mode unter Websieve, wie auch ein Aufruf von Easysieve, schreddert alles, was bis dahin als Sievescript angelegt war.

5.5. Websieve: Installation

Websieve kommt mit zwei Funktionsbibliotheken: funclib.pl und funclib.cyrus.
Die funclib.cyrus kann laut Dokumentation anstelle der funclib.pl benutzt werden, sie nutzt unmittelbar die Perl-Sieve-Module von Cyrus. In der Praxis hat sich dies unter SuSE 7.1 als gangbar erwiesen, unter SuSE 7.3 treten eine Reihe von Problemen auf. Die Authentifizierung klappt nicht mehr, es müssen dann alle Mailuser per SASL-Datenbank authentifiziert werden.
Der Cyrus-Administrator cyradmin neigt in dem Falle plötzlich zu Fehlern etc. Eine genaue Lokalisierung des Fehlers ist mir nicht gelungen, vermutlich ist die SASL-Kompilierung bei SuSE geändert worden.

Gehen Sie zur Installation so vor:

  • Entpacken Sie die Sourcen von Websieve in ein leeres Verzeichnis.
  • Legen Sie ein Verzeichnis für websieve im cgi-Tree des Webservers an:
      >> mkdir /data/httpd/ro-cgi/websieve
      
  • Kopieren Sie folgende Dateien des Websieve dorthin:
    websieve.conf
    websieve.pl
    Für SuSE 7.1: funclib.cyrus, im Zielverzeichnis umbenennen nach funclib.pl.
    Für SuSE 7.3 funclib.pl

Für SuSE 7.3 benötigen Sie zwei zusätzliche Perl-Module, die Sie wie folgt generieren können:

5.6. Websieve: Installation von IMAP::Admin und perlsieve

  • Entpacken Sie das IMAP::Admin-Modul in ein leeres Verzeichnis
  • Erstellen Sie das Makefile für das Modul mit
      >> perl Makefile.PL
      
  • Erstellen Sie das Modul mit
      >> make
      
  • Sie können das Modul jetzt testen mit
      >> make test
      
    und folgenden Eingaben:
      Enter server: localhost
      Enter login: root
      enter password: geheim
      Test using SSL(y/n) n
      Test using CRAM(y/n) n
      

Der Test sollte mit "no errors" beendet werden. Danach können Sie das Modul mit

  >> make install
  
installieren.

Mit derselben Vorgehensweise wird nun das perlsieve-Modul erstellt:

  • Wechseln Sie in das websieve-Sourceverzeichnis
  • Die "perlsieve-xx.xx.xx.tar.gz" entpacken und in das neu angelegte Verzeichis wechseln
  •   >> perl Makefile.PL
      >> make
      >> make test
      		Sieve server Hostname <localhost>	bestätigen
      		Sieve daemon port <2000>		bestätigen
      		Please enter the user and password at the prompts
      		Enter login name: root
      		Enter password: geheim
      		Enter user ID to proxy as		bestätigen
      
Auch hier sollte der Test "no errors" ergeben, bevor Sie die Installation mit
  >> make install
  
starten.

5.7. Websieve: Anpassung der websieve.conf

Im Folgenden sind nur die geänderten Einträge aufgeführt und kommentiert:

geänderte Einträge der websieve.conf
   #Websieve configuration file
  
   #set $useldapextras=1 to use Jules Agee's ldap administration functions
   $useldapextras=0;			# Kein LDAP verwenden
  
   #set $useauth=1 to use ldap (for ldap password changes)
   $useauth=0;
   $LDAP_SERVER='';
   $LDAP_BASEDN='';
   $ENCRYPT_PASS=1;
   # Alle Einträge als Leerstring, useauth=0, da kein LDAP!
   
   # require "./custom.pl";
   # auskommentiert. custom.pl sind eigene auth-Scripte, die nicht 
   #  existieren...
   
   #secret key - CHANGE THIS to some random data!!!!
   $skey = "your secret key wejiooeJNUWFNfinwmdweidqwed983274wu3";
   # Tastatur.Zufallsgenerator ;-)
   #cyrus admin user id that is used for general mailbox administration
   $cyrusadminuid='root';		# Auf root geändert.
   # default imap server host name 
   $imapserver='localhost';		# der lokale Server wird verwendet!
   
   
   #make sure you set this to your program virtual name and path
   $program_url = "/cgi-bin/websieve/websieve.pl" ;      
   # angepasst auf den verwendeten Pfad
   
   #your mail domain
   $maildomain='dummy.domain' ;		auf die eigene Domain setzen
   
   #default FQHN of the  mail server for use in vacation addresses
   $mailhostappend="server.$maildomain";
   # für server.dummy.domain....
   
   %server_hosts=(
   "server.dummy.domain"=>['Mail-Server','143','2000', 
   'dummy.domain','server.dummy.domain'],
   # ACHTUNG: Bitte den Zeilenumbruch nicht eingeben...
   );
   # Die Angaben an das lokale System anpassen.....
   
   # This is the address that supports your mail server
   $problem_email="root\@$maildomain" ;# Anpassen an den Mailmaster
  


Vergeben Sie noch einige Rechte, damit das Script auch gestartet werden kann:
Wechseln Sie dazu in das Verzeichnis /data/httpd/ro-cgi/websieve und geben Sie ein:

  >> chmod 755 *
  

5.8. Websieve: Bug: "No Errors", keine Anmeldung möglich

Damit wäre die Installation von WebSieve eigentlich abgeschlossen, wäre da nicht ein ärgerlicher Fehler im Script.
Mit einer der letzten Versionen ist offenbar im Cyrus eine Änderung vorgenommen worden. Bei Funktionsaufrufen wird ein String mit der letzten Fehlermeldung zurückgegeben. Bisher war dieser String leer, wenn kein Fehler vorlag, nun gibt das Programm "No Errors" zurück. WebSieve und andere Programme prüfen jedoch auf einen Leerstring, so daß z.B. ein Anmeldeversuch abgebrochen wird. Eine Anmeldung als Postfachverwalter funktioniert hingegen. Als Fehlermeldung erscheint dann etwas abstrus:

    "System errors: No Errors"
  
Ein Blick ins Systemlog sagt, dass die Anmeldung erfolgreich war. Der Abfragefehler findet sich im Websieve.pl-Script, in der hier vorliegenden Version in der Zeile 618
    if ($IMAPERROR && !$ismanager) {
  
Diese Zeile veranlasst WebSieve, das Script zu beenden, wenn ein Fehlertext in $IMAPERROR steht, und der angemeldete Benutzer in websieve.conf nicht als "cyrusadminuid", also Cyrus-Administrator, eingetragen ist.

Ändern Sie die Zeile

    if (($IMAPERROR ne "No Errors") && !$ismanager) {
  
dann klappt das auch mit dem Login.

5.9. Easysieve: Installation

Easysieve ist das Sieve-Webfrontend für "all day use". Es bedient keine speziellen Funktionen und es hat keine Programmieroberfläche. Ein Formular - Fertig. Wie im Script selbst zu lesen "... for dummy users".
Wichtig zu beachten: Es funktioniert nur im Zusammenhang mit WebSieve. Easysieve greift auf die Funktionsbibliotheken von WebSieve zurück!

So installieren Sie Easysieve zu einem vorhandenen Websieve:

  • Legen Sie ein Verzeichnis /root/source/easysieve (oder ähnlich) an
  • kopieren Sie das tar-Archiv in das Verzeichnis und entpacken Sie es dort
    (Andere Reihenfolge beachten! In diesem Archiv ist keine Verzeichnis-Struktur enthalten).
    Easysieve ist für Solaris erstellt, daher sind Anpassungen im Makefile und im entsprechenden Script notwendig.
    Passen Sie die Datei Makefile an: (Auszug aus der Datei)

    Auszug aus Makefile
       SHELL = /bin/sh
       PACKAGE = Changes COPYRIGHT README INSTALL  	Makefile Design easysieve.pl site.subst
       
       # base of http server tree
       BASEDIR = /data/httpd
       HTDOCS = $(BASEDIR)/htdocs
       IMAGES = $(BASEDIR)/images
       CGIBIN = $(BASEDIR)/ro-cgi/websieve
       # Alle Verzeichnisse angepasst auf Testsystem
       
       # the install command:
       #	SunOS 4.1.x
       #INSTALL = install
       #	Solaris 2.x
       #INSTALL = /usr/ucb/install
       INSTALL = /usr/bin/install
       # angepasst für Linux
       
       . . . 
       
       install-cgi: easysieve.pl
      	sed -f $(SUBST) < easysieve.pl > /tmp/.pl
      	$(INSTALL) -m 555 -o root -g nogroup /tmp/.pl $(CGIBIN)/easysieve.pl
           # ACHTUNG: Die Gruppe wurde auf "nogroup" geändert!
      	rm /tmp/.pl
                                      
      


  • Passen Sie nun die Datei site.subst an
      s#%IMAPSRV%#server.dummy.domain#
      s#%ALTSRV%#localhost#
      s#%EMAILDOM%#dummy.domain#
      s#%HOMELINK%#server.dummy.domain/#
      

  • Installieren Sie die Dateien mit
      >> make site-install
      
  • Ändern Sie in der installierten easysieve.pl (nicht im Source-Verzeichnis!) die erste Zeile:
    Statt "/usr/local/bin/perl - w" muss dort "/usr/bin/perl -w" stehen.
    Ändern Sie ca. Zeile 1165:
    Statt "if (SIMAPERROR)" muss dort "if ($IMAPERROR ne "No Errors")" stehen.
    Auch hier schlägt die bereits bei WebSieve beschriebene Änderung im Cyrus zu.

5.10. Wie fange ich es an?

Nun, wenn Sie ein wenig mit Easysieve experimentieren, werden Sie schnell einige einfache Möglichkeiten, wie z.B. Abwesenheitsbenachrichtigung, Urlaubsnachricht usw. entdecken.
Diese Möglichkeiten sind im WebSieve basic Mode etwas ausgefeilter als bei Easysieve, aber grundsätzlich ähnlich.
Interessanter wird es im Advanced Mode von WebSieve. Als Beispiel ein Script, das das automatische Einsortieren von Mails vornimmt:

Sortierscript
  require ["fileinto"];
  
  if header :contains "subject" "LNM-list" {
       fileinto "INBOX.LinuxNetMag";
  }
  elsif header :contains "subject" "Cron" {
       fileinto "INBOX.System";
  }
  elsif header :contains "from" "gmx-ag.de" {
       discard;
  }
  elsif header :contains "from" "gmxred@gmx.net" {
       discard;
  }
  elsif header :contains "from" "conrad.de" {
       fileinto "INBOX.Conrad";
  }
  elsif header :contains "from" "mandrakesoft.com" {
       fileinto "INBOX.Mandrake";
  }
  else {
       fileinto "INBOX";
  }
  


Eigentlich recht einfach, es wird schlicht nach Feldern des Mailheaders in bestimmte Ordner sortiert (oder - im Falle der bekannt lästigen Werbemüllmails von GMX - verworfen). Wichtig ist nur die Schreibweise beim fileinto. Das "INBOX." wird erfahrungsgemäß allzuleicht vergessen ;-).

Weitere Aktionsmöglichkeiten neben "fileinto" und "discard"

  	redirect anton@muster.de
  	keep
  
Diese Aktion leitet die Mail weiter an Anton@muster.de, das optionale "keep" belässt eine Kopie in der INBOX.
      reject "will ich nicht haben"
  
Weist die Mail zurück, der Absender erhält den nachgestellten Text als Benachrichtigung.

Ich warne davor, dies für die üblichen rituellen Beschimpfungen an die Absender von Spam-Mail zu verwenden. Entweder scheitern diese Mails am Server des Absenders und werden dort verworfen, damit ist nichts gewonnen. Oder der Absender weiss, das die verwendete Adresse "scharf" ist, dann bekommen Sie nur noch mehr Werbemails. Auch ein grober Text beeindruckt die Absender in der Regel überhaupt nicht, also verwenden Sie lieber die Option "discard" für derlei Mails.

   require "vacation";
   vacation :days 7 :addresses "anton@muster.de"
   "Ich bin außer Haus und werde Ihre E-mail erst am 31.2.2045 lesen.
   Wenden Sie sich in dringenden Fällen bitte an ...";
  
Automatische Urlaubsnachricht. Bitte vergessen Sie nicht, am Anfang des Scriptes muss das require "vacation" stehen! Die Angabe "days 7" sagt aus, dass der Schreiber bei der ersten Mail eine Nachricht erhält, dann aber erst wieder in 7 Tagen. Unter dem Stichwort "adresses" steht Ihre Mailadresse. Nur Mails, die an diese Adresse gesendet werden, erhalten eine Nachricht. Das macht Sinn, wenn Sie z.B. mehrere Adressen unter einem Account bei GMX besitzen oder ähnlich.

Weitere Beispiele finden Sie z.B. unter
http://www.tu-chemnitz.de/urz/mail/cyrus/sieve.html und
http://www.holtmann.org/email/sieve/

5.11. Hinweise

Es sei ausdrücklich darauf hingewiesen, dass sich Sieve immer noch etwas hakelig benimmt.
Es war mir nicht möglich, die "reject"-Aktion sicher zum Arbeiten zu überreden, es scheint immer noch einige Probleme entweder in der Kompilierung von SuSE oder im Programm selbst zu geben. Schaut man in die Mailinglisten, so bin ich da wohl nicht der einzige.....;-)

Darüber hinaus sollte man beachten, dass einige Mailprovider diese Funktionen nicht zulassen.
So sperrt z.B. der kostenlose GMX-Classic-Dienst die meisten automatischen Antworten. Diese kommen mit dem Vermerk zurück, diese Dienste stünden nur in der kostenpflichtigen Version zur Verfügung.

ACHTUNG: Böse Falle!
Sollten Sie einen solchen Mailaccount Ihr Eigen nennen, prüfen Sie unbedingt, ob diese Dienste für Sie zugelassen sind, sonst müllen Sie sich innerhalb kürzester Zeit die Mailbox voll.
Denn der Provider schickt dann eine Fehlermeldung, die Ihr Server pflichtschuldigst mit einer Abwesenheitsmeldung beantworet. Diese wiederum provoziert eine weitere Fehlermeldung vom Provider und so weiter und so weiter........ Das geht so weiter, bis Sie den Server stoppen oder Ihr Provider Sie rauswirft.




Talkback Area




Enter Own Comment