logo Homepage Wolfgang Wilhelm :: v 0.9.1 21.02.2006 :: (v.0.9 __ 14.04.03)  
 
impressum :: feedback ::  Rubiks Magic ::  aktuelles   
Startseite
 LINKWEG ::: inhalt / sendmail als MTA / Milter Schnittstelle


sendmail als Mail Transport Agent

 

milter  Milter Schnittstelle

anker Sendmail Milter Schnittstelle
anker Virenscanner
anker Bogofilter

 

Sendmail Milter  
seitenanfang
 

Mail Filter Schnittstelle

sendmail wurde bereits mit der MILTER Direktiven intern kompiliert. Ein /usr/sbin/sendmail -d0.12 -bv root sollte die Ausgabe MILTER beinhalten:

Version 8.13.4
 Compiled with: DNSMAP LOG MATCHGECOS MILTER MIME7TO8 MIME8TO7
		NAMED_BIND NETINET NETUNIX NEWDB PIPELINING SASLv2 SCANF
		STARTTLS USERDB XDEBUG
...

Sendmail unterstützt Mailfilter um eingehende SMTP-Nachrichten entsprechend der "Sendmail Mail Filter API"-Dokumentation zu filtern. Diese Filter werden in der .mc-Datei konfiguriert:

  MAIL_FILTER(`name', `argumente')
   oder
  INPUT_MAIL_FILTER(`name', `argumente')

Die beiden Anweisungen
INPUT_MAIL_FILTER(`amavis-milter', `S=local:/var/amavis/amavis-milter.sock, F=R')
INPUT_MAIL_FILTER(`bogofilter-milter', `S=local:/var/run/bogofilter-milter.sock, F=T')

sind gleichwertig mit den drei Anweisungen:
MAIL_FILTER(`amavis-milter', `S=local:/var/amavis/amavis-milter.sock, F=R')
MAIL_FILTER(`bogofilter-milter', `S=local:/var/run/bogofilter-milter.sock, F=T')
define(`confINPUT_MAIL_FILTERS', `amavis-milter, bogofilter-milter')

Im Allgemeinen sollte INPUT_MAIL_FILTER() verwendet werden, solange Sie nicht mehr Filter definieren möchten, als Sie in confINPUT_MAIL_FILTERS verwenden werden.

 

Virenscanner  
seitenanfang
 

eingehende Post nach Viren durchsuchen

Um die Mail nach Würmern,Viren etc. zu durchsuchen braucht man einen Virenscanner sowie das Bindeglied zwischen sendmail und Scanner, den Milter.
Ich setzte beispielsweise extern AntiVir Professional for Linux Workstations und extern AMaViS ein. Für den privaten Einsatz zu Hause erhält man von AntiVir eine einjährige Lizenz kostenfrei zugesandt.

AntiVir

AntiVir

Hier gibt es nicht viel flasch zu machen, ein Installationsskript ist im Setup enthalten. Es muss nur noch die erhaltene Lizenzfdatei hbedc.key nach /usr/lib/AntiVir kopiert werden.



AMaViS

AMaViS

Ich fand die Seite zuerst etwas verwirrend, da dort mehrere amavis Pakete liegen und einem nicht direkt klar ist welche Version zu nehmen ist. Aus Performancegründen kommen eigentlich nur noch die Daemonversionen in Frage, ich benutzte download amavisd-0.1. Dieses Hilfsprogramm entpackt/decodiert die Mail, dazu benötigt es noch ein paar Module. In der beigepackten README ist beschrieben, welche zusätzlichen Perlmodule vonnöten sind. Am einfachsten einfach ./configure ausführen, die Routine beschwert sich schon über die fehlenden Module:

    checking for perl modules... 
        module not found in path: 'Convert/UUlib'.
        module not found in path: 'Convert/TNEF'.
	module not found in path: 'Compress/Zlib'.
	module not found in path: 'Archive/Tar'.
	module not found in path: 'Archive/Zip'.
      

Diese sind sehr einfach über die Kommandozeile oder externCPAN zu installieren:

	perl -MCPAN -e 'install Convert::UUlib'
	perl -MCPAN -e 'install Convert::TNEF'
	...
      

Damit begnügt sich AMaViS aber nicht, laut README folgt noch:

  • arc ftp://ftp.uu.net/pub/archiving/
  • bunzip2 (part of the bzip2 package) http://sources.redhat.com/bzip2/
  • lha (version 1.14g or later!) http://shibuya.cool.ne.jp/lha/
  • unarj ftp://sunsite.unc.edu/pub/Linux/utils/compress/
  • uncompress (standard on Unix and Unix-like systems) ftp://sunsite.unc.edu/pub/Linux/utils/compress/compress.tar.Z
  • unrar ftp://sunsite.unc.edu/pub/Linux/utils/compress/
  • zoo ftp://metalab.unc.edu/pub/Linux/utils/compress/

Eine Übersicht bietet die extern AMaViS-Webseite.
Diese sollten bei der Distribution enthalten sein, sonst mit google oder extern RPMfind auftreiben.
Somit hat AMaViS (fast) die nötigen Voraussetzungen. Leider findet das Skript nicht die sendmail Milter Libs.

	checking for sm_errstring in -lsm... no
	checking for libmilter/mfapi.h... no
	We will use sendmail as the MTA
      

In diesem Fall:
Die Milterlibs aus dem Sendmail Source Verzeichnis nach /usr/lib kopieren oder linken und ldconfig ausführen

sendmail-8.13.4/obj.linux.2.4.31.i686/libmilter/libmilter.a libmilter.a
sendmail-8.13.4/obj.linux.2.4.31.i686/libsm/libsm.a
sendmail-8.13.4/obj.linux.2.4.31.i686/libsmdb/libsmdb.a
sendmail-8.13.4/obj.linux.2.4.31.i686/libsmutil/libsmutil.a

Die exakte Position der Dateien hängt von der verwendeten Plattform ab.

Im AMaViS sourcen Verzeichnis zunächst den alten configure cache mit "rm config.cache" löschen und übersetzen:

	  ./configure --enable-milter --with-warnsender=no --sysconfdir=/etc --prefix=/usr --enable-syslog=no --with-sockname=/var/amavis/amavisd.sock 
	
Das Ergebnis sollte ähnlich aussehen, wichtig ist die sendmail/milter Zeile
	  Install amavis daemon as:   ${exec_prefix}/sbin/amavisd
	  Install amavis client as:   ${exec_prefix}/sbin/amavis
	  Daemon config file:         /etc/amavisd.conf
	  Path to socket:             /var/amavis/amavisd.sock
	  Configured for use with:    libmilter
	  Configuration type:  	      sendmail/milter
	  Use virus scanner(s):       H+BEDV AntiVir/X
	  Scanner runs as:            amavis
	  Log file directory:         /var/amavis
	  Run-time directory:         /var/amavis
	  Warn sender:                no
	  Warn recipient(s):          no
	  Notify admin:               yes
	
Aus Sicherheitsgründen (die MILTER sollten nicht unter dem Benutzer root laufen) noch einen unpreviligieren Benutzer amavis erstellen und das Verzeichnis /var/amavis übereignen. make und make install komplettieren das Setup.
Nun gilt es noch die Schnittstellen zu AMaViS und sendmail zu starten:
  • su amavis -c "/usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock &"
  • su amavis -c "/usr/sbin/amavisd"

Im Verzeichnis /var/amavis sind nun zwei Sockets zu sehen, amavis-milter.sock und amavisd.sock.


 

Werbefilter - bogofilter  
seitenanfang
 

eingehende Post auf Werbung / unerwünschte Inhalte filtern

Um die Post nach Werbung (Spam) oder unerwünschte Inhalte zu sortieren (oder direkt am Server ablehen) wird extern Bogofilter als Milter eingesetzt.
Bogofilter klassifiziert mail als spam oder ham (non-spam) durch statistische Analyse der Message Header sowie dem Inhalt (body). Der Filter ist fähig sich selbst zu trainieren, natürlich können manuelle Korrekturen vorgenommen werden. Die Methode ist bekannt als the Bayesian technique und wurde beschrieben von Paul Graham in seinem Artikel A Plan For Spam,August 2002.

bogofilter

Bogofilter

Download von extern Sourceforge und entpacken. Damit die Software ebenso gegen BDB4 gelinkt wird noch die Compilerflags setzen:

	LDFLAGS=-L/usr/local/BerkeleyDB.4.1/lib/ CPPFLAGS=-I/usr/local/BerkeleyDB.4.1/include/ ./configure --prefix=/usr --sysconfdir=/etc
	make && make install
      

Der Sendmail Filter befindet sich in contrib/bogofilter-milter.pl, diese bsp. nach /usr/sbin kopieren und den eigenen Gegebenheiten anpassen. Das wichtigste für einen Statistikfilter sind bereits vorhandene Spam/Ham Mails, die in eine Datenank verfüttert werden.Damit auf Benutzerbasis gefiltert werden kann muss in /etc/bogofilter.cf die Option bogofilter_dir=~/.bogofilter gesetzt sein.

  • Anlernen: bogofilter -s < spammail
    bogofilter -n < hammail
  • Mail wird aus der Spam-Wortliste gelöscht und zur Ham-Liste hinzugefügt
    bogofilter -Sn < spammail
  • Mail wird aus der Ham-Wortliste gelöscht und zur Spam-Liste hinzugefügt
    bogofiter -Ns < hammail

Dazu noch $HOME/.bogofilter/training (oder die in bogofilter-milter.pl gesetzte) Datei anlegen. Diese bewirkt das unerwünschte Post nicht abgelehnt sondern markiert wird. Diese Einstellung sollte man am Anfang beibehalten, der Filter trainiert sich damit selbst. Entfernt man diese Datei, werden eingehene Spammails direkt am Server abgelehnt.Die Filtersoftware benutzt noch folgende, nicht-standard Perl module:

  • Sendmail::Milter
  • Mail::Alias
  • Proc::Daemon

Diese direkt bei extern CPAN suchen oder per shell installieren. Dies hat den Vorteil das eventuelle Abhängigkeiten mit aufgelöst werden.

	  perl -MCPAN -e 'install Mail::Alias'
	  perl -MCPAN -e 'install Proc::Daemon'
	

Sendmail::Milter kann nicht automatisiert installiert werden, die Konfiguration verlangt das sendmail Quellenverzeichnis:
Usage: perl Makefile.PL <path-to-sendmail-source> <path-to-sendmail-obj.dir>

	  Sendmail-Milter-0.18> perl Makefile.PL /usr/local/src/sendmail-8.13.4/ /usr/local/src/sendmail-8.13.4/obj.Linux.2.4.31.i686/
	

Manche Distributionen kompilieren Perl ohne Threads, dann muss Perl mit -Dusethreads neu übersetzt werden.(SourceRPM oder Quellpaket) Die Flags der z.Zt. installierten Version können per perl -V im Unterpunkt config_args nachgesehen werden. Bei mir ist der Vorgang (perl-5.8.0) bei der Kompilation von DB_File abgebrochen, dort scheint ein zu BerkeleyDB4 inkompatibles Perlmodul mitgeliefert, ein Austauch mit einer aktuellen Version (DB_File-1.806.tar.gz) hat das Problem gelöst.
Bei der Installation einer neuen Perlversion müssen auch alle bisherigen Module neu installiert werden!

	  ./configure.gnu -ds -e -Dprefix=/usr -Di_db -Di_dbm -Di_ndbm -Di_gdbm -Duseshrplib=true -Dusethreads
	  make && make test && make install
	
Ein
	  /usr/sbin/bogofilter-milter.pl --daemon
	

startet endlich den Prozess.
Nach einen sendmail reload mit den gesetzten Mailfilter Macros ist der Spamfilter aktiv. Mit der angelegten training Datei wird eingehende Post mit X-Bogosity: Yes|No im Header markiert, nach dem gefiltert werden kann. Als Beispiel dient ein Cyrus Sieve Skript:

	  require ["fileinto"];
	  if anyof (
	  # Blacklisted ip subnets due to excessive spam from them
	  header :contains "Received"
             [ "[4.63.221.224",
               "[208.46.5.","[208.187.",
               "[209.164.27.","[209.236.",
               "[218.160.42.74", "[218.242.112.4]"
             ],
	  # Blacklisted SpamAssassin flags
	  header :contains ["X-Bogosity"]
             ["Yes","YES", "yes"]
	  # Almost all emails from these domains is spam
	  #header :contains "Received"
	  #                 [".ru ",".jp ", ".kr ",".pt ",".pl ",".at ",".cz "],
	  ) {
	  fileinto "INBOX.spam";
	  stop;
	  }
	

 




left  starke Verschlüsselung
right
 
Seitenanfang
           © 2003 by Wolfgang Wilhelm • mail:   wwilhelm at rz-online dot de handmade by xemacs   Valid XHTML 1.0!
Last modified: Tuesday, 11-Apr-2006 11:02:42 CEST
counter