[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Exim und Spamassassin: Crash, wenn viele Mails



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


Reply to: