Difference between revisions of "Email Server - Extended Spam filtering"
(→Pyzor tesztelése a parancssorból) |
|||
Line 260: | Line 260: | ||
=== Tűzfal beállítások === | === Tűzfal beállítások === | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Line 297: | Line 284: | ||
=== Tesztelés === | === Tesztelés === | ||
− | = Szabályok frissítése = | + | ==Spamassassin== |
+ | <pre> | ||
+ | # yum install spamassassin | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | === Mi hol van === | ||
+ | |||
+ | * DEF_RULES_DIR=/usr/share/spamassassin, | ||
+ | * LOCAL_RULES_DIR=/etc/mail/spamassassin | ||
+ | * LOCAL_STATE_DIR=/var/lib/spamassassin | ||
+ | |||
+ | |||
+ | === Szabályok frissítése === | ||
− | = Spam adatbázis = | + | ==== 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''' | 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''' | ||
Line 361: | Line 362: | ||
}} | }} | ||
− | = Tanítás = | + | === Tanítás === |
https://kb.site5.com/email/how-to-train-spamassassin/<br /> | https://kb.site5.com/email/how-to-train-spamassassin/<br /> | ||
Line 473: | Line 474: | ||
− | == Megtanult szabályok mentése és visszatöltése == | + | === Megtanult szabályok mentése és visszatöltése === |
[[File:ClipCapIt-160910-214715.PNG]] | [[File:ClipCapIt-160910-214715.PNG]] |
Revision as of 21:55, 22 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.
- Nem minden email van aláírva az adott domain-ből.
- 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.
- 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.
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
Tip
A no-ip.com dinamikus DNS szolgáltató is támogatja a DKIM használatát
- https://www.howtoforge.com/set-up-dkim-domainkeys-identified-mail-working-with-postfix-on-centos-using-opendkim-p2
- https://www.rosehosting.com/blog/how-to-install-and-integrate-opendkim-with-postfix-on-a-centos-6-vps/
- https://www.rosehosting.com/blog/how-to-install-and-integrate-opendkim-with-postfix-on-a-centos-6-vps/
- http://www.stevejenkins.com/blog/2011/08/installing-opendkim-rpm-via-yum-with-postfix-or-sendmail-for-rhel-centos-fedora/
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, egy hash-t, amit elküld a Pyzor szervernek. A válaszban a szerver visszaküldi, hogy az adott hash 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
https://en.wikipedia.org/wiki/Vipul%27s_Razor A Razor a Pyzor-hoz nagyon hasonló eszköz, a kliens szintén egy hash-t készít a levélből, amit összevet a szerveren lévő adatbázissal. Egy mutálódó spam tartalomól ugyan az a hash előállhat így hiába variálja a támadó a tartalmat, a razor mindig észre fogja venni. A razor rendszere valamivel hatékonyabb mint a pyzor, nagyon a mögötte lévő közösség.
Több email kliens közvetlenül is támogatja a razor használatát kliens oldali spam szűrésre.
DCC
Distributed Checksum Clearinghouses
mailspike
http://mailspike.net/usage.html
Telepítés
Pyzor
A Pyzor az epel repository-ban van. Ha még nem rendelkezünk ezzel a repo-val, akkor hozzá kell adni a yum-hoz. Két lehetőségünk van, vagy yum-al telepítjük föl vagy rpm-böl.
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm VAGY # yum install epel-release
Majd telepítsük föl a pyzor-t:
# yum install pyzor
/etc/selinux/targeted/modules/active/modules/pyzor.pp
Az alábbi mappák jöttek létre:
- /usr/bin/pyzor
- /usr/bin/pyzord
- /usr/lib/python2.6/site-packages/pyzor
- /usr/share/doc/pyzor-0.5.0
Pyzor tesztelése a parancssorból
http://pyzor.readthedocs.io/en/release-1-0-0/client.html
Tip
A pyzor-t a spamassassin fogja futtatni. A spamassassin-t pedig az amavis az amavis user nevében. Ezért célszerű már a parancssori kísérletezést is az amaivis felhasználó nevében végezni.
Szerver kapcsolat tesztelése
#sudo -u amavis pyzor ping downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x public.pyzor.org:24441 (200, 'OK')
Ez a parancs első használatkor le fogja tölteni a publikus szerverek listáját a fent látható URL-röl, és elfogja helyezni a ~/.pyzor mappán belül a servers fájlban:
# sudo -u amavis cat /var/spool/amavisd/.pyzor/servers public.pyzor.org:24441
Természetesen itt tetszőleges szervereket felsorolhatunk. Mivel a spamassassin-t az amavis felhasználó futtatja, így a .pyzor mappának majd a /var/spool/amavisd amavis home mappán belül kell majd létrejönnie.
Teszteljük le egy mail-el, ami biztos hogy spam. Ilyet könnyű találni a saját email fiókunkban.
Email ellenőrzése:
# sudo -u amavis pyzor check < Need_to_See_Ya.mbox public.pyzor.org:24441 (200, 'OK') 1 0
vagy:
# sudo -u amavis pyzor info < Need_to_See_Ya.mbox public.pyzor.org:24441 (200, 'OK') Count: 1 Entered: Tue Sep 20 23:42:57 2016 Updated: Tue Sep 20 23:42:57 2016 WL-Entered: Thu Jan 1 01:00:00 1970 WL-Updated: Thu Jan 1 01:00:00 1970
Email spam jelentése:
# sudo -u amavis pyzor report < Need_to_See_Ya.mbox public.pyzor.org:24441 (200, 'OK')
Ha olyat reportálunk ami még nem volt korában, akkor ha újra futtatjuk rá a pyzor check-et akkor látni kell, hogy a számláló egyel megnőtt a válaszban.
Whitelist jelentés:
Ez funkció nem elérhető a public.pyzor.org:24441 publikus szervern. Van egy webes felület, ahol a tévesen jelentett email-eket lehet visszavonni: http://public.pyzor.org/whitelist/.
Azonban ha van egy saját szerverünk,akkor így lehet belőle törölni egy mintát:
# sudo -u amavis pyzor whitelist < spam.eml
Tűzfal beállítások
Saját szerver használata
Ha nagyon sok egyedi spam-ünkvan, akkor érdemes lehet egy saját pyzor szervert telepíteni, ahova be tudjuk tölteni az összes általunk spam-nek gondolt mintát. Mi nem tervezzük saját szerver telepítését, egyenlőre a publikus szervert fogjuk használni az üzenetek ellenőrzésére.
Razor
# yum install perl-Razor-Agent
Miden egyes felhasználónak saját razor konfigurációja van, ami a <home mappa>/.razor mappában jön létre a razor első használatakor.
A parancssorban az alábbi parancsok állnak a rendelkezésünkre:
- razor-admin : ezzel lehet regisztrálni a razor szerveren, felhasználó név + jelszó párost generál
- razor-check : ellenőriz egy emailt
- razor-client
- razor-report : spam-nek jelent egy emailt
- razor-revoke : visszavonja a spam-nek jelentett emailt
Tip
A razor-t a spamassassin fogja futtatni. A spamassassin-t pedig az amavis az amavis user nevében. Ezért célszerű már a parancssori kísérletezést is az amaivis felhasználó nevében végezni.
Konfigurálás
Hozzuk létre a <home>/.razor mappát és benne a szerverek listáját:
# sudo -u amavis razor-admin -discover
Ezzel létrejött a serverek listája a .razor mappában (server.*.lst)
# ls -al /var/spool/amavisd/.razor/ ... -rw-r--r--. 1 amavis amavis 899 Sep 22 23:13 server.n002.cloudmark.com.conf -rw-r--r--. 1 amavis amavis 839 Sep 22 23:04 server.n003.cloudmark.com.conf -rw-r--r--. 1 amavis amavis 57 Sep 22 23:13 servers.catalogue.lst -rw-r--r--. 1 amavis amavis 30 Sep 22 23:06 servers.discovery.lst -rw-r--r--. 1 amavis amavis 76 Sep 22 23:13 servers.nomination.lst
Hozzuk létre a <home>/.razor/razor-agent.conf alap konfigurációs fájlt:
# sudo -u amavis razor-admin -create
Tartalom:
debuglevel = 3
identity = identity
ignorelist = 0
listfile_catalogue = servers.catalogue.lst
listfile_discovery = servers.discovery.lst
listfile_nomination = servers.nomination.lst
logfile = razor-agent.log
logic_method = 4
min_cf = ac
razordiscovery = discovery.razor.cloudmark.com
rediscovery_wait = 172800
report_headers = 1
turn_off_discovery = 0
use_engines = 4,8
whitelist = razor-whitelist
Regisztráljuk magunkat a razor szerveren hogy tudjunk spam lenyomatokat beküldeni. A razor-admin -register paranccsal generálhatunk magunknak felhasználó név - jelszó párost. Ezt egy identitiy fájlba helyezi el a reazor-admin a .razor mappában. Minél több olyan levél lenyomatot küldünk be ezzel, amit más is spam-nak jelentett, úgy fog nőni a felhasználónk megbízhatósága.
# sudo -u amavis razor-admin -register Register successful. Identity stored in /var/spool/amavisd/.razor/identity-ruJ7zcDpwL
Az új identity fájltartalma:
# cat identity-ruJ7zcDpwL pass = lVazElJ9OBDaFGUn4HacI2ORxBu1 user = ruJ7zcDpwL
Ezen felül létrehozott egy szimbolikus linket, identity névvel, ami rámutat az újonnan generált identity-ruJ7zcDpwL fájlra:
# ls -al /var/spool/amavisd/.razor/ ... lrwxrwxrwx. 1 amavis amavis 19 Sep 22 23:13 identity -> identity-ruJ7zcDpwL -rw-------. 1 amavis amavis 90 Sep 22 23:13 identity-ruJ7zcDpwL ...
Email ellenőrzése
# sudo -u amavis razor-check -d spam1.eml ... Sep 22 22:35:45.367735 check[1959]: [ 3] mail 1 is not known spam. ....
Ha nem írjuk bele a -d (debug) kapcsolót, akkor nem ír ki semmit a kimenetre. Látható, hogy a beadott email-t spam-nek gondolja.
Warning
Mostanában nagyon sok egy kaptafára menő email érkezik minden nap, amit az alap spamassassin nem tud megfogni. Egy ilyen emailt küldtem be a pyzor-nak majd a razor-nak, de egyik sem gondolta spam-nek sajnos
Email-ek jelentése
Spam jelentést csak bejelentkezett felhasználó tehet. Ehhez az adott linux user .razor mappájában ott kell legyen a identity fájl. Ha egy emailt-t spam-nek mondtunk, vagyis a felhasználó a Junk könyvtárába tette, akkor azon minden esete végigmehetünk, és spam-nek jelenthetjük:
# sudo -u amavis razor-report -d /var/spool/amavisd/tmp/Need_to_See_Ya.mbox ... Sep 22 23:26:23.724615 report[2269]: [ 8] razor-report finished successfully.
Spam jelentés visszavonása:
# sudo -u amavis razor-revoke -d /var/spool/amavisd/tmp/Need_to_See_Ya.mbox
Tűzfal beállítások
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
- http://tech.cbjck.de/2014/02/08/dkim-with-amavis/
- https://sys4.de/de/blog/2013/09/02/amavisd-new-dkim-howto/
Kulcsok generálása
amavisd.conf
DNS módosítások
Tesztelé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
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
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.
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
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