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

From berki WIKI
Jump to: navigation, search
(SELinux)
(Disclaimer)
Line 416: Line 416:
  
 
https://sourceforge.net/p/amavis/mailman/message/19582470/
 
https://sourceforge.net/p/amavis/mailman/message/19582470/
Az altermime program a HTML disclaimer-ben minden új sor jelet (CR LF) dupla CR-re cserél (CR CR LF). A DKIM erre a body tartalomra készít el az aláírást. Azonban a postfix a dupla CR-eket felszámolja a levél kiküldése előtt. És így a DKIM body aláírása nem lesz valid.
+
Az altermime program a HTML disclaimer-ben minden új sor jelet (CR LF) dupla CR-re cserél (CR CR LF). A DKIM erre a body tartalomra készít el az aláírást. Azonban a postfix a dupla CR-eket felszámolja a levél kiküldése előtt. És így a DKIM body aláírása nem lesz valid. Tehát az egész /var/spool/amavisd/disclaimer.html tartalma egy sor legyen, és ne legyen a végén se új sor jel.  
  
 
<pre>
 
<pre>

Revision as of 22:40, 24 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, 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.

ClipCapIt-160921-001126.PNG

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


TipIcon.png

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


TipIcon.png

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                   = XXXXXXXXXXXXXXXXXXXXXX
user                   = YYYYYYYY

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.

WarningIcon.png

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

A DKIM használható spamassassin és amavis nélkül is, ebben az esetben szükség van egy DKIM implementációra: openDKIM. Mi az amavis-böl fogjuk használni.

  1. Az amavisd genrsa programmal legeneráljuk a titkos kulcsot
  2. Elhelyezzük a konfigurációt az amaivisd.conf-ban
  3. Az amavisd showkeys ezután a konfiguráció alapján elkészíti a DNS rekorodot, amit be kell írni a DNS szerverünkbe.

