OpenBSD spamd tarkvara kasutamine

Allikas: Kuutõrvaja

Sissejuhatus

Rämpspostiks (ingl. k. spam, unsolicited bulk email (UBE), unsolicited commercial email (UCE)) nimetatakse massiliselt juhuslikele adressaatidele saadetavat e-posti, mida adressaat ei soovi saada. Reeglina püütakse rämpsposti abil midagi müüa, tutvustada või neis kirjades puudub üldse tähenduslik sisu. Tehnilises mõttes koormab rämpspost postisüsteemi, kuna iga saabunud kirja tuleb töödelda ja sellele kulub ressurssi, mitte-tehnilises mõttes segab kasutajatel tegeleda nö põhitegevusega.

Rämpsposti saatjate eesmärgiks on oma kirjad sokutada postisüsteemi kasutajate nö õige posti hulka. Postisüsteemi üheks ülesandeks on saada aru, millisel juhul on tegu rämpspostiga ning takistada sellel kasutajaid eksitada.

Üldiselt tegeldakse rämpspostiga rakendades kahesuguseid meetmeid

  • aktiivne - postisüsteem teeb ennem kirja vastuvõtmist piisava tõenäosusega kindlaks, et tegu on rämpspostiga ning kirja ei võeta vastu (nt Spamd, dns blacklistid), lisaks võib olla seadistatud selline asjakorraldus, mis kulutab teadlikult rämpspostija ressurssi
  • passiivne - postisüsteem võtab kirja vastu ja paigutab kasutaja postkasti, kuid analüüsi tulemusena märgitakse rämpspost spetsiifiliselt ära, näiteks lisatakse Subject reale '*****SPAM*****' või paigutatakse automaatselt kasutaja postkasti spetsiaalsesse kausta (nt Spamassassin)

Spamd tööpõhimõte

Spamd tarkvara abil saab aktiivselt takistada rämpsposti jõudmist kasutajateni, st rämpspost avastatakse enne, kui postisüsteem kirja nö tervikuna vastu võtaks ja võtaks seejuures kirjaga edasi toimetamise eest vastutuse endale. Spamd ei analüüsi absoluutselt posti sisu, vaid toetub asjaolule, et reeglina rämpsposti saatja proovib kirja saata ainult üks kord samal ajal kui nö õiget posti püütakse saata peale ajutise veateate saamist korduvalt mitme tunni kuni mitme päeva jooksul.

Alustuseks võib lihtsustatult öelda, et Spamd tarkvara kasutamisel on kaks otsest eesmärki

  • pidada paketifiltri jaoks <spamd-white> tabelit, kus on kirjas need ip aadressid, kust spamd andmetel saadetakse nö õiget posti
  • pidada iseenda jaoks /var/db/spamd andmebaasi, kus on kirjas muu hulgas rämpsposti saatnud aadressid ja mida ta kasutab neilt ip aadressidelt tulnud ühenduste kiusamiseks

/var/db/spamd andmebaas on tegelikult seetõttu olulisemagi tähendusega, et spamd kasutab seda nö rämpsposti saatvate ja õiget eposti saatvate ip aadresside kindlakstegemiseks, mida kirjeldatakse üksikajasjalikult järgmises punktis.

Spamd esineb tulemüüris spamd nimelise deemoni kujul, kuulates reeglina localhost:8025 porti ja paketifilter ühendab sinna kõigilt ip aadressidelt saabunud ühendused, mis pole kirjas <spamd-white> tabelis. <spamd-white> tabelis olevatelt ip aadressidelt lähtuvad ühendused suunab paketifilter otse MTA'le, nende jaoks praktiliselt spamd olemasolu jääb praktiliselt märkamatuks.

Iseenesest töötab spamd deemon ajutiste SMTP veateadete väljastajana, kuidas seda täpselt kasutatakse, selgitatakse samuti üksikasjalikult järgmises punktis. Oluline on tähele panna, et spamd deemon ei tööta SMTP vahendajana (ingl. k. proxy), samuti ei ole spamd seadistamisel vaja kirjeldada millise domeeni epostiga MTA tegeleb ega ei olene spamd seadistamine millist konkreetset MTA tarkvara postisüsteemis kasutatakse.

