Amavis finomhangolás

  • Beküldve: 2015. május 20, 22:18
  • Szerző: Bolemányi Attila

Az Amavis egy trükkös kis jószág. Annyira jól hangzik, hogy képes többféle víruskereső motorral és spamszűrővel is együttműködni, hogy szinte könnybe lábad tőle az ember szeme. Természetesen az Amavis valóban képes erre, azonban a Spamassassinnal való együttműködés azért mégsem annyira egyértelmű.

A jelenlegi összeállításban nem szerepel a Spamassassin démon telepítése, mivel az Amavis önmaga spamszűrője is egyben. Ehhez felhasználja a Spamassassin libraryket, meg beleolvas a Spamassassin konfigurációs fájljaiba is (néhány, az interneten elérhető leírás ezt egyébként tagadja), de ebből nem minden beállítást vesz figyelembe, illetve az Amavis konfigurációs fájlokban meghatározhatunk olyan beállításokat, amelyek előnyt élveznek az ugyanilyen, Spamassassinban beállított értékekkel szemben.

Szóval, nem is annyira egyértelmű ezt a két jómadarat közös munkára fogni, mint az első látásra egyértelmű lenne.

Az alábbiakban igyekszem egy-két pontot tisztázni és ajánlatot tenni néhány kiegészítő beállításra is.

Amikor az Amavis átvizsgál egy levelet, megpróbálja kideríteni, hogy a levél bejövő levél (a címzett postafiókja ezen a szerveren található), vagy pedig kimenő levélről van szó. Ehhez megnézi a @local_domains_acl változó értékét (a /etc/amavis/conf.d/05-domain_id fájlban található), amely alapesetben a levelezőszerver tartománynevét tartalmazza. Abban az esetben viszont, amikor egy szerveren több virtuális domain található, akkor erre a célra ez a változó nem használható. Szerencsére van lehetőségünk egy SQL lekérdezést lefuttatni, amely választ ad erre a kérdésre.

A /etc/amavis/conf.d/50-user fájlnak legyen ez a tartalma:

use strict;

#
# Place your configuration directives here.  They will override those in earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of the directives you can use in this file
#

$sa_tag_level_deflt = -9999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_spam_subject_tag = '***Possible SPAM***';
$final_spam_destiny  = D_PASS;

@lookup_sql_dsn = ([
   'DBI:mysql:database=postfix;host=127.0.0.1;port=3306',
   'postfix',
   'Pa$$w0rd'
]);

$sql_select_policy = 'SELECT domain FROM domain WHERE CONCAT("@",domain) IN (%k)';

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

A fenti beállítások több mindent is megoldanak az érdekünkben.

  • A @lookup_sql_dsn változó tartalmazza a postfix adatbázishoz való kapcsolódás paramétereit.
  • A $sql_select_policy által definiált lekérdezést futtatja le az Amavis, amikor átvizsgál egy levelet.
    • Ha az eredmény alapján a vizsgált levél bejövő levélnek minősül (azaz a címzett postafiókja ezen a szerveren található), akkor egyrészt elvégzi a vírus- és spamszűrési feladatokat, másrészt a levél fejlécében elhelyezi az X-Spam-Flag, az X-Spam-Score, az X-Spam-Level és az X-Spam-Status bejegyzéseket. Ezek a bejegyzések csak akkor jelennek meg tehát, ha a levél címzettjének postafiókja a mi szerverünkön található.
    • Ha a vizsgálandó levél kimenő levélnek minősül, akkor az Amavis nem tolja át a szűrőn, így például néhány száz hírlevél kiküldése nem fog órákon keresztül tartani.
  • Az $sa_tag_level_deflt után írt pontszám felett az X-Spam információk bekerülnek a levél fejlécébe.
  • Az $sa_tag2_level_deflt után írt pontszám felett a "Spam detected" fejlécadat is megjelenik.
  • Az $sa_spam_subject_tag határozza meg, hogy az Amavis a levél tárgyába mit írjon, ha egy levelet spamnek osztályozott. Erre a tartalomra viszont a felhasználók könnyen meghatározhatnak például egy szerver oldali szűrőt a sieve segítségével.
  • A $final_spam_destiny pedig a spamnek ítélt levéllel végzendő műveletet határozza meg, amely jelen esetben a felhasználónak való továbbítást jelenti (azzal együtt, hogy a tárgyban már szerepel a vizsgálat eredménye). Az alapértelmezett beállítás szerint az Amavis visszaküldi a levelet a feladónak (D_BOUNCE), aminek nincs sok értelme, ugyanis a raklámlevelek legtöbbje nem létező email címet ad meg feladónak. Mi viszont átadjuk a felhasználóknak (D_PASS), hogy ők hozzák meg a végső döntést a levéllel kapcsolatban.

Indítsuk újra az Amavist:

service amavisd-new restart

Ha a fenti beállítások elmaradnak, hiába is várjuk a levél fejlécében az X-Spam adatokat:

Return-Path: <attila@free-learning.local>
Delivered-To: bolemanyi.attila@comega7.local
Received: from localhost (localhost [127.0.0.1])
    by mailserver.comega7.local (Postfix) with ESMTP id F10A1BF934
    for <bolemanyi.attila@comega7.local>; Wed, 20 May 2015 20:03:11 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mailserver.comega7.local
Received: from mailserver.comega7.local ([127.0.0.1])
    by localhost (mailserver.comega7.local [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id WiocgyLqvvt6 for <bolemanyi.attila@comega7.local>;
    Wed, 20 May 2015 20:03:06 +0200 (CEST)
.
.
.
Content-Transfer-Encoding: 7bit

Ha viszont a fenti beállításokat elvégezzük és újraindítjuk az Amavist, rögtön látszik a különbség:

Return-Path: <attila@free-learning.local>
Delivered-To: bolemanyi.attila@comega7.local
Received: from localhost (localhost [127.0.0.1])
    by mailserver.comega7.local (Postfix) with ESMTP id 5A518BFBEF
    for <bolemanyi.attila@comega7.local>; Wed, 20 May 2015 23:02:03 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mailserver.comega7.local
X-Spam-Flag: NO
X-Spam-Score: -1
X-Spam-Level:
X-Spam-Status: No, score=-1 tagged_above=-9999 required=6.31
    tests=[ALL_TRUSTED=-1] autolearn=disabled
Received: from mailserver.comega7.local ([127.0.0.1])
    by localhost (mailserver.comega7.local [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id IpYCiP3MYct1 for <bolemanyi.attila@comega7.local>;
    Wed, 20 May 2015 23:02:01 +0200 (CEST)
.
.
.
Content-Transfer-Encoding: 8bit

Az X-Spam-Status végén olvasható, hogy a Spamassassin Bayes filtere ki van kapcsolva: autolearn=disabled. Az alapértelmezett telepítés beállításai alapján ez persze be van kapcsolva a Spamassassin /etc/spamassassin/local.cf fájlban, és én csak azért iktattam ki, hogy egyértelmű legyen: az Amavis igenis használja a Spamassassin beállításait (ha nem is az összeset).

Ha a /etc/spamassassin/local.cf fájlban ezek szerepelnek (vagy a telepítéskor egyáltalán nem is nyúlsz hozzá, mivel ezek az alapértelmezett értékek):

use_bayes 1
bayes_auto_learn 1
bayes_auto_expire 0

Akkor, újraindítva az Amavist, egy levél beérkezésekor az alábbiakat találjuk annak fejlécében:

Return-Path: <attila@free-learning.local>
Delivered-To: bolemanyi.attila@comega7.local
Received: from localhost (localhost [127.0.0.1])
    by mailserver.comega7.local (Postfix) with ESMTP id 7DF69BF9C7
    for <bolemanyi.attila@comega7.local>; Wed, 20 May 2015 23:12:38 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mailserver.comega7.local
X-Spam-Flag: NO
X-Spam-Score: -1
X-Spam-Level:
X-Spam-Status: No, score=-1 tagged_above=-9999 required=6.31
    tests=[ALL_TRUSTED=-1] autolearn=ham autolearn_force=no
Received: from mailserver.comega7.local ([127.0.0.1])
.
.
.
Content-Transfer-Encoding: 8bit

Az X-Spam-Status sorának végén most változott a kép: autolearn=ham. Vagyis a Bayes filter működik és tapasztalatokat szerez. Most éppen hasznosnak ítélte a kapott levelet (ham).

Egy biztos: a Spamassassin és az Amavis párost jól beállítani sok utánajárást és dokumentum olvasást igényel. Ideje hozzálátni...