Am 11.06.2005 um 10:36 schrieb Joerg Rossdeutscher:

Hallo,

Ich bastle mir einen Mailserver, der Spam herausfiltern soll.
[..] Es soll ein exim transport/router sein.

Warum m�chtest Du Deine Post nicht gleich beim Eingang filtern?

Wenn Du das Paket exim4-daemon-heavy installierst, kannst Du Nachrichten mit ClamAV und SpamAssassin auf recht einfache Art und Weise gleich beim Eingang �berpr�fen. Das ist in der Exim- Dokumentation im Abschnitt "Content scanning" dokumentiert.

Ich bin bei uns so vorgegangen:

In /etc/exim4/conf.d/main legst Du eine Datei folgenden Inhalts an:

 acl_smtp_mime = acl_check_mime
 av_scanner = clamd:/var/run/clamav/clamd.ctl
 spamd_address = /var/run/spamassassin/spamd.sock

Damit ClamAV reinkommende Post pr�fen kann, muss der Benutzer clamav in die Gruppe Debian-exim:

 Debian-exim:x:103:clamav

Nicht vergessen, ClamAV nach dieser �nderung neu zu starten!

Au�erdem w�rde ich, falls Dein Mailserver direkt ans Internet angeschlossen ist, Greylisting einsetzen. Dazu installierst Du das Paket greylistd, �nderst die Exim-Konfiguration mit "greylistd-setup- exim4 add -netmask=24" und tr�gst in /etc/greylistd/whitelist-hosts ggf. die IP-Adressen, von denen Ihr regelm�ssig Post bekommt, ein.

Zur SpamAssassin-Konfiguration weiter unten mehr. Jetzt erstmal zur�ck zu Exim:

Im acl-Unterverzeichnis solltest Du eine Datei folgenden Inhalts anlegen:

 acl_check_mime:

   # Decode MIME parts to disk. This will support virus scanners later.
   warn
     decode = default

   # File extension filtering.
   deny
     message = Blacklisted file extension detected
     condition = ${if match \
                      {${lc:$mime_filename}} \
                      {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com)$\N} \
                   {1}{0}}

   accept

Au�erdem musst Du 40_exim4-config_check_data �ndern oder, wie in 40_exim4-config_check_data beschrieben, das Makro CHECK_DATA_LOCAL_ACL_FILE festlegen. In diese Datei sollte dann in etwa folgendes:

  # Reject virus infested messages.
  deny
    message = This message contains malware ($malware_name)
    malware = *

  # Always add X-Spam-Score header, using SA system-wide settings
  # (user "nobody"), no matter if over threshold or not.
  warn
    message = X-Spam-Score: $spam_score ($spam_bar)
    sender_domains = !+mm_domains
    condition = ${if <{$message_size}{200K}{yes}{no}}
    spam = nobody:true

  # Add X-Spam-Flag if spam is over system-wide threshold
  warn
    message = X-Spam-Flag: YES
    sender_domains = !+mm_domains
    condition = ${if <{$message_size}{200K}{yes}{no}}
    spam = nobody

  # Reject spam messages with score over 12, using an extra condition.
  deny
    message = This message scored $spam_score points. Congratulations!
    !acl = acl_whitelist_local_deny
    sender_domains = !+mm_domains
    condition = ${if <{$message_size}{200K}{yes}{no}}
    spam = nobody:true
    condition = ${if >{$spam_score_int}{120}{yes}{no}}

Mit obigen Regeln werden alle Nachrichten auf Viren hin untersucht und ggf. abgewiesen. Nach Spam wird nur in Mails, die kleiner als 200KB sind, gesucht. Unerw�nschte Werbung, deren Score gr��er als 12 ist, wird gleich beim Empfang abgewiesen. Der Rest wird mit X-Spam- Flag markiert.

Die Zeilen mit sender_domains stellen sicher, dass Nachrichten, die unser lokaler Mailman verteilt, nicht doppelt �berpr�ft werden. Entferne sie, wenn Du Mailman nicht einsetzt und mm_domains in Deiner Exim-Konfiguration nicht gesetzt ist.

Falls Du fetchmail verwendest, solltest Du in Deiner fetchmailrc den Fehlercode, mit dem Exim unerw�nschte Werbung ablehnt, eintragen:

 defaults
         antispam 550

Ein Problem bei der Verwendung von fetchmail ist, dass abgewiesene Nachrichten nicht gebounct werden, sondern im Nirvana verschwinden. Deswegen w�rde ich den Schwellwert, ab dem Spam abgewiesen wird, nicht zu niedrig ansetzen. Fang am besten wie im obigen Beispiel mit einem Schwellwert von 12 an und senke den Wert, wenn Du sicher bist, dass keine "false positives" abgewiesen werden.

Ein weiteres Problem beim Einsatz von fetchmail ist, dass Exim nur die ersten 10 Nachrichten direkt annimmt. Der Rest landet in der Warteschlange. Exim hat einige Parameter, mit denen man dieses Verhalten anpassen kann. Ich w�rde aber einfach QUEUEINTERVAL in /etc/ default/exim4 auf 5 Minuten runter setzen.

Jetzt zu SpamAssassin:

Der spamd l�uft unter Debian standardm�ssig mit root-Rechten. Das w�rde ich �ndern. Du legst dazu einen Benutzer namens spamd und folgende Verzeichnisse an:

 adduser --system --home /var/lib/spamassassin --group spamd
 chmod 0777 /var/lib/spamassassin
 mkdir /var/run/spamassassin
 chown spamd:spamd /var/run/spamassassin

In /etc/default/spamassassin setzt Du ENABLED auf 1 und ersetzt die Variablen OPTIONS und PIDFILE durch folgendes:

OPTIONS="--username spamd --helper-home-dir /var/lib/spamassassin -- socketpath /var/run/spamassassin/spamd.sock"

 PIDFILE="/var/run/spamassassin/spamd.pid"

Bevor Du den spamd startest, solltest Du noch /etc/spamassassin/ local.cf anpassen:

 auto_whitelist_path /var/lib/spamassassin/auto-whitelist
 auto_whitelist_file_mode 0777

 bayes_path /var/lib/spamassassin/bayes
 bayes_file_mode 0777

Wenn Du nicht allen Benutzern, die auf Deinem Mailserver einen Shell- Zugang haben, vertraust, kannst Du anstelle von 0777 eingeschr�nktere Berechtigungen verwenden.

So, ich hoffe, dass ich nichts vergessen habe.

Attachment: PGP.sig
Description: Signierter Teil der Nachricht

Antwort per Email an