Difference between revisions of "Email Server - Extended Spam filtering"

From berki WIKI
Jump to: navigation, search
(Pyzor)
(Razor)
Line 54: Line 54:
 
Lehetőség van saját Pyzor szerver működtetésére, azonban tanácsos a hivatalos szervert használni, amit csak úgynevezett "spam" szakértők taníthatnak, átlagos felhasználók csak lekérdezéseket futtathatnak rajta.
 
Lehetőség van saját Pyzor szerver működtetésére, azonban tanácsos a hivatalos szervert használni, amit csak úgynevezett "spam" szakértők taníthatnak, átlagos felhasználók csak lekérdezéseket futtathatnak rajta.
  
== Razor ==
+
== Vipul's Razor ==
 
 
  
 
== DCC ==
 
== DCC ==

Revision as of 21:52, 19 September 2016

Eszközök

Spamassassin

Bayes and AWL

The Auto-WhiteList

DKIM

DKIM (DomainKeys Identified Mail): http://www.dkim.org/

  • A DKIM szerver a levelet elküldés előtt a titkos kulcsával aláírja, majd az aláírást elhelyezi az email fejlécében.
  • A DKIM kliens az email-hez hozzárakott digitális aláírás segítségével ellenőrzi a beérkező emailt, hogy valóban az küldte e aki a feladókén szerep benne, ezen felül az időpont és a tárgy lett e módosítva. A DKIM kliens a publikus kulcsot az email domain DNS szerverétől kérdezi le.

A DNS szerverben lehetőség van úgynevezett TXT rekordok felvételére. A TXT rekordokban tetszőleges, emberek által is megérthető szöveget lehet elhelyezni. DNS rekordok:

  • SOA: globális beállításai a zóna fájlnak
  • NS: a DNS szerver domain neve az adott domain-ben.
  • MX: (mail exchange), a mail kiszolgálója az adott domain-nek
  • A: normál domain – ip cím összerendelések.
  • TXT: tetszőleges szöveg

A DNS szerverünkben el kell helyezni egy új TXT rekordot az adott domainhez. Pl a berki.org domainhez hozzá adjuk a dkim nevű TXT típusú rekordot, amiben elhelyezzük a berki.org publikus kulcsát. Ezt a TXT típusú rekordot nevezik a DKIM terminológia szerint selctor-nak. A DKIM szerverünk a kiküldött email fejlécében az aláíráson felül elhelyezi a szelektort is. A DKIM kliens lekérdezi a DNS szervertől a szelekor-ban megadott TXT típusú rekordot, és kiolvassa belőle a szerver publikus kulcsát, amivel kititkosítja a DKIM szerver által készített aláírást. A benne található host nevet összehasonlítja az email fejlécében szereplő host névvel. Három féle DKIM aláírás típus létezik, ami befolyásolja azon email-ek sorsát amik nincsenek aláírva.

  1. Nem minden email van aláírva az adott domain-ből.
  2. Miden email alá van írva amit az adott domain-ből küldünk. Ha egy email nincs aláírva, akkor valószínűleg spam.
  3. Minden email alá lesz írva. Ha egy email nincs aláírva, akkor az tuti hogy spam, azonnal törlendő.

Az aláírás típusát két további TXT típusú DNS rekord vezérli, melyeknek a neve kötött, a szabvány írja elő a nevüket:

  • _domainkey (domain policy)
    • "o=~"
    • "o=-"
  • _adsp._domainkey:
    • "dkim=unknown"
    • "dkim=all"
    • "dkim=discardable"

A selector TXT rekordja a típust is tárolja, ezért mikor a DKIM szerver lekérdezi a DNS -töl az aláírást, azt is megtudja, hogy mit tegyen hogy ha a selctor megléte ellenére nincs egy mail aláírva.

WarningIcon.png

Warning
Ha egy email nincs aláírva annak ellenére, hogy a DNS szerverben találunk DKIM rekordot, vagy az aláírás nem valid, nem jelenti azt hogy az email 100%-ban spam. A fejléc menet közben módosulhat, megsérülhet, vagy átmenetileg szünetelhet a DKIM aláírás a szerben bármilyen technikai hiba miatt


TipIcon.png

Tip
A no-ip.com dinamikus DNS szolgáltató is támogatja a DKIM használatát


Pyzor

http://pyzor.readthedocs.io/en/release-1-0-0/introduction.html

A Pyzor egy közösségi spam adatbázis, kliens - szerver architektúra. A beérkező levélből a Pyzor kliens készít egy lenyomatot, amit elküld a Pyzor szervernek. A válaszban a szerver visszaküldi, hogy az adott lenyomatot már jelentették e. Ha igen, akkor fehér vagy fekete listán van, és hányszor jelentették. Ezt az információt a Pyzor átadja a szkennelő szoftvernek, ami eldönti, hogy mit kezdjen az adott email-el.

Lehetőség van saját Pyzor szerver működtetésére, azonban tanácsos a hivatalos szervert használni, amit csak úgynevezett "spam" szakértők taníthatnak, átlagos felhasználók csak lekérdezéseket futtathatnak rajta.

Vipul's Razor

DCC

Distributed Checksum Clearinghouses


mailspike

http://mailspike.net/usage.html

Telepítés

Spamassassin

# yum install spamassassin


Mi hol van

  • DEF_RULES_DIR=/usr/share/spamassassin,
  • LOCAL_RULES_DIR=/etc/mail/spamassassin
  • LOCAL_STATE_DIR=/var/lib/spamassassin


DKIM

Ha nem használnánk az amavis email szkennert, akkor a DKIM ellenőrzést a spamassassin-ba kéne beállítani, az aláírás elhelyezését pedig a postfix-be. Ehhez szükség lenne az openDKIM programra és a DKIM spamassassin plugin-ra. De az amavis-new ezt beépítetten tudja.

# yum install perl-Mail-DKIM

Kulcsok generálása

amavisd.conf

DNS módosítások

Tesztelés

Szabályok frissítése

Spam adatbázis

A Spamassassin szabály adatbázisa a /var/lib/spamassassin/<verziószám> mappában található, az esetünkben itt: /var/lib/spamassassin/3.003001

Ezen belül minden úgynevezett "csatornának" van egy saját almappája, amiben az adott csatorna szabálygyűjteménye található. A csatorna egy "szervezetnek" a saját szabálygyűjteménye. A hivatalos "gyári" csatorna/szabálygyűjteménye az update_spamassassin_org nevet viseli. Ezen felül még rengeteg egyéb nem hivatalos csatorna/szabálygyűjteménye létezik.

A sa-update parancsnak meg kell adni, hogy milyen csatornákat frissítsen ill. töltsön le. Ezt a --channel kapcsoló után tudjuk megadni, ahol a csatorna/szabálygyűjteménye URL-jét várja.

A hivatalos CentOS repository-ból telepített spamassassin esetében a sa-update parancsot a /usr/share/spamassassin/sa-update.cron script hívja meg. A csatornákat a /usr/share/spamassassin/sa-update.cron használata esetén a /etc/mail/spamassassin/channel.d mappában elhelyezett csatorna leíró fájlokból olvassa ki a script, és ezekkel a csatorna URL-ekkel hívja meg a sa-update parancsot.


Gyárilag két csatorna van a /etc/mail/spamassassin/channel.d mappában, a hivatalos updates_spamassassin_org és a széles körben elterjedt sought_rules_yerp_org:

[root@server channel.d]# ll /etc/mail/spamassassin/channel.d
total 12
-rw-r--r--. 1 root root 2572 Dec  5  2013 sought.conf
-rw-r--r--. 1 root root 4915 Dec  5  2013 spamassassin-official.conf

A csatorna leírók fájl elején található a csatorna URL-je, majd ezt követi az a kulcs amivel a frissítéseket aláírja a kibocsájtó. Pl. a spamassassin-official.conf fájl eleje az alábbi:

# http://wiki.apache.org/spamassassin/RuleUpdates
CHANNELURL=updates.spamassassin.org
KEYID=5244EC45
# Ignore everything below.
return 0

This is the GPG key that updates are signed with (currently,
as of Wed Dec 21 19:31:38 PST 2005.  Please contact <dev /at/
spamassassin.apache.org> with any questions.


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2 (SunOS)
.....


A /usr/share/spamassassin/sa-update.cron script kiolvassa innen az összes csatorna leíró fájlt, és hozzáfűzi a --channel paraméterhez a leírókból kiolvasott URL-eket.


Minden csatornának van egy saját almappája és egy csatorna leírója a /var/lib/spamassassin/3.003001 szabály adatbázis gyűjtőmappában.

[root@server 3.003001]# ll /var/lib/spamassassin/3.003001
total 16
drwxr-xr-x. 2 root root 4096 Mar 12  2015 sought_rules_yerp_org
-rw-r--r--. 1 root root  123 Mar 12  2015 sought_rules_yerp_org.cf
drwxr-xr-x. 2 root root 4096 Sep  8 05:53 updates_spamassassin_org
-rw-r--r--. 1 root root 2851 Sep  8 05:53 updates_spamassassin_org.cf
TipIcon.png

Tip
Ezekről a mappákról teljesen felesleges biztonsági mentést csinálni, mivel a sa-update mindig a legfrissebb gyűjteményt hozza le.


WarningIcon.png

Warning
Úgy tűnik, hogy a sought szabályokhoz már jó ideje nem jön frissítés. A sa-update ezt a választ adja manuális update esetén minden nap:

# /usr/bin/sa-update -v --channel sought.rules.yerp.org --gpgkey 6C6191E3
Update finished, no fresh updates were available


Tanítás

https://kb.site5.com/email/how-to-train-spamassassin/

http://www.hostdango.com/train-spamassassin/

https://spamassassin.apache.org/full/3.1.x/doc/sa-learn.html


Szerintem nem jó, hogy a root nevében fut, és hogy oda rakja le a ./spamassassin mappába amit talál. Onnan hogy fogja felnyalni?

#!/bin/bash

## Database details

USER=''
PASS=''
HOST=''
DB='postfix'

## Where to log stuff

LOG='/var/log/sa-learn.log'

## How many days to wait before deleting spam
## Comment out to disable

CLEAN=30

echo -e "\n\nRun started `date +%c`"  >> $LOG 2>&1

## Spam and ham training for all virtual users
## Delete spam older than $CLEAN days

mysql --skip-column-names -u$USER -p$PASS -h$HOST -D$DB -e "SELECT SUBSTRING(email, 1, LOCATE('@', email) - 1) AS user, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM virtual_users" | while read user domain;

do
  ## Spam
  echo "Spam training for $user@$domain" >> $LOG 2>&1
  /usr/bin/sa-learn --no-sync --spam /var/spool/postfix/virtual/$domain/$user/.Junk/{cur,new} >> $LOG 2>&1
  ## Ham
  echo "Ham training for $user@$domain" >> $LOG 2>&1
  /usr/bin/sa-learn --no-sync --ham /var/spool/postfix/virtual//$domain/$user/{cur} >> $LOG 2>&1
  ## Delete
  if [ -n $CLEAN ]; then
    echo "Deleting spam for $user@$domain older than $CLEAN days" >> $LOG 2>&1
    find /var/spool/postfix/virtual/$domain/$user/.Junk/cur/ -type f -mtime +$CLEAN -exec rm {} \;
  fi
done

## Sync the SpamAssassin journal and print out stats

echo "Syncing the SpamAssassin journal" >> $LOG 2>&1
/usr/bin/sa-learn --sync >> $LOG 2>&1
echo "Statistics for this run:" >> $LOG 2>&1
/usr/bin/sa-learn --dump magic >> $LOG 2>&1

echo -e "Run finished `date +%c`"  >> $LOG 2>&1

exit


ImportantIcon.png

Note
Mivel az adatbázis szinkronizálása nagyon időigényes, fontos, hogy ham és spam mappákat átadó futtatások esetében a --no-sync szerepeljen, ami nem frissíti be kapásból a db-be az új szabályokat, hanem egy ideglenes fájlban tárolja őket. Mikor az összes új szabályt hozzáadtuk az ideglenes fájlhoz akkor a végén egyszer meghívjuk a sa-update-et --sync kapcsolóval



Run started Sat 10 Sep 2016 10:57:28 PM CEST
Spam training
Learned tokens from 3889 message(s) (3889 message(s) examined)
Learned tokens from 1 message(s) (1 message(s) examined)
Learned tokens from 1 message(s) (1 message(s) examined)
Ham training
Learned tokens from 3479 message(s) (3479 message(s) examined)
bayes: bayes db version 0 is not able to be used, aborting! at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/BayesStore/DBM.pm line 203.
Learned tokens from 11401 message(s) (11503 message(s) examined)
Deleting spam for @ older than 30 days
Syncing the SpamAssassin journal
expired old bayes database entries in 37 seconds
132820 entries kept, 645263 deleted
token frequency: 1-occurrence tokens: 49.55%
token frequency: less than 8 occurrences: 23.04%
Statistics for this run:
0.000          0          3          0  non-token data: bayes db version
0.000          0       3890          0  non-token data: nspam
0.000          0      14880          0  non-token data: nham
0.000          0     132820          0  non-token data: ntokens
0.000          0 1462517177          0  non-token data: oldest atime
0.000          0 1473531473          0  non-token data: newest atime
0.000          0          0          0  non-token data: last journal sync atime
0.000          0 1473542242          0  non-token data: last expiry atime
0.000          0   11059200          0  non-token data: last expire atime delta
0.000          0     645263          0  non-token data: last expire reduction count
Run finished Sat 10 Sep 2016 11:17:25 PM CEST

# ll
total 5744
-rw-------. 1 root root 2535424 Sep 10 23:17 bayes_seen
-rw-------. 1 root root 4837376 Sep 10 23:17 bayes_toks


Megtanult szabályok mentése és visszatöltése

ClipCapIt-160910-214715.PNG