Difference between revisions of "Email Server - Extended Spam filtering"
(→Tesztelés) |
(→SELinux) |
||
Line 408: | Line 408: | ||
<pre> | <pre> | ||
# semanage port -a -t amavisd_send_port_t -p tcp 10025 | # semanage port -a -t amavisd_send_port_t -p tcp 10025 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | ====Disclaimer==== | ||
+ | |||
+ | {{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. | ||
+ | |||
+ | <pre> | ||
+ | @altermime_args_disclaimer = | ||
+ | qw(--verbose --disclaimer=/var/spool/amavisd/disclaimer.txt \ | ||
+ | --disclaimer-html=/var/spool/amavisd/disclaimer.html); | ||
</pre> | </pre> | ||
Revision as of 22:39, 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.
- 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 = 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.
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
- http://tech.cbjck.de/2014/02/08/dkim-with-amavis/
- https://sys4.de/de/blog/2013/09/02/amavisd-new-dkim-howto/
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.
- Az amavisd genrsa programmal legeneráljuk a titkos kulcsot
- Elhelyezzük a konfigurációt az amaivisd.conf-ban
- 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/
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' } } );
- 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.
- 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
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
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
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.
@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:
Legyen a selector értéke default, és a Record helyére másoljuk be a fenti értékét, majd mentsük el.
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
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