Postfix, Postscreen ja before-queue kontrollide kasutamine
Sissejuhatus
Postfix, Postscreen ja before-queue kontrollide kasutamisele on iseloomulik, et enne kui internetist saabunud kirja osas võtab vastutuse postimasin, toimuvad nö igasugused kontrollid sh viiruste ja spämmi osas. See peaks oluliselt vähendama võimalusi, et mõni kiri nö kaob karantiini, kusutatakse vaikselt kuna sisaldas viiruse tunnuseid vms kohta. Kirja saatja saab kohe teate ja küllap ise otsib võimalusi kirja uuesti saata. Võimalikud probleemid võivad tekkida sellest, et kirjade saatmisel eeldatakse teatud ajaaknasse mahtumist, aga teisipidi need täiendavad kontrollid nõuavad lisaks aega. St edukaks töötamiseks võib nõuda antud süsteem rohkem ressurssi, samas postscreen jms esmaselt toimuvad testid blokeerivad üsna varases staadiumis märkimisväärselt pahalaste pöördumisi.
Lisaks on püütud jälgida seda, et epostiga tegelemise logi oleks analüüsisõbralikum. Käesolev tekst eeldab Postfix v. 2.11 kasutamist kuigi teatud mööndustega saab kasutada ka varasemaid versioone.
Mõisted
- client hostname - tundub, et see on pöörduja ip aadressile vastava ptr kirje väärtus juhul kui viimane lahendub tagasi pöörduja ip aadressiks
- unverified reverse client hostname - tundub, et see on pöörduja ip aadressile vastava ptr kirje väärtus
Tööpõhimõte
Postix, Postscreen ja before-queue kontrollide süsteemi kasutamist kirjeldab üldiselt selline skeem
____ ____ | | zen.spamhaus.net | | dbl.spamhaus.org |____| |____| ____ ____ ____ | | smtp klient | | frontend smtp server | | backend postfix + dovecot postkastid |____| 10.204.62.116 |____| 192.168.7.80 |____| 192.168.7.143
kus
- 10.204.62.116 - smtp klient (ka server)
- 192.168.7.80 - frontend smtp server
- 192.168.7.143 - backend postfix + dovecot postkastid
- zen.spamhaus.net poole esitatakse reversed ip aadresside kujul dns päring
- dbl.spamhaus.org poole esitatakse rhsbl päring (mail from aadressis kasutatud domeeninimi + dbl.spamhaus.org, nt moraal.ee.dbl.spamhaus.org)
Kontrollid toimuvad enne kirja nn sabasse võtmist, sellises järjekorras
- postscreen (muu hulgas dnsbl, greylisting)
- postfix-policyd-spf-python - smtpd_recipient_restrictions -> check_policy_service unix:private/policyd-spf abil
- postfwd - smtpd_recipient_restrictions -> check_policy_service inet:127.0.0.1:10045 abil
- clamav-milter - lisaks nö traditsioonilistele viiruste nimekirjadele kasutatakse ka http://c4s.pikker.ee/ nimekirju
- spamass-milter - ilma bayes tehnikata
Süsteemist läbi mineva kirjaga kaasneb selline logi
Jan 4 23:21:55 http-dns-7-80 postfix/postscreen[32612]: CONNECT from [10.204.62.116]:51893 to [192.168.7.80]:25 Jan 4 23:21:55 http-dns-7-80 postfix/dnsblog[32614]: addr 10.204.62.116 listed by domain zen.spamhaus.net as 127.0.5.1 Postscreen viivitus mõni sekund Jan 4 23:22:00 http-dns-7-80 postfix/postscreen[32612]: NOQUEUE: reject: RCPT from [10.204.62.116]:51893: \ 450 4.3.2 Service currently unavailable; from=<priit@imool.org>, to=<imre@auul.pri.ee>, proto=ESMTP, helo=<mail.imool.org> Jan 4 23:22:00 http-dns-7-80 postfix/postscreen[32612]: PASS NEW [10.204.62.116]:51893 Jan 4 23:22:00 http-dns-7-80 postfix/postscreen[32612]: DISCONNECT [10.204.62.116]:51893 Postscreen katkestab ühenduse kuna kasutatakse nn 'deep protocol tests' kontrolle Jan 4 23:22:22 http-dns-7-80 postfix/postscreen[32612]: CONNECT from [10.204.62.116]:55369 to [192.168.7.80]:25 Jan 4 23:22:22 http-dns-7-80 postfix/postscreen[32612]: PASS OLD [10.204.62.116]:55369 Jan 4 23:22:22 http-dns-7-80 postfix/smtpd[32618]: connect from mail.imool.org[10.204.62.116] Jan 4 23:22:22 http-dns-7-80 policyd-spf[32623]: None; identity=helo; client-ip=10.204.62.116; helo=mail.imool.org; \ envelope-from=priit@imool.org; receiver=imre@auul.pri.ee Jan 4 23:22:22 http-dns-7-80 policyd-spf[32623]: Softfail; identity=mailfrom; client-ip=10.204.62.116; helo=mail.imool.org; \ envelope-from=priit@imool.org; receiver=imre@auul.pri.ee Jan 4 23:22:22 http-dns-7-80 postfix/smtpd[32618]: 806EF41847: client=mail.auul.pri.ee[10.204.62.116] Jan 4 23:22:22 http-dns-7-80 postfix/cleanup[32624]: 806EF41847: message-id=<56262.9227965488-sendEmail@moraal> Jan 4 23:22:22 http-dns-7-80 clamav-milter[27596]: Clean message from <priit@imool.org> to <imre@auul.pri.ee> Jan 4 23:22:22 http-dns-7-80 spamd[25832]: spamd: connection from localhost [127.0.0.1]:54275 to port 783, fd 6 Jan 4 23:22:22 http-dns-7-80 spamd[25832]: spamd: processing message <56262.9227965488-sendEmail@moraal> for spamass-milter:1002 Jan 4 23:22:22 http-dns-7-80 spamd[25832]: spamd: clean message (2.0/5.0) for spamass-milter:1002 in 0.0 seconds, 1896 bytes. Jan 4 23:22:22 http-dns-7-80 spamd[25832]: spamd: result: . 2 - SPF_SOFTFAIL scantime=0.0,size=1896,\ user=spamass-milter,uid=1002,required_score=5.0,rhost=localhost,raddr=127.0.0.1,\ rport=54275,mid=<56262.9227965488-sendEmail@moraal>,autolearn=no autolearn_force=no Jan 4 23:22:22 http-dns-7-80 postfix/qmgr[32598]: 806EF41847: from=<priit@imool.org>, size=1770, nrcpt=1 (queue active) Jan 4 23:22:22 http-dns-7-80 postfix/smtpd[32618]: disconnect from mail.imool.org[10.204.62.116] Jan 4 23:22:22 http-dns-7-80 spamd[25831]: prefork: child states: II Jan 4 23:22:22 http-dns-7-80 postfix/smtp[32627]: 806EF41847: to=<imre@auul.pri.ee>, relay=192.168.7.143[192.168.7.143]:25, \ delay=0.5, delays=0.36/0.01/0/0.13, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as B2C0840223) Jan 4 23:22:22 http-dns-7-80 postfix/qmgr[32598]: 806EF41847: removed
kus
- kell 23:21:55 pöördub klient ja kuigi tema ip on kirjas spamhaus andmebaasis ei ole skoor piisav, et selle alusel blokeeritakse
- seejärel toimub esimene Postscreen põhjustatud viivitus, näidatakse kaherealist bannerit kliendile (nb! esimesel real on 220- ja teisel 220 tühik)
# tcpflow -c -i eth0 port 25 tcpflow[1016]: listening on eth0 192.168.007.080.00025-190.204.062.116.59799: 220-mail.auul.pri.ee ESMTP Postfix (Debian/GNU) viivitus 192.168.007.080.00025-190.204.062.116.59799: 220 mail.auul.pri.ee ESMTP Postfix (Debian/GNU)
- kell 23:22:00 algavad deep protocol testid ja seejärel ühendus lõpetatakse (greylistingu moodi tegevus)
10.204.062.116.59799-192.168.007.080.00025: MAIL FROM:<priit@imool.org> SIZE=1348 BODY=7BIT 192.168.007.080.00025-10.204.062.116.59799: 250 2.1.0 Ok 10.204.062.116.59799-192.168.007.080.00025: RCPT TO:<imre@auul.pri.ee> ORCPT=rfc822;imre@auul.pri.ee 192.168.007.080.00025-10.204.062.116.59799: 450 4.3.2 Service currently unavailable 10.204.062.116.59799-192.168.007.080.00025: RSET 192.168.007.080.00025-10.204.062.116.59799: 250 2.0.0 Ok 10.204.062.116.59799-192.168.007.080.00025: QUIT 192.168.007.080.00025-10.204.062.116.59799: 221 2.0.0 Bye
- kell 23:22:22 pöördub klient uuesti, nüüd ta enam ei takerdu nn greylistinguss (PASS OLD)
- esimesena rakendatakse postfix-policyd-spf-python kontrolli smtpd_recipient_restrictions -> check_policy_service abil
- seejärel viiruste kontrolli, clamav-milter abil
- ja lõpuks spammikontrolli spamass-milter abil (logis on mitte spamass-milteri logi vaid tema poolt välja kutsutud spamd st spamassassini logi)
- antud juhul miski ei takistanud kirja liikumist ja kiri saadetakse edasi backend dovecot arvutile, 192.168.7.143
- sellist logi on äärmiselt hea lugeda kuna postfix ei saada nö ise enda sees kirju ringi, ainult üks message id väärtus 806EF41847 on kasutusel
- piirangute kirjeldamise direktiivide (nt smtpd_recipient_restrictions) loetelu töötab selliselt, et esimene, mis kirjaga klapib rakendatakse (Restrictions are applied in the order as specified; the first restriction that matches wins.)
DNS
Postimasina ip aadressiga seoses peab olemas üks ja ainult üks PTR kirje, mis nö selle ip aadressi samaks nimeks lahendab. Ja see sedasi saadud nimi peab lahenema samaks postimasina ip aadressiks
$ dig +short -x 10.198.206.1 mx1.imool.org $ dig +short 1.206.198.10.in-addr.arpa. $ dig +short mx1.imool.org 10.198.206.1
Kui ip aadressil on mitu PTR kirjet ja nad lahenduvad erinevateks nimedeks, ja ainult üks vastab samale ip aadressile, siis see ei ole piisvalt hea.
Lisaks peab postimasin
- välja pöördudes ütlema sama nimega helo
EHLO mx1.imool.org
- väljast pöördujat teenindades tervitama teda sama nimega
220 mx1.imool.org ESMTP Postfix (Debian/GNU)
Postfix
Debian v. 8 Jessie
Postfix v. 2.11 tarkvara paigaldamiseks Debian v. 8 Jessie keskkonnas sobib öelda
# apt-get install postfix postfix-ldap procmail
Debian v. 7 Wheezy
Debian v. 7 Wheeze keskkonnas saab Postfix v. 2.11 paigaldada backports repositooriumist lisades /etc/apt/sources.list faili
deb http://ftp.ee.debian.org/debian/ wheezy-backports main contrib non-free deb-src http://ftp.ee.debian.org/debian/ wheezy-backports main contrib non-free
Ning seejärel saab kasutada Backportsidest pakette öeldes
# apt-get -t wheezy-backports install postfix postfix-ldap
Ligipääsupiirangud
Postfix abil saab piirata otsekoheselt kahel alusel
- ip from
- mail from
Isegi kui süsteemi seadistamise ajal ei ole need vajalikud, nad ikkagi seadistada mingite dummy andmetega, et vajadusel saaks neid kiiresti rakendada.
ip from aadressi põhised
CIDR vahemike blokeermiseks sobib kaustada sellist lookup table't
# cat /etc/postfix/smtpd_client_restrictions_ip_access 10.255.141.0/24 WARN 20160111_priit_kask_reported_spammijad 10.63.104.0/22 WARN 20160111_priit_kask_reported_spammijad
hash andmebaasi moodustamiseks tuleb öelda
# postmap /etc/postfix/smtpd_client_restrictions_ip_access
ning Postfix main.cf seadisusfailis nt
smtpd_client_restrictions = warn_if_reject reject_unknown_client_hostname check_client_access cidr:/etc/postfix/smtpd_client_restrictions_ip_access
mail from aadressi põhised
Ümbriku mail from aadressi alusel piiramiseks sobib kasutada sellist lookup table't (nb! ümbriku mail from aadress on hõlpsasti võltsitav, aga võib sellegi poolest olla efektiivne meede)
# cat /etc/postfix/smtpd_recipient_restrictions_mail_from_access priit@imool.org REJECT
hash andmebaasi moodustamiseks tuleb öelda
# postmap /etc/postfix/smtpd_recipient_restrictions_mail_from_access
ning Postfix main.cf seadisusfailis nt
smtpd_recipient_restrictions = ... check_sender_access hash:/etc/postfix/smtpd_recipient_restrictions_mail_from_access
Misc
Vaikimisi teeb Postfix internetist sisse tuleva ühendusega seoses kaks dns päringut
23:34:45.363276 IP 192.168.1.250.43650 > 10.192.0.53.53: 30547+ PTR? 1.206.198.10.in-addr.arpa. (43) 23:34:45.468384 IP 10.192.0.53.53 > 192.168.1.250.43650: 30547 1/2/0 PTR mx1.imool.org. (110) 23:34:45.468826 IP 192.168.1.250.44838 > 10.192.0.53.53: 22332+ A? mx1.imool.org. (33) 23:34:45.469374 IP 10.192.0.53.53 > 192.168.1.250.44838: 22332 1/2/1 A 10.198.206.1 (97)
kus
- pöörduja ip aadressi peale revers nimelahendus
- saadud vastusele päripidi nimelahendus
Kui need ei klapi, siis logitakse midagi sellist
Jan 8 22:35:01 post-relay postfix/smtpd[6842]: warning: hostname mx2.imool.org does not resolve \ to address 10.198.206.158: Name or service not known
Postfixi seadistustes kasutatud smtpd_*_restriction parameetritest sõltub, kui otsustavalt selle omandatud teadmisega edasi töötatakse. Nt keeldutakse sellistelt saatjatelt kirju vastu võtmast
smtpd_client_restrictions = reject_unknown_client_hostname
Postfix reject_* direktiivide ette sobib kirjutada warn_if_reject, sel juhul reject ei toimu, aga logitakse võimalikud toimumised, nt
smtpd_helo_restrictions = warn_if_reject reject_unknown_helo_hostname
Postscreen
Postscreen on Postfix komponent, eraldi paigaldada ei ole midagi tarvis, ainult seadistada.
- greylisting - postscreen greylisting erineb nö tavalisest greylistingust (nt OpenBSD spamd) selle poolest, et hõlpsasti saab rakendada dns põhiseid whitelist'isid mille kasutamist kontrollib muu hulgas parameeter postscreen_dnsbl_whitelist_threshold.
NB! Tänu ajutiste vigade andmise jms viguritele ei pruugi olla selline teenus sobiv lõppkasutajale eposti releetamise jaoks (nn MUA programmidele nagu Icedove, Outlook jt).
Tööpõhimõte
MX policy test kasutamisel pannakse nö söödaks üles 2nd MX postimasina aadress, mille poole pöördumisi teenindab tegelikult sama Postfix protsess, mis teenindab 1st MX poole pöördumisi. Kui pahalane pöördub ainult 2nd MX aadressi poole, siis teada kunagi ei whitelistita; ja teada on, et mõned spammarid arvavad, et on kavalad ja töötavad 2nd MX'iga (kuna see saadab ise kirjad edasi 1st MX'ile). Tõsi, kui spämmar pöördub ka 1st MX poole ja tal õnnestub ennast lasta whitelistida, siis edasi saab ta kasutada teenust mõlema kanali kaudu. 2nd MX käest saab pöörduja ajutise veateate
Feb 26 23:19:03 www-2 sendemail[5953]: WARNING => The recipient <priit@moraal.ee> was rejected by the mail server, error follows: Feb 26 23:19:03 www-2 sendemail[5953]: WARNING => Received: 450 4.3.2 Service currently unavailable Feb 26 23:19:03 www-2 sendemail[5953]: ERROR => Exiting. No recipients were accepted for delivery by the mail server.
Seadistamine
Seoses Postscreen kasutamisega on /etc/postfix/master.cf failis tehtud sellised muudatused
# diff /var/tmp/etc-20150101-postfix/master.cf /etc/postfix/master.cf 11,15c11,15 < smtp inet n - - - - smtpd < #smtp inet n - - - 1 postscreen < #smtpd pass - - - - - smtpd < #dnsblog unix - - - - 0 dnsblog < #tlsproxy unix - - - - 0 tlsproxy --- > # smtp inet n - - - - smtpd > smtp inet n - - - 1 postscreen > smtpd pass - - - - - smtpd > dnsblog unix - - - - 0 dnsblog > tlsproxy unix - - - - 0 tlsproxy
kus
- smtp inet teenus, st port 25/tcp peal tegeleb klientidega mitte nö tavaline smtpd protsess aga postscreen
ning /etc/postfix/main.cf failis kasutusel sellised direktiivid
# POSTSCREEN ALGUS # testid enne before 220 teste # permanent white/blacklist (postscreen_blacklist_action ytleb kui otsustavalt kaituda) postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr postscreen_blacklist_action = enforce # mx policy test postscreen_whitelist_interfaces = !192.168.7.81 static:all # tests before 220 greeting postscreen_greet_banner = "PGB at RT" postscreen_greet_action = enforce # dnsbl testid postscreen_dnsbl_sites = zen.spamhaus.org*3 list.dnswl.org=127.[0..255].[0..255].0*-2 list.dnswl.org=127.[0..255].[0..255].1*-3 list.dnswl.org=127.[0..255].[0..255].[2..255]*-4 postscreen_dnsbl_threshold = 3 postscreen_dnsbl_whitelist_threshold = -2 # mida teha vastavalt permanent blacklist, pregreet ja dnsbl tabamuste puhul postscreen_dnsbl_action = enforce # test after 220 greeting i.e. deep protocol test postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = drop postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce # POSTSCREEN LOPP
kus
- TODO
/etc/postfix/postscreen_access.cidr faili sisu on nt selline
# cat /etc/postfix/postscreen_access.cidr 192.168.10.0/24 permit
Näiteks, mingi komplekti nn Eesti ip aadresse saab aadressilt ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest.
Kasutamine
Millegipärast kirjutatakse mail.log logisse episoodiliselt sellist teadet, aga väidetavalt ei pea selle pärast muretsema
Jan 11 06:26:52 post-relay postfix/postscreen[15938]: close database \ /var/lib/postfix/postscreen_cache.db: No such file or directory (possible Berkeley DB bug)
postscreen_cache.db sisu esitamiseks sobib öelda nt
# db_dump -d a /var/lib/postfix/postscreen_cache.db In-memory DB structure: btree: 0x110000 (open called, read-only) bt_meta: 0 bt_root: 1 bt_minkey: 2 bt_compare: 0x7fbabdb42ea0 bt_prefix: 0x7fbabdb43080 bt_compress: 0 bt_decompress: 0 bt_lpgno: 0 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= page 0: btree metadata: LSN [0][1]: level 0 magic: 0x53162 version: 9 pagesize: 4096 .. root: 1 page 1: btree internal: LSN [0][1]: level 2 records: 0 entries: 4 offset: 4020 [000] 4084 pgno: 2 type: 1 len: 0 [001] 4036 pgno: 4 type: 1 len: 5 data: 207.8 [002] 4056 pgno: 3 type: 1 len: 15 data: 213.129.163.50\0 [003] 4020 pgno: 5 type: 1 len: 1 data: 37 page 2: btree leaf: LSN [0][1]: level 1 prev: 0 next: 4 entries: 64 offset: 1564 [000] 4080 len: 13 data: 109.74.0.211\0 [001] 4020 len: 55 data: 1420809183;1420809183;1420809183;1420809183;1420809183\0 [002] 4000 len: 15 data: 113.105.168.20\0 [003] 3940 len: 55 data: 1420816370;1420733570;1423321971;1423321971;1423321971\0 [004] 3920 len: 16 data: 136.173.162.208\0 ...
Kasulikud lisamaterjalid
DNS blocklistid
DNSBL
DNSBL (DNS Blacklist) töö põhineb asjaolul, et smtp ühenduse alguses on teada, milliselt ip aadressilt pöördutakse. Kui see ip aadress on seotud tuntud pahalasega vms, siis kiri blokeeritakse. Nende ip aadresside pahasust kontrollitakse reaalajas üle DNS'i, mitmed teenusepakkujad pakuvad sellist teenust. Üks on Spamhaus zen.spamhaus.org. Kasutamine toimub postscreen seest nii nagu allpool kirjeldatakse.
DNSBL päringus kasutatakse reversed ip aadressi + teenusepakkuja teenuse domeeninime, nt
1.2.3.4.zen.spamhaus.org
Vastuseks on NXDOMAIN (non existent domainname) või 127.x.x.x ip aadress.
RHSBL
RHSBL ehk Right Hand Side Block List töö põhineb asjaolul, et smtp ühenduse alguses ütleb klient kirja 'mail from' ehk ümbriku from aadressi. Kui selles aadressis kasutatud domeeninime osa on seotud tuntud pahalasega vms, siis kiri blokeeritakse. Nende domeeninimede pahasust kontrollitakse reaalajas üle DNS'i, mitmed teenusepakkujad pakuvad sellist teenust. Üks on Spamhaus DBL (Domain Blocklist). Kasutamiseks sobib kasutada nt sellist rida
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_rhsbl_sender dbl.spamhaus.org
DNSBL päringus kasutatakse mail from domeeninime osa + teenusepakkuja teenuse domeeninime, nt
moraal.ee.zen.spamhaus.org
Vastuseks on NXDOMAIN (non existent domainname) või 127.x.x.x ip aadress.
DNSWL
DNSWL (DNS Whitelist) töö põhineb asjaolul, et smtp ühenduse alguses on teada, milliselt ip aadressilt pöördutakse. Kui see ip aadress on seotud tuntud korraliku kaustajaga, siis kiri lubatakse läbi. Nende ip aadresside korralikkust kontrollitakse reaalajas üle DNS'i, mitmed teenusepakkujad pakuvad sellist teenust. Üks on Spamhaus zen.spamhaus.org. Kasutamine toimub postscreen seest nii nagu allpool kirjeldatakse.
SPF kontroll
SPF ise ei blokeeri kõiki kirju, mida ta blokeerida saaks, osalt kasutatakse SPF poolt lisatud päiseid Spamassassini poolt.
Paigaldamine
Tarkvara paigaldamiseks sobib öelda
# apt-get install postfix-policyd-spf-python
Paigaldamise käigus
- tekitatakse kasutaja:grupp policyd-spf:policyd-spf
- seadistusfail /etc/postfix-policyd-spf-python/policyd-spf.conf
Seadistamine
postfix-policyd-spf-python tööd juhib seadistusfail
# cat /etc/postfix-policyd-spf-python/policyd-spf.conf # For a fully commented sample config file see policyd-spf.conf.commented debugLevel = 1 defaultSeedOnly = 0 HELO_reject = SPF_Not_Pass Mail_From_reject = Fail PermError_reject = False TempError_Defer = False skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128
kus
- TODO
Kasutamiseks tuleb /etc/postfix/main.cf faili lisada rida smtpd_receipient_restrictions juurde vastav rida
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination check_policy_service unix:private/policyd-spf
ning /etc/postfix/master.cf faili lisada read (nb! python v. 3 Jessie kasutamisel; kui järgmine rida algab whitespace'iga, siis käsitletakse seda eelmise rea jätkumisena)
policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
Kasutamine
postfix-policyd-spf-python programmiga seoses mingit deemon protsessi vms ei käi.
Kasulikud lisamaterjalid
Header checks
Postfix võimaldab kontrollida regulaaravaldiste abil kirja erinevaid headereid ja kirja sisu.
mime_header_checks
mime_header_checks kasutamiseks peab /etc/postfix/main.cf failis sisalduma rida
mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp
ja mime header checks seadistusfailis võiks kasutada midagi sellist
# cat /etc/postfix/mime_header_checks.regexp /filename=\"?(.*)\.(bat|chm|cmd|com|do|exe|hta|jse|rm|scr|pif|vbe|vbs|vxd|xl)\"?$/ REJECT For security reasons we reject attachments of this type /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wav|mov|wmf|xl))"?\s*$/ REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
Kus
- \"? - kaldkriips iskeibid " märgi ja ? ütleb, et temast vasakul olev sümbol või esineda või puududa
- (.*) - suvaline sümbol või esineda suvaline arv kordi, sulud võimaldavad edaspidi $N abil viidata
- (bat|cdm..) - püstkriips väljendab, et võib esineda üks mitmete hulgast
- \. - iskeibitud punkt tähistab punkti esinemist nö literally
- $ - tähistab rea lõppu
- $2 - tähistab teisel positsioonil esinenud sulgude sisu
Mõnelpool soovitatakse nt sellist regulaararvaldist
/name=[^>]*\.(bat|com|exe|dll|vbs)/ REJECT
kus
- [^>]* - caret (^) märk kasutamine kantsulgudes tähistab eitust, tundub, et antud juhul soovitakse väljendada, et praktiliselt suvaline sümbol (kõik v.a. > märk) võib esineda 0 või enam kordi
Testimine
Käsurealt kontrollimiseks
# postmap -q 'filename=tere.exe' regexp:/etc/postfix/mime_header_checks.regexp REJECT For security reasons we reject attachments of this type
Kirjaga (.exe faili sisu ei ole oluline)
# sendemail -a /tmp/tere.exe -f imre@auul.pri.ee -t imre@imool.org -u 'test kiri' -m 'sisu' -o tls=no Dec 27 17:48:34 www-2 sendemail[30765]: ERROR => Received: 550 5.7.1 Attachment type not allowed. File "tere.exe" has the unacceptable extension "exe"
Kasulikud lisamaterjalid
- http://www.arschkrebs.de/postfix/postfix_sobigf.shtml
- http://www.zytrax.com/tech/web/regex.htm
- http://www.cyberciti.biz/tips/postfix-block-mime-attachment-files.html
ClamAV
ClamAV töötab tasuta internetis jagatava viiruste andmebaasiga kusjuures lisaks kasutatakse ka C4S aadressil http://c4s.pikker.ee/ olevaid reegleid.
Paigaldamine
Tarkvara paigaldamiseks sobib öelda
# apt-get install clamav-daemon # apt-get install clamav-freshclam
Seadistamine
clamav-daemon tööd juhib seadistusfail /etc/clamav/clamd.conf
TODO
clamav-freshclam tööd juhib seadistusfail /etc/clamav/freshclam.conf, sobib default ja kus saab vajadusel näidata http proxy asukoha
HTTPProxyServer 192.168.9.39 HTTPProxyPort 3128
C4S reeglite kasutamine
2016 aasta suvel leivitatakse aadressil http://c4s.pikker.ee/
- reeglite komplekti 3RDP (http://c4s.pikker.ee/3rdp.database.list.txt) - partnerite poolt tehtud analüüsi põhjal koostatud ja C4S projekti poolt vahendatud andmestik
- reeglite kompleti C4S (http://c4s.pikker.ee/c4s.database.list.txt) - C4S projekti tehtud analüüsi põhjal koostatud andmestik
- C4S update versiooni 3.15 (versioonide erinevused seisnevad nt clamd reload tegemises, logimise võimalustes, pixz vs xz kasutamises jms)
C4S http://c4s.pikker.ee/ reeglite kasutamiseks tuleb paigaldada kolm utiliiti
- curl - kopeerib reeglite nimekirjad
- gpg - kontrollib signatuurid
- pixz - paralleelet tööd tegev pakkimise tarkvara
Paigaldamiseks sobub Debian v. 8 Jessie keskkonnas öelda
# apt-get install curl gnupg pixz
Debian v. 7 Wheezy keskkonnas tuleb pixz kompileerida või kasutada pixz asemel tavalist versiooni
# apt-get install xz-utils
Tööd teeb üks shell skript http://c4s.pikker.ee/c4s.updater.sh, mille alguses on kasutamisõpetus. Skript sobib paigutada kataloogi
# mkdir -p /opt/c4s/bin # cd /opt/c4s/bin # wget http://c4s.pikker.ee/c4s.updater.sh
Seejärel üle vaadata selliste muutujate väärtused, nt kasutada selliseid
# cat /etc/C4S.cfg # kommenteerida valja http proxy kasutamiseks # export http_proxy="http://192.168.1.241:3128" CLAMAV_USER=`grep User /etc/clamav/clamd.conf | cut -d " " -f2` DOWNLOAD_DIR=`grep DatabaseDirectory /etc/clamav/clamd.conf | cut -d " " -f2` C4S_DB_IGNORE_LIST="c4s.0days|c4s.adult.0days|c4s.junk.0days" MY_3RDP_DB_IGNORE_LIST="3rdp.doppelstern|3rdp.something.else" C4S_CLIENT_OUTPUT="LOG" C4S_XZ_TOOL=pixz C4S_CLIENT_AUTOUPDATE="OFF"
kus
- C4S ja 3RDP ignore listid
- kuhu logitakse, TTY või LOG
- kas C4S uuendamise skripti uuendatakse võimalusel automaatselt
Lisada root kasutaja võtmehoidjasse teenusega soetud gpg võti
# gpg --keyserver keyserver.ubuntu.com --recv-keys DAD341E9 gpg: directory `/root/.gnupg' created gpg: new configuration file `/root/.gnupg/gpg.conf' created gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/root/.gnupg/secring.gpg' created gpg: keyring `/root/.gnupg/pubring.gpg' created gpg: requesting key DAD341E9 from hkp server keyserver.ubuntu.com gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key DAD341E9: public key "Heiki Pikker <heiki.pikker@pikker.ee>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
Kui serverist on suvaline internetti pääsemine piiratud, siis saab võtme paigaldada ajutise ssh tunneli kaudu
tookohaarvuti-kust-saab-piiramatult-internetti$ ssh imre@10.249.6.186 -R 11371:keyserver.ubuntu.com:11371 server# gpg --keyserver 127.0.0.1 --recv-keys DAD341E9
Käivitada esmakordselt
# chmod 0755 /opt/c4s/bin/c4s.updater.sh # /opt/c4s/bin/c4s.updater.sh
Skripti töö tulemusena tekib olemasolevasse kataloogi /var/lib/clamav juurde hulka selliseid faile, uute signatuuride kasutuselevõtmine toimub automaatselt
/var/lib/clamav/c4s*
C4S logisse kirjutatakse midagi sellist
############################################################### # C4S Updater 3.15 started at: Sun Jul 17 13:40:23 EEST 2016 ############################################################### Signature for c4s.malware.email.autogen.ndb database is missing No updates for c4s.adult.bin.hdb No updates for c4s.adult.dom.ndb .. Summary: Some databases where updated at. Reloading clamd at: Sun Jul 17 13:43:16 EEST 2016
ClamAV logisse kirjutatakse midagi sellist
# tail -f /var/log/clamav/clamav.log .. Thu Jan 8 13:48:20 2015 -> Reading databases from /var/lib/clamav Thu Jan 8 13:50:01 2015 -> Database correctly reloaded (4406737 signatures)
Selleks, et C4S nimekiri uueneks edaspidi automaatselt, sobib kasutada nt sellist cron tööd
# cat /etc/cron.daily/c4s-updater #!/bin/sh /opt/c4s/bin/c4s.updater.sh 1>>/var/log/c4s.updater.log 2>&1 # /etc/init.d/clamav-daemon reload-daemon 1>/dev/null 2>&1
# chmod 0755 /etc/cron.daily/c4s-updater
Mustrite haldamiseks sobib öelda nt
# sigtool --find-sigs C4S.STOCK.DOM.45 | sigtool --decode-sigs VIRUS NAME: C4S.STOCK.DOM.45 FUNCTIONALITY LEVEL: >=48 TARGET TYPE: MAIL OFFSET: * DECODED SIGNATURE: {BOUNDARY_LEFT}imool.orgCHAR_ALTERNATIVE:'|"| |/|=|_| |?|&|>}
Whitelist jaoks, nt tutvuda olemasolevatega ning moodustada nende eeskujul juurde (muudatus kehtestub automaatselt 'natukese aja pärast' või peale clamd deemoni restarti)
# find /var/lib/clamav/ -name \*ign2 /var/lib/clamav/3rdp.sanesecuritywhitelist.ign2 /var/lib/clamav/c4s.whitelists.ign2
Nt Eicar läbilubamiseks sobib selline nimekiri, millegipärast tunneb ClamAV teda kolme erineva nimega ja nad kõik on vaja lubada
# cat /var/lib/clamav/imre.whitelists.ign2 Eicar-Test-Signature Clamav.Test.File-7 Win.Test.EICAR_NDB-1
Üldiselt, probleeme tekitava nime loetakse ClamAV logist, antud juhul 'C4S.MALWARE.URL.AUTOGEN.8170799', UNOFFICIAL lisatakse whitelist kasutamisel automaatselt
May 18 16:22:38 post-relay clamav-milter[28658]: Message 5A47E6368F from <trac@arendus.moraal.ee> to <trac@auul.pri.ee> \ with subject 'Minu kiri' message-id '<062.b420a68e87a7f62a01d87bf10783da68@arendus.tarkvaralabor.ee>' date \ 'Wed, 18 May 2016 13:22:38 -0000' infected by C4S.MALWARE.URL.AUTOGEN.8170799.UNOFFICIAL
Märkused
- Kui updater skript ei moodusta puhtasse kataloogi sisu ära, sel juhul tuleb kopeerid alla mingi varaseme versiooni seis ning käivitada uuem updater
C4S sissekande nimi
C4S.MALWARE.DOM.AUTOGEN.43349
kus
- toode - C4S
- tüüp - malware
- dom - domeenid
- autogen - genereeritud s.t. üle küll kiirelt vaadatud aga pole käsitsi kirjutatud reeglid
- id - mille järgi baasist leida
Probleemid
Tundub, et kui ClamAV loeb andmebaasi sisse, siis sel ajal on süsteemis suur koormus ning praktiliselt SMTP teenuste ei pakuta, logisse tekivad veateated
.. Jul 14 12:45:07 post-relay clamav-milter[16919]: Timed out while reading clamd reply Jul 14 12:45:07 post-relay clamav-milter[16919]: No reply from clamd ...
ning strace abil clamd protssessi jälgides paistab midagi sellist
# strace -p 21758 Process 21758 attached read(636, "3742e65752f6d61646f6e6e612d66617"..., 4096) = 4096 read(636, "3686d617262726561645f31302e61737"..., 4096) = 4096 read(636, "MALWARE.URL.AUTOGEN.6177736:4:*:"..., 4096) = 4096 read(636, "*:(B)7777772e70617472656e612e636"..., 4096) = 4096 read(636, "2e363231353638343538393139:48\nC4"..., 4096) = 4096 read(636, "682d737461727475702d746861742d61"..., 4096) = 4096 read(636, "772e706179732d70657269676f72642d"..., 4096) = 4096 read(636, "6f6e696e732e636f6d2f666565642f3f"..., 4096) = 4096 read(636, "0:4:*:(B)7777772e7062636f6e66657"..., 4096) = 4096 read(636, "772e7062636f6e666572656e6365732e"..., 4096) = 4096 ...
Tundub, et vahel ei lase clamd lahti kustutatud faile
# zgrep "Lib" /var/log/syslog.1 | grep open | tail -n 5 Jul 25 23:44:07 clamav-node1 clamd[22500]: LibClamAV Error: cli_gentempfd: Can't create temporary file /tmp/clamav- 96e4e691bb8582169020c2768523d6b1.tmp: Too many open files Jul 25 23:54:07 clamav-node1 clamd[22500]: LibClamAV Error: cli_gentempfd: Can't create temporary file /tmp/clamav-ee9bf463650e05adc1f100b77918c2e5.tmp/clamav-e06ca48c48ed802d63762619c500a30c.tmp: Too many open files ...
# lsof -u clamav | grep deleted | nl | tail -n 5 962 clamd 6234 clamav 974u REG 253,0 1682 19670 /tmp/clamav-f541120373cb14246373558040cc14a3.tmp (deleted) 963 clamd 6234 clamav 975u REG 253,0 1617 19674 /tmp/clamav-ff81947319c7dff89561756657a049cc.tmp (deleted) 964 clamd 6234 clamav 976u REG 253,0 4395 19672 /tmp/clamav-f199c6bccf9801dc59ce20976eb35a25.tmp (deleted) 965 clamd 6234 clamav 977u REG 253,0 2501 19676 /tmp/clamav-e4d307356f89a9b44558b3cc1b5d66c0.tmp (deleted) 966 clamd 6234 clamav 978u REG 253,0 2219 19678 /tmp/clamav-f74efe200480353f0f9c41f84b04a7c2.tmp (deleted)
paistab Debian, et aitab
# grep Temp /etc/clamav/clamd.conf TemporaryDirectory /var/tmp/clamd LeaveTemporaryFiles true
ning
# cat /etc/cron.d/clamav-workaround # 10 1 * * * find /var/tmp/clamd ! -name clamd -mtime +4 -delete # */20 * * * * root find /var/tmp/clamd -maxdepth 1 -user clamav -mmin +60 -exec rm -rf {} \; */20 * * * * root find /var/tmp/clamd -maxdepth 1 ! -name clamd -user clamav -mmin +60 -exec rm -rf {} \;
Või Ubuntu peal (tundub, et seal TemporaryDirectory nagu ei toimi ja failid asuvad /tmp kataloogis)
# cat /etc/cron.d/clamav-workaround */20 * * * * root find /tmp -maxdepth 1 ! -name clamd -user clamav -mmin +60 -exec rm -rf {} \;
Kontrollide väljalülitamine
Võib juhtuda, et nt C4S.JUNK.IP.AUTOGEN tabab nö ebaõiglaselt saatjat, nt
# sigtool --find-sigs C4S.JUNK.IP.AUTOGEN.5274350 | sigtool --decode-sigs VIRUS NAME: C4S.JUNK.IP.AUTOGEN.5274350 FUNCTIONALITY LEVEL: >=48 TARGET TYPE: MAIL OFFSET: * DECODED SIGNATURE: {STRING_ALTERNATIVE:://| [|) (| ([}209.85.192.178
kus 209.85.192.178 on Google ip aadress ja seega küllap piisavalt hea, et siiski vastu võtta. Ükshaaval ei saa ip aadresse whitelistida, lahenduseks võib olla kogu C4S.JUNK.IP.AUTOGEN välja lülitada. Selleks tuleb kasutada nt sellist C4S seadistusfaili
# cat /etc/C4S.cfg C4S_CLIENT_AUTOUPDATE="ON" C4S_CLIENT_OUTPUT="LOG" C4S_DB_IGNORE_LIST="c4s.0days|c4s.adult.0days|c4s.junk.0days|c4s.junk.ip.autogen"
kustutada ära vastav .ndb ja .ndb.sig
# rm /var/lib/clamav/c4s.junk.ip.autogen.ndb*
ning öelda
# /opt/c4s/bin/c4s.updater.sh
C4S RBL kasutamine
C4S RBL jagatakse aadressil https://lab.pikker.ee/ ja tõenäoliselt piisab kasutamiseks nad lisada olemasolevate vastavate parameetrite väärtuste lõppu. Blokeeritud kiri paistab logis sarnaselt
Sep 17 13:50:30 post-relay postfix/smtpd[4005]: NOQUEUE: reject: RCPT from unknown[10.122.156.197]: 554 5.7.1 Service unavailable; Client host [10.122.156.197] blocked using ipbl.lab.pikker.ee; E-mail was rejected due to the 10.122.156.197 reputation. Look your mailserver logs for explanation.; from=<liusl@gdca.com.ee> to=<priit@helioest.ee> proto=ESMTP helo=<mail.gdca.com.ee>
kus tekst on aadressil
# dig +short 197.122.156.10.ipbl.lab.pikker.ee txt "E-mail was rejected due to the 10.156.122.197 reputation. Look your mailserver logs for explanation."
Kasulikud lisamaterjalid
clamav-milter
Postfix kasutab clamav-milter abil ClamAV teenust. Selliselt kasutades toimub before-queue viiruste kontroll.
Paigaldamine
# apt-get install clamav-milter
Seadistamine
clamav-milter tööd juhib seadistusfail /etc/clamav/clamav-milter.conf, kus võib olla vajalik kohendada selliste parameetrite väärtusi
MilterSocket /var/spool/postfix/clamav/clamav-milter.ctl OnInfected Reject LogFacility LOG_MAIL LogInfected Basic LogClean Basic MaxFileSize 25M MilterSocketGroup clamav MilterSocketMode 666 RejectMsg "Rejected by ClamAV" LogSyslog true ReportHostname mx1.imool.org
Kasutamiseks tuleb Postfix /etc/postfix/main.cf seadisusfaili lisada rida
smtpd_milters = unix:/clamav/clamav-milter.ctl
clamav-milter deemoni käivitamiseks sobib öelda
# /etc/init.d/clamav-milter start
Testimine
Testiks saata kiri
$ sendemail -f priit@imool.org -t root@mail.auul.pri.ee -u sub -m 'sisu' -s 192.168.1.252 -o tls=no
ja eicar test viirusega kiri
$ sendemail -f priit@imool.org -t root@mail.auul.pri.ee -u sub \ -m 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' -s 192.168.1.252 -o tls=no
Whitelistimine
Selleks, et ClamAV seisukohast tingimusteta võtta vastu mingi mail from saatja kiri sobib kasutada sellist tekstifaili
# cat /etc/clamav/clamav-milter-whitelist.txt From:imre@moraal.ee
ning viidata sellele /etc/clamav/clamav-milter.conf failist reaga
Whitelist /etc/clamav/clamav-milter-whitelist.txt
ning läbi saanud kiri paistab logis
Thu Feb 8 01:37:58 2018 -> Skipping scan for <imre@moraal.ee> (whitelisted from)
SpamAssassin
Antud juhul ei kasutata sa-learn abil bayesian treenimist, aga bayes_auto_learn on sisse lülitatud. ClamAV kasutamine toimub spamass-milter vahendusel.
Paigaldamine
Tarkvara paigaldamiseks sobib öelda
# apt-get install spamassassin
Tulemusena tekib failisüsteemi omajagu perl teeke
- /etc/default/spamassassin
- /usr/bin/sa-update
- /usr/sbin/spamd
- /lib/systemd/system/spamassassin.service
Selleks, et automaatselt alglaadimisel käivituks tuleb öelda systemd keskkonnas
# systemctl enable spamassassin.service Synchronizing state for spamassassin.service with sysvinit using update-rc.d... Executing /usr/sbin/update-rc.d spamassassin defaults Executing /usr/sbin/update-rc.d spamassassin enable
Seadistamine
Seadistused asuvad kataloogis /etc/spamassassin, eriti failis /etc/spamassassin/local.cf, kus
- report_safe - 0 kasutamisel saadetakse spam kirjad edasi (praktiliselt need, mis jäävad spam tunnuse skoori ja spamass-milter -r reject väärtuse vahele) muutmata sisuga, lisatakse vaid päiseid; 1 kasutamisel moodustatakse uus kiri ja attachmentina lisatakse saabunud kiri
Spam detection software, running on the system "post-relay.auul", has identified this incoming email as possible spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X [...] Content analysis details: (1000.0 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email 0.0 TVD_SPACE_RATIO No description available. The original message was not completely plain text, and may be unsafe to open with some email clients; in particular, it may contain a virus, or confirm that your address can receive spam. If you wish to view it, it may be safer to save it to a file and open it with an editor. ...
- use_bayes 1 - kas kasutatakse bayesian kontrolle
- bayes_auto_learn 1 - kas toimub automaatne nö õpetamine, selle tulemusena moodustuvad failid (nb! need on spamassassini protsessi omad, mitte spamass-milter kasutaja omad, siiski tundub, et vähemalt Debian v. 8 Jessie puhul on nad spamass-milter:nogroup omad)
# find /var/lib/spamass-milter/.spamassassin -type f -ls 278180 12 -rw------- 1 spamd spamd 12288 Jan 4 21:49 /var/lib/spamass-milter/.spamassassin/bayes_seen 277998 12 -rw------- 1 spamd spamd 12288 Jan 4 21:49 /var/lib/spamass-milter/.spamassassin/bayes_toks
# tail -n 5 /etc/spamassassin/local.cf # SPF Overwrite score SPF_SOFTFAIL 2 score SPF_HELO_FAIL 2 score UNPARSEABLE_RELAY 0
Spamassassin uuenduste kopeerimiseks läbi http proxy sobib kasutada failis /etc/default/spamassassin rida
CRON=1 http_proxy="http://192.168.1.241:3128"
Võiks katseks öelda käsitsi
# http_proxy="http://192.168.1.241:3128" sa-update -D
Uuendusi teeb cron töö
/etc/cron.daily/spamassassin
ja selleks, et uuendused saaksid toimida peab olema /var/lib/spamassassin alune kasutaja:grupp debian-spamd:debian-spamd
# chown -R debian-spamd:debian-spamd /var/lib/spamassassin
Kontrollid
Spamassassin teeb vaikimisi mitmesuguseid kontrolle
DNS põhised
- mail from juures kasutatud domeenimi (nn RHSBL)
- kirja sisus olevate urlide domeeninimed (nn URIDNSBL)
mida kontrollivad direktiivid
# grep -i dns /etc/spamassassin/*.pre /etc/spamassassin/init.pre:loadplugin Mail::SpamAssassin::Plugin::URIDNSBL /etc/spamassassin/v320.pre:loadplugin Mail::SpamAssassin::Plugin::DNSEval /etc/spamassassin/v340.pre:loadplugin Mail::SpamAssassin::Plugin::AskDNS
SPF
Kasutab postfix-policyd-spf-python poolt lisatud päiseid oma SPF skoori arvutamiseks. Millegipärast ei õnnestus Spamassassini enda sisemist SPF moodulit kasutada nii, et ta DNS päringuid teeks.
Saata testiks gmail.com pealt kiri, peab olema headerites midagi sellist
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.212.177; \ helo=mail-wi0-f177.google.com; envelope-from=imre.oolberg@gmail.com; receiver=imre@auul.pri.ee
DKIM
Vajadusel paigaldada pakett libmail-dkim-perl
# apt-get install libmail-dkim-perl
Saata testiks gmail.com pealt kiri, peavad olema headerites midagi sellist
X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0
spamass-milter
Postfix kasutab spamass-milter abil Spamassassin teenust. Selliselt kasutades toimub before-queue spammi kontroll (ja muude näitajate osas kirjadele skooride arvestamine, nt SPF ja DKIM).
Paigaldamine
Tarkvara paigaldamiseks sobib öelda kusjuures paigaldamise käigus ei tekitata nö kodukataloogi /var/lib/spamass-milter
# apt-get install spamass-milter .. Warning: The home dir /var/lib/spamass-milter you specified can't be accessed: No such file or directory Adding system user `spamass-milter' (UID 115) ... Adding new user `spamass-milter' (UID 115) with group `nogroup' ... Not creating home directory `/var/lib/spamass-milter'.
ning tekitada kataloog
# mkdir /var/lib/spamass-milter # chown spamass-milter:nogroup /var/lib/spamass-milter
kuhu moodustatakse bayesiani failid
# find /var/lib/spamass-milter -type f -ls 399162 12 -rw------- 1 spamass-milter nogroup 12288 Jan 8 05:39 /var/lib/spamass-milter/.spamassassin/bayes_toks 399016 4 -rw-r--r-- 1 spamass-milter nogroup 1869 Jan 8 03:23 /var/lib/spamass-milter/.spamassassin/user_prefs 399164 12 -rw------- 1 spamass-milter nogroup 12288 Jan 8 05:39 /var/lib/spamass-milter/.spamassassin/bayes_seen
Seadistamine
# cat /etc/default/spamass-milter # Reject emails with spamassassin scores > 15. OPTIONS="-m -i 127.0.0.1 -r 15 -- -s 10240000" SOCKET="/var/spool/postfix/spamass/spamass.sock" SOCKETOWNER="postfix:postfix" SOCKETMODE="0660"
kus
- -i - mitte rakendada kontrolli sellelt ip aadressilt saabuvatele andmetele
- -m - mitte muuta kirjade subject, content-type ega sisu
- -r - reject kirjadele, millel on kõrgem spam score
- -- järel olevad suvandid saadetakse edasi spamc programmile (spamd klient), -s määrab analüüsitava kirja maksimaalse suuruse, mis on vaikimisi 512 kB
Kasutamiseks tuleb Postfix /etc/postfix/main.cf seadisusfaili lisada smtpd_milters reale element juurde, kokku nii
smtpd_milters = unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock
Kuna spämmi saatjate jaoks on oluline saata kiiresti ja palju kirju, siis reeglina nad ei saada suuru kirju. Kui kiri on suurem -s parameetriga näidatud väärtusest, siis tekib logisse midagi sellist, kusjuures kiri liigub süsteemist läbi ilma Spammassassini töötluseta (ja vastavad päiseid kirjale ka ei lisata)
Feb 4 10:12:23 post-relay spamc[22715]: skipped message, greater than max message size (512000 bytes) Feb 4 10:12:23 post-relay spamass-milter[22698]: Could not extract score from <>
spamass-milter deemoni käivitamiseks sobib öelda
# /etc/init.d/spamass-milter start
Testimine
Tundub, et peale süsteemi käivitamist, kaasneb alati esimese kirjaga kaasneb selline teade
Jan 8 13:22:12 mx-fend spamass-milter[420]: Could not retrieve sendmail macro "i"!. \ Please add it to confMILTER_MACROS_ENVFROM for better spamassassin results
Testimiseks sobib saata selline kiri
$ sendemail -f priit@imool.org -t root@mail.auul.pri.ee -u sub \ -m 'XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X' -s 192.168.1.252 -o tls=no
Subject rea muutmine
Spämmikahtlusega kirjade Subject rea muutmiseks sobib kasutada milteri seadistusfailis OPTIONS parameetrit ilma -m suvandita
OPTIONS="-i 127.0.0.1 -r 15 -- -s 10240000"
ning Spammassassin seadisusfailis /etc/spamassassin/local.cf rida
rewrite_header Subject *****SPAM*****
Non-local delivery kontrollimine
Non-local delivery juhtumiks on nt 2nd MX kasutamine või frontend smtp serveri pidamine teise, local deliveriga postimasina ees (nt MS Exchange). Front-end postimasina ülesandeks on lasta läbi ettenähtud domeenidele saabuvad kirjad suunates nad edasi sobivale backend serverile + seejuures kontrollides, et rcpt to aadressid eksisteerivad (nt Active Directory LDAP serveri abil). Nt sobib kasutada sellist seadistusfaili
# NON-LOCAL DELIVERY relay_domains = /etc/postfix/relay-domains.txt transport_maps = hash:/etc/postfix/transport relay_recipient_maps = ldap:/etc/postfix/relay-recipient-maps-ad-users.cf ldap:/etc/postfix/relay-recipient-maps-ldap-ad-groups.cf # NON-LOCAL DELIVERY
kus
- relay_domains fail sisaldab releetatavaid non-delivery domeeninimesid, igal real üks domeeninimi, postmap käsuga .db baasi pole vajalik moodustada
# cat /etc/postfix/relay-domains.txt imool.org auul.pri.ee
- transport_maps näitab, kus asub backend postimasin, või 1nd mx server (kui seda ei näidata, siis leitakse ta üles dns abil nö tavalisel viisil)
# cat /etc/postfix/transport imool.org :[192.168.1.251] auul.pri.ee :[192.168.1.252]
- relay_recipient_maps näitab antud juhul ära AD LDAP kataloogi asukoha ning kirjeldab, kuidas saada LDAP kataloogist vastused (search base ja query_filter) - tüüpiliselt on eposti aadress kirjas AD kasutaja ja AD grupi sissekannete mõne atribuudi väärtusena; relay_recipient_maps parameeril võib olla palju väärtusi
# cat /etc/postfix/relay-recipient-maps-ad-users.cf server_host = 10.249.9.4 search_base = ou=IMOOL,dc=imool,dc=local query_filter = (&(|(mail=%s)(proxyAddresses=smtp:%s))(objectClass=person)(!(userAccountControl=514))) result_attribute = mail version = 3 bind = yes start_tls = no bind_dn = postfix@imool.local bind_pw = parool scope = sub debuglevel = 0
ning
# cat /etc/postfix/relay-recipient-maps-ad-groups.cf server_host = 10.249.9.4 search_base = ou=Grupid,ou=IMOOL,dc=imool,dc=local query_filter = (&(|(mail=%s)(proxyAddresses=smtp:%s))(objectclass=group)) result_attribute = mail version = 3 bind = yes start_tls = no bind_dn = postfix@imool.local bind_pw = parool scope = sub debuglevel = 0
Logianalüüs ELK platvormil
Tundub, et sobib kasutada sellist logstash seadistust /etc/logstash/conf.d/ls.conf
# cat /etc/logstash/conf.d/ls.conf input { file { path => [ "/srv/logs/192.168.1.250/mail.*.log" ] type => "mail" start_position => "beginning" } filter { if [type] == "mail" { grok { match => { "message" => "%{POSTFIXSMTPD}" } add_tag => "SMTPD" tag_on_failure => [] } grok { match => { "message" => "%{SPF}" } add_tag => "SPF" tag_on_failure => [] } grok { match => [ "message", "%{POSTFIXSMTPRELAY}" ] add_tag => "SMTP" tag_on_failure => [] } grok { match => [ "message", "%{CLAMAVMILTERCLEAN}" ] add_tag => "CLAMAV" add_field => [ "virusname", "PUHASKIRI" ] tag_on_failure => [] } grok { match => [ "message", "%{CLAMAVMILTERINFECTED}" ] add_tag => "CLAMAV" tag_on_failure => [] } grok { match => [ "message", "%{POSTSCREENCONNECT}", "message", "%{POSTSCREENNOQUEUE}" ] add_tag => "POSTSCREEN" tag_on_failure => [] } grok { match => [ "message", "%{SPAMD}" ] add_tag => "SPAMD" tag_on_failure => [] } if "SMTPD" not in [tags] and "SPF" not in [tags] and "SMTP" not in [tags] and "CLAMAV" not in [tags] \ and "POSTSCREEN" not in [tags] and "SPAMD" not in [tags] { drop { } } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
kus
- TODO
Lisaks on kirjeldatud sellised patternid
# cat /opt/logstash/patterns/mail-imool VIRUSNAME ([\W\w._\/%-]+) COMPONENT ([\w._\/%-]+) COMPID (postfix\/%{COMPONENT:component}(?:\[%{POSINT:pid}\])?) RELAY (?:%{HOSTNAME:remote_host}(?:\[%{IP:remote_ip}\](?::[0-9]+(.[0-9]+)?)?)?) POSTFIXSMTPDCONNECTS (connect from %{RELAY}) # Jan 11 16:34:22 post-relay postfix/smtpd[18424]: connect from unknown[185.66.13.225]" POSTFIXSMTPD %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME} %{COMPID}: %{POSTFIXSMTPDCONNECTS} # Jan 10 16:49:44 post-relay clamav-milter[11029]: Clean message from <imre.oolberg@gmail.com> to <imre@auul.pri.ee> # Jan 10 20:24:51 post-relay clamav-milter[11029]: Message from <maili@vastus.biz> to <talepaju@talepaju.ee> infected by C4S.MMAILER.DOM.250.UNOFFICIAL PROGNAME ([\w_-]+) PROGNAMEPID (%{PROGNAME:progname}(?:\[%{POSINT:pid}\])?) EMAILADDRESS ([a-zA-Z0-9_.+-=:]+@[a-zA-Z0-9_.+-=:]+) CLAMAVMILTERCLEAN %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME} %{PROGNAMEPID}: Clean message from <%{EMAILADDRESS:mail_from}> to <%{EMAILADDRESS:rcpt_to}> CLAMAVMILTERINFECTED %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME} %{PROGNAMEPID}: Message from <%{EMAILADDRESS:mail_from}> to <%{EMAILADDRESS:rcpt_to}> infected by %{VIRUSNAME:virusname} # Jan 10 22:23:24 post-relay postfix/postscreen[15420]: CONNECT from [185.66.13.225]:52207 to [192.168.1.250]:25 POSTSCREENCONNECT %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:hostname} %{COMPID}: CONNECT from \[%{IP:remote_ip}\]:%{POSINT} to \[%{IP:local_ip}\]:25 # Jan 10 22:05:57 post-relay postfix/postscreen[15403]: NOQUEUE: reject: RCPT from [114.97.104.46]:2944: 550 5.7.1 Service unavailable; client [114.97.104.46] blocked using zen.spamhaus.org; from=<hyciaadkhz@ovsi.com>, to=<mailman@lists.wwoof.ee>, proto=SMTP, helo=<LB63BPY4OBNA8RC.com> POSTSCREENNOQUEUE %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:hostname} %{COMPID}: NOQUEUE: reject: RCPT from \[%{IP:remote_ip}\]:%{POSINT}: %{POSINT:smtp_code} 5.7.1 Service unavailable; client \[%{IP:remote_ip}\] blocked using %{HOSTNAME:blocking_rbl}; from=<%{EMAILADDRESS:mail_from}>, to=<%{EMAILADDRESS:mail_to}>, proto=SMTP, helo=<%{HOSTNAME:helo}> # Jan 10 23:49:27 post-relay policyd-spf[15556]: None; identity=helo; client-ip=192.80.102.33; helo=ftp.moraal.ee; envelope-from=debian@ftp.moraal.ee; receiver=imre@auul.pri.ee # Jan 10 23:49:27 post-relay policyd-spf[15556]: None; identity=mailfrom; client-ip=192.80.102.33; helo=ftp.moraal.ee; envelope-from=debian@ftp.moraal.ee; receiver=imre@auul.pri.ee SPF %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME} %{PROGNAMEPID}: %{WORD:spf_result}; identity=%{WORD:spf_identity}; client-ip=%{IPV4:client_ip}; helo=%{HOSTNAME:helo}; envelope-from=%{EMAILADDRESS:mail_from}; receiver=%{EMAILADDRESS:mail_to} # Jan 10 23:49:46 post-relay postfix/smtp[15560]: 5A9CA5FD4E: to=<imre@auul.pri.ee>, relay=post.auul[192.168.1.251]:25, delay=20, delays=19/0.04/0.09/0.82, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 0FE242C2BD) QUEUEID (?:[A-F0-9]+|NOQUEUE) POSREAL ([0-9]+(.[0-9]+)?) DSN (%{NONNEGINT}.%{NONNEGINT}.%{NONNEGINT}) STATUS (sent|deferred|bounced|expired) POSTFIXSMTPRELAY %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:hostname} %{COMPID}: %{QUEUEID:qid}: to=<%{EMAILADDRESS:rcpt_to}>,(?:\sorig_to=<%{EMAILADDRESS:orig_to}>,)? relay=%{RELAY},(?: conn_use=%{POSREAL:conn_use},)? (%{WORD}=%{DATA},)+ dsn=%{DSN:dsn}, status=%{STATUS:result} %{GREEDYDATA:reason} # Jan 11 15:11:44 post-relay spamd[12090]: spamd: identified spam (1000.0/5.0) for spamass-milter:112 in 0.1 seconds, 1425 bytes. # Jan 11 15:24:11 post-relay spamd[12090]: spamd: clean message (0.9/5.0) for spamass-milter:112 in 0.4 seconds, 5380 bytes. SPAM_CHECK_RESULT ([\w._\/%-]+ [\w._\/%-]+) SPAMD %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:hostname} %{PROGNAMEPID}: spamd: %{SPAM_CHECK_RESULT:scr} \(%{NUMBER:spam_score:float}/%{NUMBER:spam_score_limit:float}\) for spamass-milter:%{NUMBER} in %{NUMBER:spam_check_time} seconds, %{NUMBER:message_size:int} bytes.
Kasulikud lisamaterjalid
Alternatiivne logianalüüs ELK platvormil
Huvipakkuvad andmed
- timestamp - kirja sissetulemise aeg (Jan 2 2016 19:05:02)
- in_pf_qid - Postfixi sisemine ID (243BF507AF)
- in_client_name - postfix/smtpd juures kasutatav klient SMTP serveri nimi, o3.bn.imool.net
- in_client_ip - postfix/smtpd juures kasutatav klient SMTP serveri nimi, 10.21.6.101
- toodeldud - sisemist protsessimist abistav parameeter
- mid - message-id (ye123@ismtpd0002p1lon1.imool.net)
- mail_from - saatja@aadress
- rcpt_to - aadressaadi@aadress
- relay_ip - edasitoimetamise ip (nt smtp relee puhul)
- reject_reason - põhjus, mille ütleb postfix/cleanup 'ile milter
- qmgr_removed - kirjaga töötlemise lõpu aeg
- clamav_virusname - viirusenimi, mida clamd logib ilusti koos queue id väärtusega
SpamAssassin toimetamisi käsitletakse ainult blokeerimise faktina, nt kaasnevat spam score väärtust ei saa hästi kindlaks teha.
Logstash kasutamine
# cat /etc/logstash/conf.d/ls.conf input { file { type => "mailjson" path => [ "/var/tmp/pf2k-20160102-log.json" ] start_position => "beginning" sincedb_path => "/srv/sincedb/since.mailjson" codec => json } } filter { if [type] == "mailjson" { date { match => [ "timestamp", "MMM dd YYYY HH:mm:ss" ] } if [in_client_ip] { geoip { source => "in_client_ip" target => "geoip" database => "/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-2.0.4/vendor/GeoLiteCity-2013-01-18.dat" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } } } output { elasticsearch { hosts => "localhost" } stdout { codec => rubydebug } }
kus
- match => [ "timestamp", "MMM dd YYYY HH:mm:ss" ] - teisendab "Jan 2 2016 06:18:34" formaadis aja elasticsearch @timestampiks
Märkused
- utf8 kodeeringus subjectid enne logimist teisendada loetavaks
Testimine
Eposti serveri testimiseks sobib kasutada Postal http://doc.coker.com.au/projects/postal/ tarkvara. Debian operatsioonisüsteemile paigaldamiseks sobib öelda
# apt-get install postal
ning kasutamiseks nt
$ postal -r 160 -m 20 -f /var/tmp/sender-file.txt 10.35.179.67 /var/tmp/user-list-filename.txt time,messages,data(K),errors,connections,SSL connections 22:42,7,53,0,8,0 22:43,10,103,0,10,0 22:44,10,101,0,10,0 22:45,10,131,0,10,0 22:46,10,98,0,10,0
kus
- -r mitu kirja püütakse minutis saata
- -m maksimaalne genereeritud kirja suurus
- -f saatjate aadressid
- 10.35.179.67 - testitav smtp server
- /var/tmp/user-list-filename.txt - adressaatide nimekiri
- väljundis on tulpades 'time,messages,data(K),errors,connections,SSL connections'
Kasulikud lisamaterjalid
smtpd TLS
smtpd TLS sisselülitamiseks sobib /etc/postfix/main.cf seadistusfailis kasutada sellist osa (smtpd_tls_CAfile puudumisel ära jätta)
# TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_CAfile=/etc/dovecot/ca.pem smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_loglevel = 1 smtpd_tls_security_level = may smtpd_tls_received_header = yes
kus
- smtpd_tls_key_file - salajane võti, võiks öelda 'chmod 0600 /etc/ssl/private/ssl-cert-snakeoil.key'
- smtpd_tls_cert_file - sertifikaat või parem ahel (self-signed juurikas on tõenäoliselt kliendil olemas ja pole tarvis siia)
# cat server_cert.pem intermediate_CA.pem > server.pem
Logis paistab vastav osa nt sedasi
Jan 9 00:51:38 post-relay postfix/smtpd[7703]: Anonymous TLS connection established from \ bendel.debian.org[82.195.75.100]: TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)
Ja kirja päises
Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mail.auul.pri.ee (Postfix) with ESMTPS id 38F2C6121F for <imre@auul.pri.ee>; Fri, 9 Jan 2015 01:02:04 +0200 (EET)
Testimiseks sobib öelda
$ openssl s_client -starttls smtp -crlf -connect 10.249.9.78:25
smtp TLS
Antud juhul tähendab smtp TLS, et serverist välja pöördumised toimuvad võimalusel krüpteeritud ühendust kasutades, sellise funktsionaalsuse sisselülitamiseks sobib /etc/postfix/main.cf seadistusfailis kasutada
smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_loglevel = 1 smtp_tls_security_level = may smtp_tls_note_starttls_offer = yes
kus
- TODO
Logis paistab
Jan 9 00:53:58 post-relay postfix/smtp[7890]: Trusted TLS connection established to \ gmail-smtp-in.l.google.com[173.194.71.26]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
SMTP TLS AUTH 587/submission
Tundub, et 2016 aastal soovitatakse üldiselt kasutada 587/submissionit kirjade välja saatmisel.
Antud juhul toimub SMTP relee klientide autentimine vastu Dovecot serverit. St sama kasutajate baas, mis on kasutusel Dovecot imap klientide jaoks. SMTP AUTH toimub eraldi nö tavalisest port 25/tcp liiklusest port 587/tcp peal, Postfix seadistusfailis /etc/postfix/master.cf vastab sellel sektsioon
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=inet:192.168.7.143:12345 -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_client_restrictions=permit_sasl_authenticated,reject
kus
- smtpd_sasl_path - Dovecot auth serveri teenuse aadress
Dovecot osas on oluline selline sektsioon seadistusfailis /etc/dovecot/conf.d/10-master.conf
# cat /etc/dovecot/conf.d/10-master.conf .. service auth { ... inet_listener { port = 12345 } } ....
Testimine
SMTP AUTH testimiseks sobib öelda
$ /usr/bin/sendemail -f imre@auul.pri.ee -t imre@mujale.imool.ee -u subject -m sisu -s 10.103.6.25:587 -xu imre -xp parool -o tls=yes
Teenuse krüpto omaduste uurimiseks
# sslscan --starttls 10.103.6.25:587 | grep Acce Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA Accepted TLSv1 256 bits DHE-RSA-AES256-SHA Accepted TLSv1 256 bits DHE-RSA-CAMELLIA256-SHA ...
Eposti kliendi seadistamine
Eposti kliendi seadistamisel tuleb väljuva eposti serveri jaoks kirjeldada
- domeeninimi (või ip aadress, sel juhul tuleb tõenäoliselt esimesel pöördumisel aktsepteerida serveri sertifikaat)
- port - 587
- kasutajanimi
- parool
- Connection Security - STARTTLS
- Authentication Method - Normal password
SMTP TLS AUTH 465/smtps
Tundub, et 2016 aastal soovitatakse üldiselt kasutada 587/submissionit kirjade välja saatmisel. Käesolevat juhtumist sobib kasutada nt mingi legacy kliendi piiratuse vms põhjusel.
Antud juhul toimub SMTP relee klientide autentimine vastu Dovecot serverit. St sama kasutajate baas, mis on kasutusel Dovecot imap klientide jaoks. SMTP AUTH toimub eraldi nö tavalisest port 25/tcp liiklusest port 465/tcp peal, Postfix seadistusfailis /etc/postfix/master.cf vastab sellel sektsioon
smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=inet:192.168.7.143:12345 -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_client_restrictions=permit_sasl_authenticated,reject
kus
- smtpd_sasl_path - Dovecot auth serveri teenuse aadress
Dovecot osas on oluline selline sektsioon seadistusfailis /etc/dovecot/conf.d/10-master.conf
# cat /etc/dovecot/conf.d/10-master.conf .. service auth { ... inet_listener { port = 12345 } } ....
Kasulikud lisamaterjalid
- http://www.auul.pri.ee/wiki/Postfix%27i_arhitektuuri_kirjeldus_ja_kasutamise_keerulisemad_v%C3%B5imalused#SendEmail_programmi_kasutamine
- Dovecot kasutamine operatsioonisüsteemiga Debian v. 7 Wheezy
Postfix seadistusfailid
Kogu Postfix seadistusfaili /etc/postfix/main.cf sisu, sektsioonide kaupa
# MISC ALGUS biff = no append_dot_mydomain = no readme_directory = no myorigin = /etc/mailname myhostname = mail.auul.pri.ee smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) message_size_limit = 37000000 # MISC LOPP
# VORK ALGUS mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.10.0/24 192.168.1.0/24 inet_interfaces = all inet_protocols = ipv4 proxy_interfaces = 10.204.62.116 # VORK LOPP
# LOKAALNE DELIVERY ALGUS alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = post-relay.auul, localhost.imool, localhost mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + # LOKAALNE DELIVERY LOPP
# TLS ALGUS # TLS server parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_CAfile=/etc/dovecot/ca.pem smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_loglevel = 1 smtpd_tls_security_level = may smtpd_tls_received_header = yes # TLS client parameters smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_loglevel = 1 smtp_tls_security_level = may smtp_tls_note_starttls_offer = yes # TLS LOPP
# POSTSCREEN ALGUS # testid enne before 220 teste # permanent white/blacklist (postscreen_blacklist_action ytleb kui otsustavalt kaituda) postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr postscreen_blacklist_action = enforce # mx policy test postscreen_whitelist_interfaces = !192.168.7.81 static:all # tests before 220 greeting postscreen_greet_banner = "PGB at RT" postscreen_greet_action = enforce # dnsbl testid postscreen_dnsbl_sites = zen.spamhaus.org*3 list.dnswl.org=127.[0..255].[0..255].0*-2 list.dnswl.org=127.[0..255].[0..255].1*-3 list.dnswl.org=127.[0..255].[0..255].[2..255]*-4 postscreen_dnsbl_threshold = 3 postscreen_dnsbl_whitelist_threshold = -2 # mida teha vastavalt permanent blacklist, pregreet ja dnsbl tabamuste puhul postscreen_dnsbl_action = enforce # test after 220 greeting i.e. deep protocol test postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = drop postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce # POSTSCREEN LOPP
# HELO, CLIENT, SENDER, RECIPIENT ja RELAY kontrollid ALGUS # helo kontrollid # logitakse sellised vead # Jan 9 00:39:34 post-relay postfix/smtpd[7509]: NOQUEUE: reject_warning: RCPT from \ # unknown[10.198.206.158]: 450 4.7.1 <mx1.imool.org>: Helo command rejected: Host not found; \ # from=<priit@imool.org> to=<imre@auul.pri.ee> proto=ESMTP helo=<mx1.imool.org> smtpd_helo_required = yes smtpd_helo_restrictions = warn_if_reject reject_unknown_helo_hostname # client kontrollid, leitakse poorduja ip aadressile vastav nimi # ja kontrollitakse, kas see laheneb esialgseks ip aadressiks # logitakse sellised vead (eelduseks on, et ptr kirje üldse eksisteerib) # Jan 9 00:39:34 post-relay postfix/smtpd[7509]: warning: hostname mx1.imool.org \ # does not resolve to address 10.198.206.158 # Jan 9 00:39:34 post-relay postfix/smtpd[7509]: NOQUEUE: reject_warning: RCPT \ # from unknown[10.198.206.158]: 450 4.7.1 Client host rejected: cannot find your hostname, \ # [10.198.206.158]; from=<priit@imool.org> to=<imre@auul.pri.ee> proto=ESMTP helo=<mx1.imool.org> smtpd_client_restrictions = warn_if_reject reject_unknown_client_hostname # valjast tulevad olematu @domeeni.osaga kirjad, 450 error # logitakse sellised vead # Jan 9 00:45:13 post-relay postfix/smtpd[7534]: NOQUEUE: reject: RCPT from unknown[10.198.206.158]: \ # 450 4.1.8 <priit@imooll.ee>: Sender address rejected: Domain not found; from=<priit@imooll.ee>\ # to=<imre@auul.pri.ee> proto=ESMTP helo=<mx1.imool.org> # # küsitakse mail from domeeni osa kohta Spamhaus käest, kas on kahtlane domeen # nö dig moraal.ee.dbl.spamhaus.org smtpd_sender_restrictions = reject_unknown_sender_domain, reject_rhsbl_sender dbl.spamhaus.org # lubatakse kohalikke vorke ja autenditud kasutajaid, ei lubata tundmatutesse kohtadesse # releetamisi smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination # lubatakse kohalikke vorke ja autenditud kasutajaid, ei lubata tundmatutesse kohtadesse # releetamisi ja lisaks toimub SPF kontroll postfix policy sistema abil smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination check_policy_service unix:private/policyd-spf # HELO, CLIENT, SENDER, RECIPIENT ja RELAY kontrollid LOPP
# HEADER CHECKS mime_header_checks = regexp:/etc/postfix/mime_header_checks.regexp # HEADER CHECKS LOPP
# MILTERS: CLAMAV, SPAMASSASSIN smtpd_milters = unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock # MILTERS LOPP
# NON-LOCAL DELIVERY relay_domains = /etc/postfix/relay-domains.txt transport_maps = hash:/etc/postfix/transport relay_recipient_maps = ldap:/etc/postfix/relay-recipient-maps-ad-users.cf # NON-LOCAL DELIVERY
Seadistusfailist viidatud failide sisu
# cat /etc/postfix/postscreen_access.cidr 192.168.10.0/24 permit
# cat /etc/mailname mail.auul.pri.ee
# cat /etc/postfix/relay-domains.txt auul.pri.ee
# cat /etc/postfix/transport auul.pri.ee :[10.249.6.143]
# cat /etc/postfix/relay-recipient-maps-ad-users.cf server_host = 10.249.9.4 search_base = dc=imool,dc=local query_filter = (&(|(mail=%s)(proxyAddresses=smtp:%s))(objectClass=person)(!(userAccountControl=514))) result_attribute = mail version = 3 bind = yes start_tls = no bind_dn = postfix@imool.local bind_pw = parool scope = sub debuglevel = 0
# cat /etc/postfix/mime_header_checks.regexp /filename=\"?(.*)\.(bat|chm|cmd|com|do|exe|hta|jse|rm|scr|pif|vbe|vbs|vxd|xl)\"?$/ REJECT For security reasons we reject attachments of this type /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wav|mov|wmf|xl))"?\s*$/ REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
Postfix seadistusfailis /etc/postfix/master.cf on tehtud muudatused kahes osas
- vt Postscreen
- vt SMTP AUTH
OpenBSD iseärasused
- OpenBSD clamav pakett sisaldab clamav, freshclam ning milter-clamav tarkvara, paigaldamiseks sobib öelda
# pkg_add clamav
- Paralleelselt töötav pixz tundub puuduvat, aga on olemas tavaline xz
# pkg_add xz
- c4s.updater.sh on bash skript
# pkg_add bash
- SpamAssassin
# pkg_add p5-Mail-SpamAssassin quirks-2.9 signed on 2014-07-31T22:37:55Z |No change in quirks-2.9Ambiguous: choose dependency for p5-Mail-SpamAssassin-3.4.0p3: a 0: p5-Mail-SPF-2.8.0 1: p5-Mail-SPF-Query-1.999.1p4 Your choice: 0 p5-Mail-SpamAssassin-3.4.0p3:p5-URI-1.60: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Net-SSLeay-1.65: ok p5-Mail-SpamAssassin-3.4.0p3:p5-IO-Socket-SSL-1.997: ok p5-Mail-SpamAssassin-3.4.0p3:p5-HTML-Tagset-3.20p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-HTML-Parser-3.71p0: ok p5-Mail-SpamAssassin-3.4.0p3:libghttp-1.0.9p2: ok p5-Mail-SpamAssassin-3.4.0p3:p5-HTTP-GHTTP-1.07p5: ok p5-Mail-SpamAssassin-3.4.0p3:p5-libwww-5.837p0: ok p5-Mail-SpamAssassin-3.4.0p3:re2c-0.13.6: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Digest-HMAC-1.03: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Net-DNS-0.78: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Net-DNS-Resolver-Programmable-0.003: ok p5-Mail-SpamAssassin-3.4.0p3:p5-NetAddr-IP-4.075: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Error-0.17019: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Mail-SPF-2.8.0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Socket6-0.25p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Net-CIDR-Lite-0.21: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Net-Patricia-1.19p1: ok p5-Mail-SpamAssassin-3.4.0p3:GeoIP-1.6.2: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Geo-IP-1.43p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Time-TimeDate-2.30: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Mail-Tools-2.07: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Crypt-OpenSSL-Bignum-0.04p5: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Crypt-OpenSSL-Random-0.06p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Crypt-OpenSSL-RSA-0.28p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Mail-DKIM-0.40p0: ok p5-Mail-SpamAssassin-3.4.0p3:p5-Encode-Detect-1.01p3: ok p5-Mail-SpamAssassin-3.4.0p3:p5-IO-Socket-IP-0.31: ok useradd: Warning: home directory `/var/db/spamassassin' doesn't exist, and -m was not specified p5-Mail-SpamAssassin-3.4.0p3: ok The following new rcscripts were installed: /etc/rc.d/spamassassin See rc.d(8) for details. Look in /usr/local/share/doc/pkg-readmes for extra documentation.
Kui clamd reload ajal kiri saata, siis tavaliselt saab saatja ajutise veateate
.. Feb 6 01:14:42 tm clamav-milter[12438]: Timed out while reading clamd reply Feb 6 01:14:42 tm clamav-milter[12438]: No reply from clamd Feb 6 01:14:42 tm postfix/cleanup[9813]: 674C67EE82: milter-reject: END-OF-MESSAGE from mail.auul.pri.ee[10.204.62.116]: \ 4.7.1 Service unavailable - try again later; from=<imre@auul.pri.ee> to=<imre@imool.org> proto=ESMTP helo=<mail.auul.pri.ee> Feb 6 01:14:42 tm postfix/smtpd[22995]: disconnect from mail.auul.pri.ee[194.204.62.116] ...
queue haldamine
Vahel on väljuv queue täitunud mingi sodiga, siis võib olla abi selle puhastamisest mingi tunnuse alusel, nt selline skript
# cat qp.sh for i in `mailq | egrep '^[0-9,A-Z]' | awk {'print $1'}`; do if postcat -q $i | egrep -q "www.mailikampaania.imool" | egrep -q "^Message-ID"; then # echo leitud: $i # postsuper -d $i postcat -q $i | grep "^Message-ID" | grep "www.mailikampaania.imool" # else # echo pole leitud: $i fi done
kus
- TODO
2nd MX kasutamine
Esmalt peaks 2nd MX kasutamist väga kaaluma ja seejuures arvestama kui palju spämmi seejuures edasi saatma hakatakse; ja millist kahju see 1nd MX jaoks 2nd MX enda jaoks kaasa toob või tuua võib. Kui Postfix releetab ise kirju oma backendidele + on 2nd MX teatud domeenidele, siis võiks sobida sellise seadistus sektsiooni kasutamine
# NON-LOCAL DELIVERY virtual_mailbox_domains = /etc/postfix/virtual_mailbox_domains.txt relay_domains = /etc/postfix/relay_domains.txt virtual_transport = smtp:10.249.6.188:10025 transport_maps = hash:/etc/postfix/transport_maps.txt # relay_recipient_maps = hash:/etc/postfix/smtp.moraal.ee-relay_recipients_imool-ee.txt virtual_mailbox_maps = hash:/etc/postfix/smtp.imool.ee-relay_recipients_by_domains-txt hash:/etc/postfix/smtp.imool.ee-relay_recipients_lists-txt pgsql:/etc/postfix/smtp.imool.ee-relay_recipients_cyrus-pgsql mysql:/etc/postfix/smtp.imool.ee-relay_recipients_imool.ee-mysql ldap:/etc/postfix/virtual-mailbox-maps-ldap-users-IMOOL.cf ldap:/etc/postfix/virtual-mailbox-maps-ldap-users-Ressursid.cf ldap:/etc/postfix/virtual-mailbox-maps-ldap-users-Teenuskontod.cf ldap:/etc/postfix/virtual-mailbox-maps-ldap-groups-IMOOL.cf ldap:/etc/postfix/virtual-mailbox-maps-ldap-groups-Grupid.cf pgsql:/etc/postfix/smtp.imool.ee-relay_recipients_imool.ee-pgsql virtual_alias_maps = hash:/etc/postfix/virtual_aliases_maps.txt # NON-LOCAL DELIVERY
kus
- virtual_mailbox_domains - domeeninimed, mida hallatakse virtual_* direktiividega
- relay_domains - domeeninimed, millele vastavate rcpt_to aadressidega kirju releetatakse; siin on domeeninimed millele ollakse 2nd MX; need kirjad saadetakse edasi sinna kuhu dns neid saadab
- transport_maps - üldine transportide kirjeldus, töötab virtual_mailbox_domains ja relay_domains rcpt_to domeenile vastavate kirjade jaoks
- virtual_transport - kirjad, mille rcpt_to domeen on kirjas virtual_mailbox_domains juures, aga millele ei rakendu ükski transport_maps saadetakse näidatud kohta
- virtual_mailbox_maps - frontend smtp serveris omab see rcpt_to aadressi olemasolu kontrollimise funktsiooni
- virtual_alias_maps - võimaldab frontend smtp serveris virtual_mailbox_domains juures näidatud rcpt_to aadressidega kirjadele teha edasisuunamisi suvalisele muule aadressile (lisaks sellele, et tõenäoliselt reeglina vastava domeeni kirjad saadetakse transport_maps abil kuhugi backendi)
TLS enforce kasutamine valikuliselt
TODO
Kasulikud lisamaterjalid
2025 kevad tähelepanekud
Väited
- spamassassini protsess töötab vähemalt pealtnäha root kasutajana
- Spamassassin asemel võiks kaaluda rspamd kasutamist (nt kaalutlusel, et spamassassinil puudub nö usaldusväärne docker konteiner lahenduse, rspamd puhul on olemas; sama kas rspamd on usaldusväärne tarkvara nö tänastes tingimustes)
Spamd puhul tundub, et automaatselt lisandunud kontrollidega seoses
# tail -f /var/log/mail.log 2025-06-01T11:49:39.408460+03:00 post-relay spamd[4007]: check: dns_block_rule RCVD_IN_VALIDITY_RPBL_BLOCKED hit, creating /root/.spamassassin/dnsblock_bl.score.senderscore.com (This means DNSBL blocked you due to too many queries. Set all affected rules score to 0, or use "dns_query_restriction deny bl.score.senderscore.com" to disable queries) 2025-06-01T11:49:39.408639+03:00 post-relay spamd[4007]: check: dns_block_rule RCVD_IN_VALIDITY_SAFE_BLOCKED hit, creating /root/.spamassassin/dnsblock_sa-accredit.habeas.com (This means DNSBL blocked you due to too many queries. Set all affected rules score to 0, or use "dns_query_restriction deny sa-accredit.habeas.com" to disable queries) 2025-06-01T11:49:39.408715+03:00 post-relay spamd[4007]: check: dns_block_rule RCVD_IN_VALIDITY_CERTIFIED_BLOCKED hit, creating /root/.spamassassin/dnsblock_sa-trusted.bondedsender.org (This means DNSBL blocked you due to too many queries. Set all affected rules score to 0, or use "dns_query_restriction deny sa-trusted.bondedsender.org" to disable queries)
tuleks nad pigem välja lülitada
root@post-relay:/etc/postfix# grep ^dns /etc/mail/spamassassin/local.cf dns_query_restriction deny bl.score.senderscore.com dns_query_restriction deny sa-trusted.bondedsender.org dns_query_restriction deny sa-accredit.habeas.com
Automaatsete spamassassin mustrite kopeerimiseks internetist lülitada timer sisse
root@post-relay:/etc/postfix# systemctl enable --now spamassassin-maintenance.timer root@post-relay:/etc/postfix# systemctl list-timers