Ühe spamd tarkvara sisaldava postisüsteemi skeem võiks näiteks olla selline

      ___
     |   |  
     |   |
     |___| kirja saatja internetis
       |
       |
       ...
    internet
      ...
       |
       |
      _|_  tulemüür: PF, Spamd, 172.16.1.17
     |   |                      
     |   |------------------|----
     |___|                  |
       |                   _|_  MTA (Postfix), Cyrus, 10.0.100.12
       |                  |   |
       |                  |___|
       |
       |
     --|---------|-------------|---------------
                 |             |
                _|_           _|_  töökohaarvuti, 192.168.100.12
               |   |         |   | MUA (nt Thunderbird, Pine)
               |___|         |___|

Spamd lahendust sisaldav postisüsteem töötab rämpspostiga ip aadressi täpsusega, st nii ei saa olla, et samal ajal osa ip aadressilt laekuvat posti lubatakse läbi takistamatult ning osa takistatakse.

Tihtipeale tegelevad arvutid rämpsposti saatmisega omaniku teadmata nt viirusega nakatumise tulemusena ning usutavasti omanik avastab selle ja lõpetab rämpsposti saatmise ning ka vastupidi, arvuti, mis täna saadab eranditult nö õiget posti võib olla homme kompromiteeritud ning asuda saatma rämpsposti. Selleks, et selliste muudatustega toime tulla ei ole nende ip aadresside nimekiri, mida spamd käsitleb rämpspostitajatena igavene ega pole ka <spamd-white> sisu samuti igavene, IP aadresse kustutatakse neist nimekirjadest automaatselt seadistustes kindlaksmääratud aja möödumisel.

Kirjeldatud ajutiste veateadete kasutamise tehnika rämpsposti takistamiseks võeti kasutusele 2003 aastal ja tundub uskumatu, et veel viis aastat hiljem 2008 aastal töötab see väga efektiivselt, aga nii see on. Ilmselt on põhjuseks asjaolu, et vaatamata sellele õnnestub rämpspostitajatel piisavalt posti ära saata.

/var/db/spamd andmebaas

Spamd selgitab välja <spamd-white> tabeli ip aadressid kasutades hallnimekirjamist (ingl. k. greylisting), mis toimub selliselt

  • Esmakordselt pöördumisel ip aadressilt spamd poole registreeritakse see pöördumine /var/db/spamd andmebaasis nn GREY (ingl. k. hall) kirjena ning pöördujale vastatakse ajutise SMTP veateatega '451 Temporary failure, please try again later. (in reply to DATA command))'. Sellisel juhul peab korrektselt töötav postisüsteem mõnekümne minut pärast uuesti proovima sama kirja saata. GREY kirje sisaldab järgmisi andmeid
    • saatja ip aadress
    • HELO väärtus
    • ümbriku (ingl. k. envelope) from aadress
    • ümbriku to aadress
    • kirje registreerimise aeg
    • kirje tööle hakkamise aeg - registreerimise aeg + 25 minutit
    • kirje kehtivus lõpp - registreerimise aeg + 4 tundi, sel ajal eemaldatakse GREY kirje /var/db/spamd andmebaasist
  • Kui hiljem kui 25 minutit, aga mitte hiljem kui 4 tundi peale esimest pöördumist pöördutakse uuesti samalt aadressilt (õigupoolest peavad klappima GRAY kirje neli esimest välja), siis lisab spamd selle ip aadressi paketifiltri <spamd-white> tabelisse ning lisab /var/db/spamd andmebaasi selle ip aadressiga WHITE kirje, mis sisaldab
    • saatja ip aadressi
    • kirje tekitamise aega
    •  ?
    • krije kehtivuse lõpp - registreerimise aeg + 36 päev, siis eemaldatakse WHITE kirje /var/db/spamd andmebaasist
  • Kui peale esimest pöördumist nelja tunni jooksul uuesti ei pöörduta, siis spamd kustutab /var/db/spamd andmebaasist vatava GREY kirje. Kui seejärel kunagi pöördutakse uuesti samalt ip aadressilt, siis sooritatakse kogu protseduur algusest peale uuesti.

/var/db/spamd andmebaasi sisu saab esitada spamdb programmi abil

 # spamd
 WHITE|192.168.10.1|||1211029865|1211029872|1214141349|1|3
 GREY|192.168.10.54|endel.spam.tartu.loomaaed.ee|<endelspam@endelspam.com>|<mart@tartu.loomaaed.ee>|1211033587|1211047987|1211047987|1|0

Siit on näha, et ip aadressiga 192.168.10.1 seotud WHITE kirje on

  • moodustatud Sat May 17 16:11:05 EEST 2008 (date -r 1211029865)
  • ... (date -r 1211029872)
  • aegub Sun Jun 22 16:29:09 EEST 2008 (date -r 1214141349)

WHITE kirjeid saab käsitsi lisada käsuga

 # spamdb -a ip.aa.dre.ss

ning eemaldada käsuga

 # spamdb -d ip.aa.dre.ss

Eemaldamisel tuleb arvestada asjaolu, et kui ip aadressiga seotud GRAY kirje on alles ning vastav WHITE kirje kustutada, siis järgneval meili vastuvõtmisel moodustatakse WHITE kirje uuesti. Et see nii ei juhtuks tuleb lisada ip aadress TRAPPED kirjena, millest on juttu järgmises punktis. Kui kututavale WHITE kirjele vastav GRAY kirje juba puudub, siis kulub praktiliselt mõni minut aega kuni spamd eemaldab vastava ip aadressi paketifiltri <spamd-white> andmebaasist. GRAY kirjeid ei saab spamdb utiliidiga eemaldada.

Samal ajal saab jälgida paketifiltri <spamd-white> tabeli sisu öeldes

 # pfctl -t spamd-white -T show

spamd deemoni kasutamine

spamd deemoni kasutamiseks tuleb deemon käivitada käsuga

 # /usr/libexec/spamd -v -l 127.0.0.1

ning seadistada sobivalt paketifilter, näiteks sellise kahe reegli kasutamisega

 rdr on $ext_if inet proto tcp from <spamd-white> to 172.16.1.17 port 25 tag SPAMD -> 10.0.100.12
 rdr pass inet proto tcp to 172.16.1.17 port 25 -> 127.0.0.1 port 8025

Selleks, et spamd arvuti alglaadimise ajal kävituks tuleb faili /etc/rc.conf.local lisada rida

 spamd_flags="-l 127.0.0.1 -v"

spamlogd deemoni kasutamine

spamlogd deemon on vajalik selleks, et WHITE kirjed /var/db/spamd andmebaasis (ja ip aadressid paketifiltri <spamd-white> andmebaasis) säiliks, st et WHITE kirje kehtivusaeg lõppeks alati 36 päeva peale viimase andmevahetuse toimumist. Kuna õigetelt ip aadressidelt toimub andmevahetus postisüsteemi MTA'ga otse, siis peab leiduma võimalus Spamd süsteemil jälgida MTA'de vahelist andmevahetust muul viisil. See on korraldatud selliselt, et spamlogd töötab koostöös paketifiltri logiseadmega kuulates tulemüüri sisenevat ja tulemüürist väljuvat MTA'de vahelist liiklust ning korrigeerides vajadusel mainitud andmebaase.

Praktiliselt on otstarbekas moodustada spetsiaalne logiseade käsuga

 # ifconfig pflog1 create

ning kasutada paketifiltri seadistusfailis sarnaseid reegleid

 pass in log (to pflog1) on $ext_if inet proto tcp to 10.0.100.12 port 25
 pass out log (to pflog1) on $ext_if inet proto tcp from 10.0.100.12 to any port 25

spamdlogd deemon käivitatakse öeldes

 # /usr/libexec/spamlogd -l pflog1

Selleks, et spamlogd arvuti alglaadimisel käivituks, tuleb faili /etc/rc.conf.local lisada rida

 # spamlogd_flags="-l pflog1"

Peibutisaadressi kasutamine

Üks teravmeelne taktika rämpspostitavaid ip aadresse vahele võtta on sättida oma veebikoha lähteteksti sisse spetsiaalne peibutisaadress, nt rampsposti.loks@loomaaed.tartu.ee, mida veebiküljastaja brauseriga niisama ei näe, kuid mille tõenäoliselt rämpspostirobotid avastavad. Kui see aadress lisada /var/db/spamd andmebaasi SPAMTRAP (ingl. k. rämpspostilõks) kirjena käsuga

 # spamdb -T -a rampsposti.loks@loomaaed.tartu.ee

siis sellele aadressi kirja saata püüdvad ip aadressid lisatakse /var/db/spamd andmebaasi TRAPPED (ingl. k. lõksupüütud) kirjetena. TRAPPED kirje eemaldatakse andmebaasist automaatselt 24 tunni pärast.

IP aadresse saab lisada käsitsi TRAPPED kirjetana öeldes

 # spamdb -t -a ip.add.re.ss