{{tip|Nagyon sok DKIM - DNS rekord generáló weboldal létezik, így felesleges elmélyedni a DKIM szintaktikájába ha tuningolni szeretnénk a DKIM beállításokat (https://www.dnswatch.info/dkim/create-dns-record)

Az alábbi perl kiegészítésre van szükségünk:

# yum install perl-Mail-DKIM


Kulcsok generálása

Hozzunk létre egy új mappát a DKIM titkos kulcs számára az amavisd home könyvtárában. Azért kell ide rakni, hogy az amavisd elérje.

# mkdir /var/spool/amavisd/dkim/

Az amavisd program a genrsa kapcsolóval legenerálja a kulcsot. Adjuk meg a kulcs hosszát, különben 1024 bites kulcsot fog csak generálni.

# amavisd genrsa /var/spool/amavisd/dkim/berki.org 1024
Private RSA key successfully written to file "/var/spool/amavisd/dkim/berki.org" (1024 bits, PEM format) 

# chown amavis.amavis -R /var/spool/amavisd/dkim/
TipIcon.png

Tip
A kulcsot az openssl programmal is legenerálhatjuk (openssl genrsa -out private.key 1024)


Látható hogy létrejött a titkos kulcs a dkim mappában:

# ls -l /var/spool/amavisd/dkim/
total 4
-rw-------. 1 amavis amavis 887 Sep 23 20:14 berki.org

amavisd.conf

Aláírás bekapcsolása

Az /etc/amavisd/amaivisd.conf-ba módosítsuk a konfigurációt:

$enable_dkim_verification = 1;  # enable DKIM signatures verification
$enable_dkim_signing = 1;    # load DKIM signing code, keys defined by dkim_key

dkim_key('berki2.org', 'default', '/var/spool/amavisd/dkim/berki2.org');
@dkim_signature_options_bysender_maps = (
    { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
  1. Elsőként meg kell adni az alap dkim adatokat: dkim_key(<domain név>, <selector>, <titkos kulcs>, <aláírás tag-ek>. Minden egyes domain-hez aminek a kimenő leveleit alá szeretnénk írni, fel kell venni egy dkim_key sort.
  2. Majd a DKIM kiegészítő beállításait: @dkim_signature_options_bysender_maps = (...). A map-ben domain-enként adhatunk meg beállításokat. Minden egyes domain-re egy ilyen sort kell hozzáadni:

{ '<domain név>' => { ttl => 21*24*3600, c => 'relaxed/simple', <további tag-ek az RFC 4871 alapján> } }

A '.' az összes domain-re fog vonatkozni. Mi is ezt fogjuk használni.


Nagyon sok aláírás tag van. A szabványt a RFC 4871 írja le, itt megtalálhatjuk az összes tag jelentését.
http://ietf.org/rfc/rfc4871.txt
https://opensource.apple.com/source/amavisd/amavisd-140/amavisd/amavisd-new-2.7.0/amavisd-signer


Az amaivid aláíró modulja így írja le ezen két paraméter használatát:

# Load all available private keys and supply their public key RR constraints.
# Arguments are a domain, a selector, a key (a file name of a private key in
# PEM format), followed by optional attributes/constraints (tags, represented
# here as Perl hash key/value pairs) which are allowed by RFC 4871 in a public
# key resource record (v, g, h, k, n, s, t), of which only g, h, k, s and t
# are considered to be constraints limiting the choice of a signing key.
#
#         signing domain   selector     private key              options
#          -------------   --------     ----------------------   ----------
# dkim_key('example.org', 'abc',       '/var/db/dkim/a.key.pem');
# dkim_key('example.org', 'yyy',       '/var/db/dkim/b.key.pem', t=>'s');
# dkim_key('example.org', 'zzz',       '/var/db/dkim/b.key.pem', h=>'sha256');
# dkim_key('example.com', 'sel-2008',  '/var/db/dkim/sel-example-com.key.pem',
#          t=>'s:y', g=>'*', k=>'rsa', h=>'sha256:sha1', s=>'email',
#          n=>'testing; 1, 2');
# dkim_key('guest.example.com', 'g',    '/var/db/dkim/g-guest-ex-com.key.pem');
# dkim_key('mail.example.com', 'notif', '/var/db/dkim/notif-mail.key.pem');

# @dkim_signature_options_bysender_maps maps author/sender addresses or
# domains to signature tags/requirements; possible signature tags according
# to RFC 4871 are: (v), a, (b), (bh), c, d, (h), i, l, q, s, (t), x, z;
# of which the following are determined implicitly: v, b, bh, h, t
# (tag h is controlled by %signed_header_fields);  currently ignored tags
# are l and z;  instead of an absolute expiration time (tag x) one may use
# a pseudo tag 'ttl' to specify a relative expiration time in seconds, which
# is converted to an absolute expiration time prior to signing: x = t + ttl;
# a built-in default is provided for each tag if no better match is found
#
# @dkim_signature_options_bysender_maps = ( {
#   'postmaster@mail.example.com' => { a => 'rsa-sha1', ttl =>  7*24*3600 },
#   'spam-reporter@example.com'   => { a => 'rsa-sha1', ttl =>  7*24*3600 },
#   'mail.example.com'            => { a => 'rsa-sha1', ttl => 10*24*3600 },
#   # explicit 'd' forces a third-party signature on foreign (hosted) domains
#   'guest.example'               => { d => 'guest.example.com' },
#   '.example.com'                => { d => 'example.com' },
#   # catchall defaults
#   '.' => { a => 'rsa-sha256', c => 'relaxed/simple', ttl => 30*24*3600 },
#   # 'd' defaults to a domain of an author/sender address,
#   # 's' defaults to whatever selector is offered by a matching key
# } );

Origination beállítások

WarningIcon.png

Warning
Az Amavis csak azokat a leveleket fogja aláírni, amikről úgy gondolja, hogy a saját felhasználók küldte


Az amavis akkor tekint egy levelet saját felhasználó által küldöttnek, ha az ORIGNATING váltóz értéke 1 bármit is jelentsen. Két külön úgynevezett plolicy_bank -ban is be kell ezt állítsuk.

  • $policy_bank{'MYNETS'}: Ez a lokális hálózatról küldött levelek beállításait tartalmazza
  • $interface_policy{'10024'} = 'ORIGINATING' : A postfix a 10024-es porton adja át a leveleket az amavisd-nek. Létre fogunk hozni egy ORIGINATING szabálygyűjteményt (policy_bank), amit hozzá fogunk rendelni a 10024-es porthoz. Tehát a postfix-töl érkező levelekre a ORIGINATING policy bank-ban lévő szabályok vonatkoznak. A lokális hálózatról küldött levelek is az 10024-es porton kerülnek átadásra az amavisd-nek, azonban valamiért rájuk a MYNETS bolicy_bank fog illeszkedni.

A policy_bank-ban a originating => 1 szabállyal állítjuk be, hogy ezen policy_bank-ba eső leveleket saját felhasználónak tekintjük:

#mails from local network
$policy_bank{'MYNETS'} = {   # mail originating from @mynetworks
  originating => 1,  # is true in MYNETS by default, but let's make it explicit
  ....
};
...
...
#mails from external clients (e.g. mobil phones)

$interface_policy{'10024'} = 'ORIGINATING'; # with this all my mails are "originating from inside".

$policy_bank{'ORIGINATING'} = {  # mail supposedly originating from our users
  originating => 1,  # declare that mail was submitted by our smtp client
  ...
  forward_method => 'smtp:[127.0.0.1]:10025',
 ....
};

Fontos, hogy az ORIGINATING policy_bank-ba beállítsuk azt a portot is, ahol az amavisd visszaküldi a leveleket átvizsgálás után a postfix-nek (forward_method => 'smtp:[127.0.0.1]:10025')

SELinux

ImportantIcon.png

Note
Ez a SELinux változtatás nem biztos hogy kell

A SELInux nem engedi meg, hogy a /usr/bin/perl hozzáférjen a 10025-ös TCP socket-hez, ahol az amavisd visszaküldi a leveleket a postfix-nek. Érdekes módon ez csak akkor probléma, ha a DKIM be van kapcsolva. Meg kell változtatni a 10025-s port típusát a SELinux-ban, hogy ne sértse a rendszabást.

# semanage port -a -t amavisd_send_port_t -p tcp 10025


Disclaimer

WarningIcon.png

Warning
Nagyon fontos, hogy a HTML disclaimer-ben ne legyen új sor, különben nem lesz megfelelő a DKIM aláírás


https://sourceforge.net/p/amavis/mailman/message/19582470/ Az altermime program a HTML disclaimer-ben minden új sor jelet (CR LF) dupla CR-re cserél (CR CR LF). A DKIM erre a body tartalomra készít el az aláírást. Azonban a postfix a dupla CR-eket felszámolja a levél kiküldése előtt. És így a DKIM body aláírása nem lesz valid. Tehát az egész /var/spool/amavisd/disclaimer.html tartalma egy sor legyen, és ne legyen a végén se új sor jel.

@altermime_args_disclaimer =
  qw(--verbose  --disclaimer=/var/spool/amavisd/disclaimer.txt \
     --disclaimer-html=/var/spool/amavisd/disclaimer.html);

DNS módosítások

Indítsuk újra az amavisd-t:

# service amavisd restart

Indulás közben látnunk kell a /var/log/maillog-ban hogy az amavis betölti a DKIM modulokat:

...
Sep 24 21:24:55 centostest amavis[5897]: Module Mail::DKIM::Signer  0.37
Sep 24 21:24:55 centostest amavis[5897]: Module Mail::DKIM::Verifier 0.37
...

Az amavisd showkeys paranccsal írassuk ki a DNS rekordot. Fontos, hogy megadjuk a konfigurációs fájl helyét, mert alapértelmezés szerint a /etc/amavisd.conf helyen keresi.

# amavisd -c /etc/amavisd/amavisd.conf showkeys
; key#1, domain berki2.org, /var/spool/amavisd/dkim/berki.org
default._domainkey.berki2.org.	3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn8jgJekpfZIx2k/GIIrFToWbJ"
  "KaqQ2HCmP3x0dtFHkcOz9ZxXEc8y1p/IRh3F3skzTm3mIO/M1srCNRX+09g3pDgW"
  "W1fgJxbSq54S+uO+1SWph7na/ZFxd+nJOOcThibQ/s7ADC/OtG7mG6XOW6bh/b1o"
  "/DJnbXs3N8A+ycnVCQIDAQAB")

NoIP.com

Hozzuk ilyen alakra az amavisd showkeys által kiadott konfigurációt:

"v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn8jgJekpfZIx2k/GIIrFToWbJKaqQ2HCmP3x0dtFHkcOz9ZxXEc8y1p/IRh3F3skzTm3mIO/M1srCNRX+09g3pDgWW1fgJxbSq54S+uO+1SWph7na/ZFxd+nJOOcThibQ/s7ADC/OtG7mG6XOW6bh/b1o/DJnbXs3N8A+ycnVCQIDAQAB"

Majd nyissuk meg a fő domain-ünk no-ip.org beállításait, ahol kattintsunk a DKIM linkre:

ClipCapIt-160924-150608.PNG

Legyen a selector értéke default, és a Record helyére másoljuk be a fenti értékét, majd mentsük el.

ClipCapIt-160924-150232.PNG

BIND beállítások

DNS rekord tesztelése

Telepítsük a bind-utils.

# yum install bind-utils

A dns TXT rekordot a host paranccsal fogjuk lekérni.

# host -t txt default._domainkey.berki2.org
default._domainkey.berki2.org descriptive text "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn8jgJekpfZIx2k/GIIrFToWbJKaqQ2HCmP3x0dtFHkcOz9ZxXEc8y1p/IRh3F3skzTm3mIO/M1srCNRX+09g3pDgWW1fgJxbSq54S+uO+1SWph7na/ZFxd+nJOOcThibQ/s7ADC/OtG7mG6XOW6bh/b1o/DJnbXs3N8A+ycnVCQIDAQAB"

Tesztelés

Ha a DNS szerver már sikeresen visszaadja a DKIN kulcsot, akkor az amavisd testkey paranccsal ellenőrizhetjük le a beállításokat:

# amavisd -c /etc/amavisd/amavisd.conf testkeys
TESTING#1: default._domainkey.berki2.org     => pass


Küldjünk egy emailt a webes kliensből (lokális hálózat) és egy távoli kliensről egy külső email címre, tehát egy független harmadik félnek (pl. gmail), majd nézzük meg az email fejlécét:

Delivered-To: lalilali96@gmail.com
....
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=berki2.org; h=
        content-type:content-type:mime-version:from:from:message-id
        :subject:subject:date:date:received:received; s=default; t=
        1474745124; x=1476559525; bh=kZB3kPyTqm/w2p6UryOcj2tyzuSjxMIB3xA
        EjFFhOyk=; b=aYEDrJwsXZS/AHwlI6FBtnpIXYWfDJz8HEiKl0HNUKAKLtiRK7J
        4GkbRcDkl5AO75B2VxGgt00+2Q47fUf22saMIxYbey/E2jGRETLyBMiMhQTZv8wa
        xTE0aaGCHG4HXc5dEwsMAFoBYOIQDyVCD4l87wSfOgqtsxsCG2ZyzolQ=
X-Amavis-Modified: Mail body modified (using disclaimer) - berki2.org
X-Virus-Scanned: amavisd-new at berki2.org

Meg kell jelennie a DKIM-Signature fejlécben a domain nevünkkel (d) és a selector-al (s).

Telepítsük föl az opendkim-et amivel a parancssorban tudjuk ellenőrizni a leveleket:

# yum install opendkim

Hozzuk létre a default.private fájlt és adjunk rá megfelelő jogot. Ha ez a fájl nem létezik, az opendkim nem futtatható:

# touch /etc/opendkim/keys/default.private
# chmod 600 /etc/opendkim/keys/default.private

Mentsük le a levelet egy eml fájlban, majd futtassuk le a tesztet:

# opendkim -v -t /root/install/dkim/message3.eml 
opendkim: /root/install/dkim/message3.eml: mlfi_eom() returned SMFIS_ACCEPT
opendkim: /root/install/dkim/message3.eml: verification (s=default, d=berki2.org, 1024-bit key) succeeded

Két kimenetele lehet: succeeded vagy signature verification failed Sajnos ennél részletesebben nem mondja meg, hogy melyik résszel volt a baj (küldő, tárgy vagy body)

Ezen felül vannak online ellenőrző oldalak is: https://9vx.org/~dho/dkim_validate.php

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
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