/etc/mail/spamd.alloweddomains

Kui moodusta eposti aadresse sisaldav fail, rea kohta aadress või aadressi osa

 # cat /etc/mail/spamd.alloweddomains
 mart@loomaaed.tartu.ee
 priit@loomaaed.tartu.ee

siis lisatakse kõigi ip aadressidega seotud TRAPPED kirjed /var/db/spamd andmebaasi, mis püüavad saata kirja mõnele aadressile, mida selles failis kirjas pole.

Tõrvatünnimine (ingl. k. tarpitting)

Spamd aktiivseks olemise üheks tunnuseks on mainitud rämpspostitajate kiusamine rämpspostitajate ressursside raiskamine teel. Nimelt, kui spamd deemoniga peab ühendust TRAPPED kirjes oleva ip aadressiga arvuti, siis spmad peab temaga väga rahulikus tempos toimuva andmevahetusega ühendust. Tavaliselt ootab rämpspostitaja SMTP rääkimise lõppu kümmekond minutit ja alati lõpetatakse see ajutise 451 veateatega.

Parasjagu käimasolevaid selliseid ühendusi saab jälgida logist ning käsuga

 # netstat -an | grep 8025

Tõrvatünnimise juures peab muidugi jälgima, et spamd arvuti ressursside kasutusega ei liialdata.

Logi ja statistika

Vaikimisi salvestatakse logi faili /var/log/daemon.

Mustade nimekirjade kasutamine

Lisaks automaatselt täituvale /var/db/spamd andmebaasile (ning <spamd-white> andmebaasile) on olemas võimalus laadida spetsiaalselt ettevalmistatud failidest nimekirju, mida kasutatake tõrvatünnimiseks.

spamd eksemplaride andmebaaside sünkroniseerimine

Spamd võimaldab ühe või mõlemasuunaliselt sünkroniseerida spamdb andmebaase. Näiteks võiks sellest olla kasu kahest arvutist koosneva nn passiive-aktiive tulemüürilahenduse puhul, mille mõlemal arvutil töötab Spamd. Sünkroniseerimise tulemusel on tagatud, et avalikuks lülitatud arvuti kasutab sama sisuga /var/db/spamd andmebaasi.

Sünkroniseerimise sisselülitamiseks on kaks võtit

 * -Y ip.aa.dre.ss - kuhu saata välja andmed
 * -y ip.aa.dre.ss - millisel aadressil kuulata sisenevaid andmeid

Lisaks, kui mõlemis arvutis on fail /etc/mail/spamd.key, mille sisu on moodustatud nt öeldes

# dd if=/dev/arandom of=/etc/mail/spamd.key bs=2048 count=1

Siis selle faili kontrollsummat kasutatakse jagatud võtmena vahetatavate sõnumite autentsuse tagamiseks.

Näiteks võiks võiks spamd kävitamine toimuda kummastki tulemüüri õlas selliselt

 10.0.5.7 # /usr/libexec/spamd -v -l 127.0.0.1 -Y 10.0.5.8 -d -y 10.0.5.7 -d
 10.0.5.8 # /usr/libexec/spamd -v -l 127.0.0.1 -Y 10.0.5.7 -d -y 10.0.5.8 -d

Märkused

  • Üks levinud väärarusaam nn greylisting tehnika kohta seisneb selles, et arvatakse, sellega kaasneb alati viivitus e-posti kasutajate jaoks. Oluline on tähele panna, et mõnda aega töötanud Spamd süsteem on registreerinud konkreetse postisüsteem kasutajate suhtluspartnerite postimasinate ip aadressid paketifiltri <spamd-white> tabelisse ning nende postimasinatega suhtlemisega ei kaasne greylistingule omast viivutust.
  • Kui kirja saatev postisüsteem kastab mitut postimasinat (nt Gmail, Hotmail), siis on tõenäoline, et esmalt pöördub Spamd poole üks nn realserver ja talle vastatakse ajutise veateatega ning mõne aja pärast pöördub järgmine realserver, millel on erinev ip aadress. Spamd vastab ka järgmisele ajutise veateatega kuna GRAY kirje ip aadress ei klapi kuigi on tegemist sisuliselt sama kirjaga. Aga praktiliselt sattuvad ka sellised postisüsteemid hiljem või varem <spamd-white> tabelisse, mida suurem on kirjade hulk, seda rutem see juhtub.