Posledná zmena: 10/9/2021
Postfix
"
/etc/postfix/main.cf
"
Keď sa mail vydá na svoju časovo ohraničenú púť, začína ako textový súbor,
ktorý napíše odosielateľ vo svojom mailovom klientovi (Microsoft Outlook Express, Microsoft Outlook, Mozilla, Evolution, Thunderbird, Mutt, Pine a mnohé ďalšie). Povedzme,
že mail, o ktorom hovoríme, je určený pre príjemcu
"pokus@example.com
". Mailový klient sa pripojí na mailový
server odosielateľa pomocou protokolu SMTP (v nastavení klienta bude niečo ako "SMTP
server" alebo "odchádzajúci server") a odovzdá mu mail. Keď ho SMTP server
prevezme, úloha mailového klienta je skončená, aspoň pokiaľ ide o odoslanie
pošty.
Mailový server odosielateľa spracuje mailovú správu: skontroluje IP adresu odosielateľa, aby sa presvedčil, že tento odosielateľ má právo využívať SMTP server na odosielanie pošty do Internetu (túto kontrolu môže vykonávať už počas prijímania mailu), skontroluje veľkosť, prípadne vykoná testovanie obsahu mailu na prítomnosť vírusov, nevyžiadanej reklamy a pod., a na základe adresy príjemcu zistí, akému poštovému serveru mail doručí. Tu môžu nastať tri prípady:
+-------------------+ smtp +--------------------------+ | klientský program | ------> | SMTP server odosielateľa | +-------------------+ +--------------------------+ | |smtp v +---------------------------+ | ( SMTP servery na ceste ) | +---------------------------+ | |smtp pop3 v +-------------------+ imap +---------------------------+ | klientský program | <----- | SMTP server prijemcu | +-------------------+ +---------------------------+
Po tom, ako sa mail dostane na mailový server príjemcu, nastáva posledná fáza prenosu pošty, a tou je výber pošty pomocou protokolov POP3 alebo IMAP. (Existuje aj možnosť priameho čítania mailu na serveri, to však využíva pomerne málo používateľov, pretože potrebuju shellovský prístup na server. Typické využitie je napr. na školských serveroch, nie však vo firmách ani u poskytovateľov Internetu).
Prvou zo služieb mailového servera, ktoré si opíšeme, bude SMTP (Simple Mail Transfer Protocol), čiže služba zasielania pošty. SMTP zabezpečuje doručenie mailu od okamihu, ako ho získa od klientského programu. Vo všeobecnosti možno povedať, že maily sú uchovávané v dočasných súboroch na disku, až kým ich SMTP server nezačne spracovávať. SMTP server sa pokúsi doručiť mail pripojením na ďalší (najčastejšie cieľový) mail server a ak sa mu to podarí, je všetko v poriadku. V opačnom prípade sa odosielateľovi mail vráti spolu s chybovým hlásením (najčastejšie kvôli neexistujúcemu adresátovi).
Pred tým, ako klient začne posielať mail povedzme na adresu "vix at vazka.sk", zistí si adresu mailového servera pre túto doménu:
% host -t mx vazka.sk vazka.sk mail is handled by 10 twin.vazka.sk.
Teraz poznáme mailový server domény "vazka.sk". Na ten sa budeme pripájať. Nasleduje príklad celej SMTP relácie, neskôr si ju rozoberieme po jednotlivých príkazoch.
Upozornenie! Keďže sa dnes veľmi množia SPAMy, nahradím v príklade v reálnych adresách všetky zavináče textom "at" a bodky v doménových menách "dot".
[vix@hudson ~/web-data/sysadmin]$ telnet twin.vazka.sk 25 Trying 195.20.166.130... Connected to twin.vazka.sk (195.20.166.130). Escape character is '^]'. 220 twin.vazka.sk ESMTP Postfix (1.1.11) helo bgs.sk 250 twin.vazka.sk mail from: noris at bgs dot sk 250 Ok rcpt to: vix at vazka dot sk 250 Ok data 354 End data with <CR><LF>.<CR><LF> From: noris at bgs dot sk To: vix at vazka dot sk Subject: testovacia SMTP relacia Hello world! . 250 Ok: queued as D6F621FB89 quit 221 Bye Connection closed by foreign host.
A teraz postupne, po jednotlivých krokoch.
Klient sa pripojí na mailový server danej domény na port 25. To isté vieme
simulovať klasickým príkazom "telnet"
:
[vix@hudson ~/web-data/sysadmin]$ telnet twin.vazka.sk 25 Trying 195.20.166.130... Connected to twin.vazka.sk (195.20.166.130). Escape character is '^]'.
Mailový server povolil klientovi TCP spojenie...
220 twin.vazka.sk ESMTP Postfix (1.1.11)
... a predstavil sa. (Všetky hlásenia SMTP servera sú označené chybovým kódom (v tomto prípade "220"), ktorý je na začiatku riadku. Tento kód je zaujímavý najmä pre skutočné mailové programy, pretože je štandardizovaný a nemenný, kým hlásenia rôznych mailových serverov sú samozrejme odlišné.) Teraz sa predstaví klient pomocou príkazu "HELO". Server odpovedá, že je všetko Ok.
helo bgs.sk 250 twin.vazka.sk
Klient zadá odosielateľa mailu príkazom "MAIL FROM". Server odpovedá, že je všetko Ok.
mail from: noris at bgs dot sk 250 Ok
Klient zadá príjemcu mailu príkazom "RCPT TO:". Server odpovedá, že je všetko Ok.
rcpt to: vix at vazka dot sk 250 Ok
Zadávame príkaz "DATA". Server prijal príkaz a vyzve klienta na zadanie samotného mailu - hlavičiek a tela. Mail sa ukončí zadaním znaku "." na samostatnom riadku.
data 354 End data with <CR><LF>.<CR><LF> From: noris at bgs dot sk To: vix at vazka dot sk Subject: testovacia SMTP relacia Hello world! .
Mail bol prijatý do frontu správ.
250 Ok: queued as D6F621FB89
Klient ukončí reláciu so serverom:
quit
Server pozdraví a zatvorí spojenie.
221 Bye Connection closed by foreign host.
Keďže sa snažíme o čo najlepšie zabezpečenie servera, opíšeme si nastavenie
SMTP servera, ktorý je pokladaný za veľmi bezpečný. Navyše je aj dobre a ľahko
konfigurovateľný a s jeho činnosťou som nadmieru spokojný už niekoľko rokov.
Jeho meno je - "Postfix
".
Postfix
"
Základnými princípmi mailového servera "Postfix
" sú:
jednoduchosť, modulárnosť a bezpečnosť. Na rozdiel od niektorých iných systémov
(typický priklad: "sendmail
"), ktoré fungujú ako jeden proces
obsluhúci požiadavky na posielanie i prijímanie mailov, sa skladá
z niekoľkých modulov, pričom každý robí jednu, presne špecifikovanú
činnosť. Pri takomto prístupe je zabezpečená prehľadnosť zdrojového kódu
jednotlivých procesov a aj zvýšená bezpečnosť, pretože chyba v jednom
module nemusí ovplyvniť ostatné, kým pri jednom monolitickom programe
môže fatálne následky spôsobiť jediná chyba. Nevýhodou monolitického
riešenia je aj to, že celý program beží s právami jedného používateľa
(root), hoci niektoré jeho časti to vôbec nevyžadujú.
"Postfix
" je implementovaný ako jeden hlavný server (proces
"master
"), ktorý spúšťa obslužné démony vykonávajúce špecifické
operácie podľa potreby. Tento prístup pripomína "inetd
" a konfiguračný
súbor servera "master
" nie náhodou tak trochu pripomína aj
"inetd.conf
" :)
Jednotlivé služby sa spúšťajú ako samostatné procesy a zabezpečujú napr. posielanie a prijímanie mailov z Internetu, doručovanie lokálnych mailov atď. Počet procesov, ktoré daný typ požiadavky obsluhujú, je určený konfiguráciou.
Stručný popis funkcie niektorých démonov (vyčerpávajúce informácie nájdete v manuálových stránkach):
Pri typickej inštalácii "postfixu
" sa používajú tieto adresáre
a súbory (niektoré možno zmeniť v konfigurácii):
/etc/postfix
: adresár s konfiguračnými súbormi/etc/postfix/master.cf
: hlavný konfiguračný súbor služieb, nastavenia
jednotlivých služieb (napr. aj to, či bude daná služba bežať vo vyhradenom
adresári - chroot)/etc/postfix/main.cf
: hlavný konfiguračný súbor "postfixu
"
s nastaveniami doručovania a odosielania pošty/etc/aliases
: súbor s mailovými aliasmi používateľov platnými pre
lokálny počítač/etc/postfix/*
: všetky ostatné súbory v tomto adresári sú tabuľky
"postfixu
" v textovom a databázovom tvare (db, dbm)/var/spool/postfix/
: hlavný adresár s dátovými štruktúrami
"postfixu
" počas jeho prevádzky. Sú tu uložené všetky práve
doručované, prijímané a nedoručiteľné maily. Tento adresár slúži ako
základný adresár pre jednotlivé služby - tie využívajú jeho podadresáre.S Postfixom môžete vykonávať tieto bežné operácie:
/etc/init.d/postfix start
"/etc/init.d/postfix stop
"/etc/init.d/postfix restart
"/etc/init.d/postfix reload
"postfix check
"postfix
flush
"/etc/aliases
",
"/etc/postfix/aliases.*
"): "newaliases
"/etc/postfix/*
",
"/etc/postfix/*.db
"): "cd /etc/postfix ; postmap meno_suboru
"mailq
"
Doteraz ste boli zvyknutí na "init" skripty nachádzajúce sa v adresári
"/etc/init.d
", pomocou ktorých ste spúšťali a zastavovali jednotlivé démony.
"postfix
" má takýto skript tiež, v skutočnosti však spúšťa program
"postfix
", ktorý sám o sebe podporuje parametre "start", "stop", "reload"
a ďalšie. Na svoje si teda prídu aj tí, ktorí nepoužívajú štartovacie
skripty, napríklad používatelia distribúcie Slackware.
Štartovací skript "/etc/init.d/postfix
" okrem samotného
spúšťania/zastavovania procesu "master
" vykonáva aj ďalšie tzv.
"údržbárske" operácie, napríklad pri štarte "postfixu
" sa aktualizujú
databázy vytvárané z konfiguračných súborov (typicky "/etc/postfix/*.db
").
Niektoré nastavenia Postfixu nenájdete v konfiguračnom súbore ale v "databázach". Aby bolo jasné, tieto "databázy" v skutočnosti vznikajú tiež z textových súborov, sú však uložené v binárnej forme, oddelene od hlavného konfiguráku a ich formát je pre človeka nečitateľný. Postfix však k údajom v týchto súboroch vie pristupovať rýchlejšie ako k textovým súborom. V ďalšom texte si úvodzovky odpustím a aj keď tieto súbory nie sú relačnými databázami, budem tieto súbory nazývať jednoducho databázy.
Databázy sa vytvárajú z textových súborov (tieto konfigurujete Vy) pomocou príkazov:
newaliases
(špeciálne pre databázu aliasov)postmap textovy_subor
(pre všetky ostatné databázy)Vytvorená databáza má rovnaké meno ako originálny textový súbor a príponu ".db" (ak ide o databázu typu "hash") resp. ".pag" a ".dir" (ak ide o databázu typu "dbm").
Databázy musíte vytvoriť (vygenerovať) po každej zmene originálnych
textových súborov. Po vygenerovaní databázy treba aktualizovať konfiguráciu
Postfixu príkazom "postfix reload
". (Môžete tiež pár
minút počkať, Postfix by si mal konfiguráciu aktualizovať sám.)
Poznámka: ak v konfigurácii Postfixu spomeniete databázové súbory,
musia tieto databázy existovať už pred spustením Postfixu. V opačnom prípade
pri prvom prístupe k nim dôjde k chybe a proces, ktorý s nimi potrebuje
pracovať, ukončí svoju činnosť s chybovým hlásením ("bad command
startup -- throttling
"
- zaznamená sa do logu). Takéto chyby sa bez sledovania logov nesmierne
ťažko hľadajú, pretože po spustení Postfixu všetko vyzerá dobre - až do
prvého pokusu o prijatie alebo odoslanie mailu.
Poznámka: v najjednoduchšej konfigurácii (a často aj pri tých náročnejších) si vystačíte s databázou aliasov. Na druhej strane, v prípade, že budete chcieť odmietať prijímanie mailov z určitých adries a pod., databázam sa nevyhnete.
Server "Postfix
" sa konfiguruje veľmi ľahko a v svižnom tempe.
Pokiaľ nepotrebujete nejaké špecialitky, v zásade stačí zmeniť niekoľko
parametrov a "Postfix
" je pripravený. V tom spočíva hlavná
výhoda oproti "sendmailu
", kde síce tiež postačí nájsť zopár
parametrov, ale budú sa Vám hľadať dosť ťažko.
/etc/postfix/main.cf
"
Hlavný konfiguračný súbor s nastavením "Postfixu
" obsahuje množstvo
direktív, z ktorých najdôležitejšie sú prednastavené autorom balíčka.
Jednotlivé direktívy su ľahko čitateľné pre správcu systému. Nasledujúce
príklady pochádzajú z mojej inštalácie "postfixu
" a obsahujú veľa zmien
oproti pôvodným nastaveniam. Ak budete chcieť experimentovať, v adresári
s dokumentáciou ("/usr/doc/postfix/samples
", resp.
"/usr/doc/postfix/examples
" nájdete mnoho príkladov, z ktorých
som čerpal aj ja. Súbory sú komentované a ak sa vám z nich niečo zapáči,
môžete nastavenie použiť v hlavnom konfiguračnom súbore.
Pri písaní direktív majte na pamäti:
parameter = hodnota
".$premenná
- v takom prípade sa namiesto $premenná použije jej
hodnota.parameter = /cesta/k/suboru
", v ktorom sa nachádzajú
požadované údaje (na každom riadku jeden). To sa hodí napríklad vtedy, ak
chcete niektoré údaje pre "postfix
" generovať napríklad pomocou
iných programov.parameter = typdb:/cesta/k/databaze
", v ktorej sa nachádzajú
požadované údaje (na každom riadku kľúč a hodnota oddelené medzerami alebo
tabulátormi. Ak sa nájde kľúč, vráti sa hodnota). Typ databázy je najčastejšie "hash" alebo "dbm". Táto databáza
je uchovaná v textovej aj binárnej forme, Postfix používa binárnu formu.parameter = typrv:/cesta/k/suboru
", v ktorom sa
nachádzajú požadované údaje (na každom riadku výraz a výsledok oddelené
medzerami alebo tabulátormi. Ak sa nájde kľúč, vráti sa výsledok). Postfix
podporuje typy "regexp" a "pcre" (Perl compatible regular expressions
- Perlovské regulárne výrazy). Pre "pcre" potrebujete nainštalovať aj
balíček "postfix-pcre
"Najprv si musíte zodpovedať na nasledujúce otázky:
Nasledujúce nastavenia sú bezpodmienečne nutné pre beh Postfixu. Určujú najmä adresy, meno servera, meno domény a podobné vecičky. Venujte im, prosím, zvýšenú pozornosť. Sú to veci jednoduché, ale aj pri tých sa dá urobiť kritická chyba (t.j. Postfix nebude fungovať ako má).
hostname
)Nasledujúce nastavenia určujú domény, ktoré Postfix bude rozpoznávať pri prijímaní a relayovaní pošty.
Inými slovami: relay je povolený iba v prípade, že je odosielateľ alebo príjemca lokálnym používateľom (definuje premenná $mynetworks).
Poznámka: ak máte problém s prijímanim pošty pre Vašu doménu, pravdepodobne máte nesprávne nastavenú premennú relay_domains alebo mydestination./etc/postfix/main.cf: mydestination = mail.example2.com, mail.example3.com relay_domains = example2.com, example3.com /etc/postfix/transport: example2.com smtp:[10.0.0.1] .example3.com smtp:[192.168.0.1] postmap /etc/postfix/transport postfix reload
Tento príklad bude smerovať všetku poštu pre doménu
"example2.com
" na ďalší mailový server s adresou "10.0.0.1"
(hranaté zátvorky zabránia zisťovaniu MX záznamov a musia byť použité,
ak uvádzate IP adresu.) a všetku poštu pre doménu a subdomény
"example3.com
" na ďalší mailový server s adresou
"192.168.0.1". Uvedené domény musia byť zahrnuté v premennej
relay_domains a zároveň nesmú byť v mydestination - ak by
tam boli, bude ich zachytávať Postfix a nebude ich preposielať
na uvedené servery napriek nastaveniu transportnej mapy.
Po vytvorení mapy nezabudnite vytvoriť jej databázovú formu
("postmap /etc/postfix/transport
") a reloadnúť
Postfix.
V niektorých situáciách (a sieťach) je vhodné alebo potrebné, aby Postfix pri odosielaní mailov do Internetu komunikoval iba s jediným mailovým sevrerom - nadradeným serverom - napr. poskytovateľa Internetu. Výhodou je, že možno upraviť nastavenia firewallu, pretože odchádzajúce SMTP spojenie pôjde iba na jeden server, a tiež nie je potrebné prevádzkovať na Vašom serveri DNS (stačí mať IP adresu nadradeného servera). Nevýhodou je samozrejme "úzke hrdlo" komunikácie - ak zlyhá spojenie s nadradeným serverom, alebo ak je mimo prevádzky, o odosielaní mailov sa Vám môže len snívať.
Aliasy su virtuálne mailové adresy na Vašom mailovom serveri. Pomocou
aliasovej mapy Postfix prijme poštu pre neexistujúceho používateľa a doručí
ju tomu používateľovi, pre ktorého je vytvorený tento alias. Aliasy sú
najčastejšie uložené v súbore "/etc/aliases
". Ak si tento súbor
pozriete, všimnite si, že v každej inštalácii Linuxu už existuje niekoľko
aliasov. Ide vo všeobecnosti o presmerovanie pošty pre systémových
používateľov na adresu administrátora systému.
newaliases
". Tento parameter je síce
uvedený oddelene od predchádzajúceho, pretože môže mať aj inú hodnotu
(niektoré typy databáz - nie "hash" ani "dbm" nemusia byť pod kontrolou
Postfixu). Databáza typu "hash" má príponu ".db", databáza typu "dbm" má
príponu ".pag" a ".dir"
Konfiguračný súbor postfixu "/etc/aliases
" obsahuje mailové
aliasy platné pre váš server. Umožňuje vám vytvoriť si ľubovoľný počet
"falošných" adries, ktoré budú doručované fyzickému
používateľovi/používateľom. Napríklad si môžete vytvoriť alias "webmaster",
pričom používateľ "webmaster" nebude existovať. Každý alias sa nachádza na
samostatnom riadku a za dvojbodkou nasleduje používateľ alebo zoznam
používateľov (oddelených čiarkou), komu sa má pošta doručovať.
/etc/aliases: MAILER-DAEMON: postmaster postmaster: root abuse: root root: vix,karol webmaster: vix pokus: pokus@example.com newaliases
V predchádzajúcej ukážke som definoval alias "MAILER-DAEMON", ktorého pošta sa doručuje používateľovi "postmaster", ktorého pošta sa doručuje používateľovi "root", ktorého pošta sa však doručuje používateľom "vix" a "karol". (Postfix si zistí konečného príjemcu a pošle to priamo jemu, bez zložitej a nezmyselnej postupnosti, ktorú som načrtol.) Definujeme aj alias "abuse", ktorý sa používa pri komunikácii s administrátorom servera v prípade, že nejaký náš používateľ porušuje sieťovú etiketu (napr. posiela z našej siete SPAM). Nasleduje spomínaný alias "webmaster", ktorého pošta sa doručuje používateľovi "vix". Adresa pre používateľa "pokus" sa posiela automaticky na adresu "pokus@example.com".
Zdôrazňujem, že v predchádzajúcom príklade používatelia "abuse", "webmaster" a "pokus" nemusia vôbec existovať - a ani by nemali, pretože by sa k svojim mailom na serveri nikdy nedostali. Postfix by ich doručil na adresy uvedené v aliasoch. Naproti tomu používatelia uvedení na pravej strane aliasov ("vix" a "karol") musia existovať!
Takýmto spôsobom si môžete nechať doručovať správcovské maily (a chybové hlásenia programov zasielané rootovi) na bežnú adresu (takže nemusíte pod rootom používať mailové programy); nemusíte vytvárať kontá typu "webmaster" a môžete automaticky forwardovať maily pre už neexistujúcich používateľov na iné adresy mimo vášho servera.
V aliasoch môžete definovať aj iné špeciality, napríklad pri doručení mailu na nejaký alias sa môže spustiť program, ktorý "niečo" urobí. Tieto detaily však momentálne nepotrebujeme a tak ich odsunieme do kategórie "osobných zvrhlostí".
Postfix tiež umožňuje prijímať maily pre tzv. "virtuálne domény". Ide o domény, ktoré majú ako MX záznam v DNS uvedený Váš mailový server, ale vyžadujete špeciálne spracovanie mailov pre tieto domény. Napríklad chcete, aby v rámci virtuálnej domény existovali iba niekoľkí používatelia (nemusia byť totožní s používateľmi na mailovom serveri), alebo chcete prijímať maily pre celú doménu a uchovávať ich v jednej schránke (doménový kôš).
/etc/postfix/virtual: virtualexample.com akykolvektext @virtualexample.com somebody@example.com virtualexample2.com akykolvektext someone@virtualexample2.com someoneelse@example3.com virtualexample3.com akykolvektext @virtualexample3.com ja@virtualexample3.com postmap /etc/postfix/virtual postfix reload
V tomto príklade sme zadefinovali tri virtuálne domény:
fetchmail
". Poznámka: aby fungovali virtuálne domény, musí byť Váš server uvedený ako "MX" záznam pre tieto domény.
Niekedy sa vyžaduje, aby Postfix prijímal poštu pre doménu tak, že nezáleží na mene pred zavináčom (napr. "cokolvek@example.com"). Aj toto sa dá urobiť a to takto:
Poznámka: aby presmerovanie fungovalo, musíte
vypnúť kontrolu adresy príjemcu pomocou parametra local_recipient_maps
=
Upozornenie: použitie tohto parametra rapídne zvýši výskyt SPAMu v tejto spoločnej schránke.
Možno ste už videli mailové adresy v tvare "Meno.Priezvisko@example.com". Sú veľmi príťažlivé, však? A určite ste zatúžili, aby aj vaši používatelia mohli používať takéto jednoducho zapamätateľné adresy namiesto adries typu "login@example.com". (Ak máte napr. prihlasovacie mená na serveri vytvorené v tvare "prvé písmeno mena + maximálne 7 znakov priezviska", niekedy vznikajú celkom exotické kombinácie :))
Ak teda vaša túžba po pekných mailových adresách prerastie v túžbu po realizácii v Postfixe, tu je postup, ako zabezpečiť prepísanie používateľského mena "vix" na "ivan.noris" (a opačne) a "pokus" na "peter.okus" (a opačne). Adresy sa prepíšu v hlavičkách pri príjme aj odosielaní pošty, ak je doména zapísaná v $myorigin, $mydestination alebo $inet_interfaces.
/etc/postfix/canonical: vix ivan.noris pokus peter.okus /etc/aliases: ivan.noris: vix peter.okus: pokus newaliases postmap /etc/postfix/canonical postfix reload
Poznámka Aby to celé fungovalo, musia používatelia "vix" a "pokus" existovať
a aliasy "ivan.noris" a "peter.okus" musíte definovať v súbore
"/etc/aliases
". Ak ich v aliasoch nedefinujete, odchádzajúca
pošta bude mať síce prepísané hlavičky, ale príjem na tieto adresy nebude
fungovať v prípade, že Postfix prijíma poštu len pre lokálnych
používateľov (parameter "local_recipient_maps").
Upozornenie Po zavedení mapovania "canonical" spôsobom, ako je tu uvedený, sa budú adresy používateľov prepisovať pri prijímaní aj odosielaní pošty. V tomto prípade to znamená, že používateľ "vix" už nedokáže odoslať e-mail tak, aby obsahoval adresu "vix@example.com"; vždy bude prepísaná na "ivan.noris@example.com". Tomu sa dá zabrániť použitím jednosmerných prepisovacích máp. To bude predmetom ďalších aktualizácií tejto príručky.
/etc/passwd
").
Poznámka V Postfixe 2.1 môžete použiť prvú formu direktívy (local_recipient_maps = $alias_maps proxy:unix:passwd.byname) ktorá využíva službu "proxymap". Pomocou nej má Postfix prístup k databáze používateľov aj v prípade, že používate chroot().
Pozor! Ak používate starší Postfix bez možnosti využiť
"proxymap"a služba SMTP používa chroot()
nebude mať prístup k skutočnému súboru "/etc/passwd
"
- treba ho skopírovať do "/var/spool/postfix/etc/passwd
"
pri každej zmene! Najelegantnejšie to (na Debiane) urobíte pomocou
konfiguračných súborov programov "adduser
"
("adduser.local
") a "deluser
"
("deluser.local
"). Štartovací skript
"/etc/init.d/postfix
" navyše pri každom spustení Postfixu
skopíruje súbor "/etc/passwd
" sám.
/etc/postfix/client_access: 192.168.67.89 REJECT 192.168.11.22 550 You are a spammer, go away! postmap client_access postfix reload
/etc/postfix/helo_access: 192.168.67.89 REJECT 192.168.11.22 550 You are a spammer, go away! postmap helo_access postfix reload
SpamAssassin
".
/etc/postfix/_access: bnn@inmail.sk 550 You are a spammer, go away napalma@centrum.sk 550 You are a spammer, go away igi_2@centrum.sk 550 You are a spammer, go away igi2@szm.sk 550 You are a spammer, go away cddb@inmail.sk 550 You are a spammer, go away cddata@szm.com 550 You are a spammer, go away this.is.spam.tld 550 This domain sends us only spam, go away! postmap /etc/postfix/access postfix reload
Pozor! musíte uviesť aspoň jednu z hodnôt "reject", "check_relay_domains" alebo "reject_unauth_destination", inak Postfix nebude prijímať poštu!
Pozor! ak použijete môj príklad, nepridávajte do zoznamu všetky systémové kontá alebo aliasy. Napríklad používatelia "postmaster", "hostmaster" alebo "abuse" musia existovať a prijímať poštu aj z Internetu!
/etc/postfix/recipient_checks: /^bin\@.*$/ 550 This user will not receive mail from Internet! /^daemon\@.*$/ 550 This user will not receive mail from Internet! /^sys\@.*$/ 550 This user will not receive mail from Internet! /^games\@.*$/ 550 This user will not receive mail from Internet! /^man\@.*$/ 550 This user will not receive mail from Internet! /^lp\@.*$/ 550 This user will not receive mail from Internet! /^mail\@.*$/ 550 This user will not receive mail from Internet! /^news\@.*$/ 550 This user will not receive mail from Internet! /^uucp\@.*$/ 550 This user will not receive mail from Internet! /^proxy\@.*$/ 550 This user will not receive mail from Internet! /^www-data\@.*$/ 550 This user will not receive mail from Internet! /^nobody\@.*$/ 550 This user will not receive mail from Internet! postmap /etc/postfix/recipient_checks postfix reload
Pozor! Podľa dokumentácie by ste v novších verziách Postfixu (po 20021202) mali používať "reject_unauth_destination" namiesto "check_relay_domains"!!!
Pozor! Tento parameter nesmie byť menší ako hodnota message_size_limit!
procmail
"maildrop
". Tento
program je súčasťou balíka "Courier" a štandardne používa
formát "Maildir" spomenutý v predchádzajúcich parametroch.Pomocou Postfixu môžete implementovať jednoduchý filter obsahu správ, ktorý Vám umožní filtrovať množstvo vírusov alebo SPAMu na základe rovnakého reťazca v mailoch.
Poznámka: i keď je táto možnosť veľmi príjemná, Postfix sám o sebe nie je antivírus ani SPAM filter, takže jej možnosti sú obmedzené. Pre skutočné antivírové riešenie budete musieť prepojiť Postfix s niektorým z komerčných antivírusov (neviem zatiaľ o žiadnom spoľahlivom free riešení). Ak potrebujete SPAMový filter, čítajte ďalej.
postfix-pcre
"!postfix-pcre
"Bližšie informácie spolu s príkladom nájdete neskôr.
Poznámka: nepreháňajte to s počtom filtrov. Veľké množstvo výrazov spôsobí spomalenie doručovania mailov a vyššiu spotrebu pamäte.
V konfiguračnom súbore "/etc/postfix/main.cf
" sa samozrejme
nachádza alebo môže nachádzať oveľa väčšie množstvo parametrov (kompletný
zoznam aktuálnych nastavení spolu s defaultnými hodnotami získate zadaním
príkazu "/usr/sbin/postconf -v
"). Pre väčšinu z nich
platí: ak neviete, načo daný parameter slúži, nemeňte ho!
post*
")Poznámka: Nepoužívajte používateľa "postfix" ani "root".
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/lib/postfix program_directory = /usr/lib/postfix mail_owner = postfix default_privs = nobody #myhostname = host.domain.name #myhostname = virtual.domain.name #mydomain = domain.name myorigin = $myhostname #myorigin = $mydomain inet_interfaces = all #inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost #mydestination = $myhostname, localhost.$mydomain #mydestination = $myhostname, localhost.$mydomain $mydomain mydestination = $myhostname, localhost.$mydomain, $mydomain, ns.$mydomain, mail.$mydomain, www.$mydomain local_recipient_maps = $alias_maps proxy:unix:passwd.byname double_bounce_sender = double-bounce alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #home_mailbox = Mailbox #home_mailbox = Maildir/ mail_spool_directory = /var/mail #mail_spool_directory = /var/spool/mail mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME header_checks = pcre:/etc/postfix/body_checks body_checks = pcre:/etc/postfix/body_checks relay_domains = $mydestination mynetworks = 10.0.0.0/24, 127.0.0.0/8 smtpd_banner = $myhostname ESMTP $mail_name #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Linux-Mandrake) local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 debug_peer_level = 2 debugger_command = PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 default_destination_recipient_limit = 25 initial_destination_concurrency = 2 maximal_backoff_time = 4000 maximal_queue_lifetime = 5 bounce_queue_lifetime = 2d minimal_backoff_time = 1000 queue_run_delay = 1000 disable_vrfy_command = yes smtpd_etrn_restrictions = smtpd_recipient_limit = 1000 smtpd_timeout = 300 smtpd_error_sleep_time = 3 smtpd_soft_error_limit = 10 smtpd_hard_error_limit = 100 #smtpd_client_restrictions = permit_mynetworks, reject_unknown_client #smtpd_client_restrictions = smtpd_client_restrictions = permit_mynetworks, reject_rbl_client relays.ordb.org reject_rbl_client dnsbl.njabl.org reject_rbl_client sbl-xbl.spamhaus.org smtpd_helo_required = yes # smtpd_helo_restrictions = # smtpd_helo_restrictions = permit_mynetworks, reject_maps_rbl smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname reject_rbl_client relays.ordb.org reject_rbl_client dnsbl.njabl.org reject_rbl_client sbl-xbl.spamhaus.org # smtpd_sender_restrictions = reject_unknown_sender_domain, hash:/etc/postfix/access # smtpd_sender_restrictions = smtpd_sender_restrictions = reject_unknown_sender_domain, reject_rbl_client relays.ordb.org reject_rbl_client dnsbl.njabl.org reject_rbl_client sbl-xbl.spamhaus.org reject_non_fqdn_sender check_sender_access hash:/etc/postfix/sender_access smtpd_recipient_restrictions = reject_unknown_recipient_domain, permit_mynetworks, check_recipient_access pcre:/etc/postfix/recipient_checks, reject_unauth_destination allow_untrusted_routing = no access_map_reject_code = 550 invalid_hostname_reject_code = 501 maps_rbl_reject_code = 550 reject_code = 550 relay_domains_reject_code = 550 unknown_address_reject_code = 450 unknown_client_reject_code = 450 unknown_hostname_reject_code = 450 bounce_size_limit = 50000 command_time_limit = 1000 default_process_limit = 20 deliver_lock_attempts = 5 deliver_lock_delay = 1 duplicate_filter_limit = 1000 fork_attempts = 5 fork_delay = 1 header_size_limit = 102400 line_length_limit = 2048 message_size_limit = 4096000 mailbox_size_limit = 51200000 qmgr_message_active_limit = 1000 qmgr_message_recipient_limit = 1000 queue_minfree = 0 stale_lock_time = 500 transport_retry_time = 60 delay_warning_time = 4 allow_percent_hack = yes append_at_myorigin = yes #append_dot_mydomain = no append_dot_mydomain = yes empty_address_recipient = MAILER-DAEMON masquerade_domains = $mydomain masquerade_exceptions = swap_bangpath = yes trigger_timeout = 10
V prípade, že chcete zistiť, či na serveri "nevisia" vo fronte nejaké
(zatiaľ) nedoručené alebo nedoručiteľné maily, môžete použiť program
"mailq
", ktorý zobrazí zoznam týchto mailov spolu
s identifikačnými reťazcami (napr. "D6F621FB89". Maily, ktoré sa Postfix práve
snaží doručiť, sú označené znakom "*".
V prípade, že sa Postfixu nepodarí doručiť mail a nejde o permanentnú chybu, pokúsi sa o doručenie opäť o nejaký čas. Tento čas môžete nastaviť parametrami "delay_warning_time", "maximal_queue_lifetime", bounce_queue_lifetime a niekoľkými ďalšími, menej používanými. V prípade, že ste odstránili nejakú chybu a/alebo sa chcete pokúsiť o opätovné doručenie "visiacich" mailov ručne, použite príkaz:
postfix flush
Ak sa rozhodnete odstrániť niektorý nedoručiteľný mail zo záznamov Postfixu skôr, ako to urobí sám po nastavenom čase, môžete použiť program:
postsuper -d cislo_ziskane_vypisom_mailq
prípadne
postsuper -d -
a zadávať identifikačné reťazce na samostatné riadky (CTRL+D pre koniec). V nevyhnutnom prípade môžete použiť aj
postsuper -d ALL
na vymazanie VŠETKÝCH nedoručených mailov vo fronte. Tento príkaz používajte veľmi opatrne!!!
V prípade akýchkoľvek podozrení a problémov kontrolujte systémové logy.
Postfix loguje do súborov "/var/log/mail.log
" (prípadne do
logov v adresári "/var/log/mail
") a vie byť dostatočne ukecený,
aby vám pomohol nájsť problém.
Pred nejakým časom som sa na Vazke rozhodol zabrániť masívnemu šíreniu
vírusov/červov skrytých v attachmentoch, ktoré sa v nemenovaných mailových
klientoch spúšťajú automaticky, alebo po otvorení attachmentu dôverčivým
používateľom. Nie všetky počítače totiž mali nainštalovaný antivírový
program a okrem toho som si chcel vyskúšať v "postfixe
" niečo
nové. Podarilo sa - môj jednoduchý filter na attachmenty začal fungovať
okamžite - žiaden mail s attachmentmi s príponami ".pif", ".exe", ".lnk"
a pod. sa už cez "postfix
" nedal poslať (ani z jednej strany).
Pre korektnosť uvádzam, že regulárne výrazy pre filter som objavil (po dlhom
hľadaní) na vyhľadávači Google.
Riešenie je natoľko jednoduché, že ho teraz ponúkam vám. Nie je to stopercentne účinný antivírus, to v nijakom prípade. Ale na červy a vírusy šíriace sa mailom, ktoré sa objavili počas posledného roka to stačí. Ak niekto bude namietať, že sa takýmto filtrom obmedzujú používatelia servera, nech si vymyslí iné riešenie. Ja tvrdím, že nikto nepotrebuje posielať spúšťateľné súbory mailom. Jedinou výnimkou by mohli byť samorozbaľovacie archívy, tie sa však dajú premenovať. Skrátka, je to na vás.
Všetko, čo potrebujete, sú direktívy:
header_checks = pcre:/etc/postfix/header_checks body_checks = pcre:/etc/postfix/body_checks"header_checks" určuje výraz, ktorý sa má hľadať v hlavičke mailu, "body_checks" určuje výraz, ktorý sa má hľadať v tele mailu (túto direktívu podporujú len verzie "
postfixu
" 20000528
a vyššie, teda aj verzie 1.x a 2.x).
Súbor "/etc/postfix/body_checks
" obsahuje regulárne výrazy
(jeden na kažom riadku) v tvare:
/regularny vyraz/ REJECT text
Text "text" sa vloží do chybového mailu, ktorý sa bude vracať odosielateľovi. Prehľadávanie výrazov sa končí, ak sa nájde vyhovujúci výraz alebo na konci súboru.
Príklad: ak by ste potrebovali odfiltrovať maily, ktoré obsahujú
text: "Re: Your password" v hlavičke, potrebovali by ste regulárny výraz,
ktorý by ste pridali do súboru "/etc/postfix/header_checks
".
/^Subject:\s+Re: Your password/ REJECT Sorry, text in subject typical for Internet worm
Pre naše potreby sú súbory "/etc/postfix/header_checks
"
a "/etc/postfix/body_checks
" rovnaké (skopírujte obsah,
vytvorte si symlink alebo v oboch direktívach použite ten istý súbor
"/etc/postfix/body_checks
") a obsahujú tieto výrazy (skopírujte
text presne, ide o tri dlhšie riadky alebo si ich uložte ako súbor):
/^begin \d\d\d .*\.(vbe|vbs|exe|com|jb|bat|pif|scr|lnk|cmd)/ REJECT Message content rejected; we do not accept executable attachments. /^Content-(Disposition|Type)\:.*name="?.*\.(vbe|vbs|exe|com|jb|bat|pif|scr|lnk|cmd)"?/ REJECT Message content rejected; we do not accept executable attachments. /^\s*(file)?name="?.*\.(vbe|vbs|exe|com|jb|bat|pif|scr|lnk|cmd)"?/ REJECT Message content rejected; we do not accept executable attachments. /^Subject:.*your account/ REJECT Message content rejected; message has subject typical for viruses! /The message cannot be represented in 7-bit ASCII encoding and has been sent as a binary attachment./ REJECT Message content rejected; found text typical for viruses. /The message contains Unicode characters and has been sent as a binary attachment./ REJECT Message content rejected; found text typical for viruses. /Mail transaction failed. Partial message is available./ REJECT Message content rejected; found text typical for viruses.
Aj bez znalostí regulárnych výrazov si viete doplniť ďalšie potrebné prípony alebo upraviť text, ktorý sa vloží do chybového mailu zasielaného odosielateľovi potenciálne zavíreného mailu.
Teraz reloadnite konfiguráciu Postfixu:
/etc/init.d/postfix reload
a skúste si poslať mail s attachmentom s príponou, ktorá sa nachádza v našich regulérnych výrazoch. Pre kontrolu si samozrejme skúste poslať aj mail s neškodným attachmentom!
Program "postfix" je riešený ako súbor modulov, ktoré medzi sebou navzájom
komunikujú a zasielajú si správy. Všetky moduly bežia s právami používateľa
"postfix
", čo výrazne zvyšuje bezpečnosť celého systému. Iba
hlavný proces "master
" sa spúšťa pod rootom a ovláda ostatné
procesy. Sám však nepočúva na nijakom porte a teda nie je dostupný zo siete.
Proces "master
" spúšťa ostatné procesy podľa potreby.
Konfigurácia sa nachádza v súbore "/etc/postfix/master.cf
" a je
prednastavená tak, že ak nechcete, nemusíte meniť vôbec nič. Tento
konfiguračný súbor však umožňuje pre procesy "postfixu
"
nastaviť napríklad spúšťanie vo vyhradených adresároch (chroot), čo ešte viac zvyšuje bezpečnosť systému.
Ukážka konfiguračného súboru "/etc/postfix/master.cf
":
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (50) # ========================================================================== smtp inet n - n - - smtpd pickup fifo n n n 60 1 pickup cleanup unix - - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 nqmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce flush unix - - n 1000? 0 flush smtp unix - - n - - smtp showq unix n - n - - showq error unix - - n - - error local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp cyrus unix - n n - - pipe flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user} uucp unix - n n - - pipe flags=F user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=F. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
Súbor obsahuje množstvo komentárov, takže ja budem len veľmi stručný. Význam pre nás dôležitých stĺpcov v tabuľke:
postfix
"
Na zvýšenie bezpečnosti pomocou vyhradených adresárov stačí prepísať
"n" na "-" v stĺpci "chroot" pre všetky služby okrem "local" a tých, ktoré
obsahujú v stĺpci "command" príkaz "pipe
" a reštartovať
"postfix
". Hneď skúste poslať niekoľko mailov z vášho servera
na váš server, z vášho servera na iný server a potom z iného servera na váš
server. Ak nastal nejaký problém ("postfix
" do systémových logov vynadá
a prestane doručovať poštu), skontrolujte, či ste niekde neurobili chybu.
Pozor! Ak je v konfiguračnom súbore
"/etc/postfix/main.cf
" definovaná premenná
"local_recipient_maps = $alias_maps unix:passwd.byname
",
"postfix
" nemusí vedieť doručovať poštu lokálnym používateľom,
pretože súbor "/etc/passwd
" sa nachádza mimo vyhradeného
adresára, ktorý používajú jednotlivé služby. Na túto skutočnosť
"postfix
" niekoľkonásobne a neobyčajne poeticky nadáva do
logov. Riešenie je jednoduché: buď pre túto službu vypnite príznak "chroot",
alebo pri každej zmene "/etc/passwd
" (pridanie, zrušenie
používateľa) musíte tento súbor skopírovať do adresára
"/var/spool/postfix/etc
".
Pravdepodobne každý z vás sa už stretol s nevyžiadanou poštou vo svojej schránke. Najväčšie množstvo tejto pošty je v angličtine alebo japončine (ktorú Mozilla seriózne zobrazuje :), ale v mojom mailboxe som objavil už aj nevyžiadané slovenské maily s čiste komerčným cieľom. Takéto maily sa označujú ako SPAM alebo UCE (Unsolicited Commercial Email - Nevyžiadaná obchodná elektronická pošta). V ďalšom texte si dovolím používať zaužívaný pojem "SPAM", aj keď sa tým možno previním slovenskému jazykovému zákonu. Jednoducho to je krátke slovo - a hotovo!
Každému, kto dostáva pravidelne SPAM, vŕtajú v hlave dve zásadné otázky:
SPAM sa do vašej schránky dostane najčastejšie preto, že ste niekde na Internete uviedli svoju e-mailovú adresu. Mohlo sa to stať pri registrácii na nejakej stránke - niektoré si vás automaticky zaradia do rôznych zoznamov, o ktorých neviete, či nebudú poskytnuté tretím stranám. Každá stránka, na ktorej sa registrujete, by mala obsahovať informáciu o tom, ako bude naložené s údajmi, ktoré poskytnete - ak takýto údaj chýba, rozhodne nepoužívajte pri registrácii svoju oficiálnu mailovú adresu a vytvorte si na tento účel jedno alebo niekoľko kont na freemailových serveroch.
Ja osobne sa snažím nikde neregistrovať, a ak už, tak sa riadim týmito
pravidlami, a predsa sa mi v schránke objavujú SPAMy doručené aj na
oficiálne/pracovné adresy. Nedávno som zistil, že to pravdepodobne spôsobil
niektorý z Internetových červov, ktoré posielajú náhodné maily náhodným
príjemcom - takýmto spôsobom sa môže ocitnúť adresa kohokoľvek z vás na
akomkoľvek mieste na Zemi. Dokonca je vhodné, aby ste svoju adresu, ak ju
vystavujete niekde na WWW stránkach, zapísali tak, aby nebola jednoducho
identifikovateľná pre robotov, ktorí budú web prehľadávať. Napríklad moja
adresa na konci každej z týchto stránok je uvedená ako "vix (at)
vazka.sk
". Existujú aj iné varianty, určite sa s nimi na Internete
stretnete.
Ďalším spôsobom na získanie adries, ktoré sa potom potenciálne môžu použiť na šírenie SPAMu sú reťazové maily typu "Chorý chlapec v Ugande dostane za každý email, ktorý forwardnete svojim priateľom 50 centov...", prípadne "Bill Gates sľúbil tým, čo pošlú tento mail na 8000 adries 1 milión dolárov" a tak ďalej až do omrzenia. Absolútna väčšina týchto mailov sú absolútne hlúposti, ktoré sú nereálne a využívajú iba "sociálne inžinierstvo" - jednoducho ho pošlete ďalej, lebo "čo ak je to náhodou pravda?" Nie, nie je to pravda. Neexistuje spôsob, ako môže poskytovateľ Internetu v USA zistiť, že ste posielali mail v rámci Slovenska, a už vôbec nie komu a koľkokrát. Preto vás pekne prosím, aby ste skôr, ako zareagujete na reťazový mail, ráčili vždy skontrolovať stránku www.hoax.cz, kde sa dočítate o takmer všetkých reťazových mailoch, ktoré zaťažujú Internet.
Poznámka trochu na okraj: ak dostanete reťazový mail, ktorý vám oznamuje, že máte vírus a nabáda vás, aby ste uskutočnili nejakú akciu na vašom počítači, najprv porozmýšľajte a potom skontrolujte stránky renomovaných antivírusových dodávateľov, ktorí oznamujú aj falošné poplachy (fámy) šíriace sa v mailoch. Na Slovensku môžete vyskúšať minimálne www.eset.sk (antivírus NOD), www.avg.cz (antivírus AVG) prípadne www.symantec.com (Norton Antivirus)
Odporúčania:
Všetko spomenuté metódy, ako sa brániť pred SPAMom nemusia pomôcť stopercentne a podľa Murphyho zákonov ani nepomôžu. Ide totiž skôr o prevenciu a my potrebujeme riešiť už existujúci problém. Riešenie je "jednoduché" - program na detekciu a prípadné filtrovanie SPAMov.
Na prvý pohľad sa môže zdať, že vytvoriť takýto program je veľmi ťažké. Ak sa však bližšie pozriete na typické SPAMy, opakujú sa v nich rovnaké vety, slová, výrazy... (napr. "WIN $1.000.000 NOW!" a podobne). Programy na detekciu SPAMu vedia takéto (a mnohé iné!) výrazy vyhľadať a na základe nich mail buď označia za SPAM alebo nie...
Stop!
Zdá sa vám to jednoduché? Naozaj, SPAM nie je AŽ zasa také ťažké detekovať, ale čo ak program na detekciu SPAMu označí za SPAM aj celkom normálnu poštu, ktorá náhodou obsahuje reťazce typické pre SPAM?
Progam, o ktorom budeme hovoriť - SpamAssassin
používa na označovanie
mailov techniku priraďovania bodov. Každá podozrivá hlavička alebo každý
podozrivý výraz v maili spôsobia zvýšenie celkového skóre. Naopak, texty
typické pre normálnu komunikáciu skóre znižujú.
Niektoré typické testy na SPAM sú:
th6u7bft589rt@yahoo.com
")Program je schopný využiť aj niektoré ďalšie techniky na detekciu SPAMu, napr.:
(Na tieto špecialitky budete potrebovať prídavné perlovské moduly.)
V konfigurácii programu je nastavený prahový limit a keď e-mail
tento limit prekročí, je automaticky označený za SPAM.
SpamAssassin
sa počas svojho života aj učí - ak pravidelne
dostávate maily od konkrétneho odosielateľa s nízkym skóre, označí si ho
v databáze a pre každý ďalší mail od tohto odosielateľa odpočítava nejakú
hodnotu od výsledného skóre. Opačne to funguje pre SPAM.
Funkciu "samoučenia sa" môžete využiť aj manuálne, ak
máte zbierku SPAMov, ktoré ste dostali ešte pred používaním programu alebo
ktoré SpamAssassin
nezachytil. a chcete na nej
SpamAssassin
natrénovať. V takom prípade si pozrite
dokumentáciu k "sa-learn
" (príkazom "man
"
alebo "perldoc
")
V prípade programu SpamAssassin
sa nevykonáva nijaká
deštruktívna akcia. Do mailu sa pridá špeciálna hlavička
"X-Spam-Status
" s hodnotou "no", ak ide o bežný mail, alebo
"yes", ak ide o SPAM. Na základe hlavičky "X-Spam-Status: yes
"
môžete teda maily neskôr triediť alebo vymazávať.
Okrem toho vkladá SpamAssassin
do každého SPAMu aj informácie
o tom, prečo ho označil za SPAM, čo vám môže pomôcť pri jednoduchšej
identifikácii podobných mailov. V novšej verzii (2.50) sa tieto informácie
vkladajú ako samostatná príloha, takže sa nepoškodí vzhľad pôvodného
mailu, ako to bolo v starších verziách. Ak si to želáte, môže
"SpamAssassin
" označovať SPAM aj pomocou subjectu "****SPAM****
" (táto možnosť sa dá vypnúť a dokonca
v novších verziách je štandardne vypnutá) a normálne sa doručia.
Maily identifikované ako SPAM môžete teda mazať alebo presúvať ručne,
filtrovať ich na úrovni mail servera, alebo pomocou nastavenia filtrovania
vo Vašom e-mailovom klientovi (Mozilla Mail, Evolution, Eudora, ...).
Najelegantnejšie je použitie SpamAssassin-a priamo vo Vašom programe na
doručovanie pošty na serveri ("procmail
",
"maildrop
", ...) na základe hodnoty hlavičky
"X-Spam-Status: yes
".
Moje praktické skúsenosti (používame SpamAssassin
v práci
zhruba od mája 2002) ukázali, že detekčné schopnosti programu sú skutočne
veľmi dobré, SpamAssassin
detekoval takmer každý SPAM v mojom
mailboxe, pričom falošné poplachy (normálny mail označený ako SPAM)
spôsobuje iba v niekoľkých percentách prípadov. Pri desiatkach až stovkách
mailov denne v mojich mailboxoch je to zhruba 1 mail týždenne - vždy od toho
istého odosielateľa, ktorý používa divný webmail s podozrivo dlhými
(nezalamovanými) riadkami a pravidelne píše maily bez uvedenia subjectu.
Program "SpamAssassin
":
procmail
",
"maildrop
", ...)
Postup pre inštaláciu samotného programu a všetkých modulov jazyka Perl,
ktoré pre svoju činnosť potrebuje alebo odporúča, nájdete priamo
v dokumentácii (súbor "INSTALL
", aj časť "Additional Modules").
Ideálne je stiahnuť balíček priamo pre vašu distribúciu, tu však treba dať
pozor, lebo niektoré konzervatívne distribúcie (napr. Debian) nepoužívajú
najnovšie verzie produktov. Na druhej strane inštalácia balíčka rieši aj
potrebné závislosti.
Ak používate Debian Sarge, odporúčam nasledovný spôsob inštalácie:
/etc/apt/sources.list
" pridajte riadok:
deb http://www.backports.org/debian sarge-backports main contrib
non-free
. Týmto nakonfigurujete použitie iného zdroja balíčkov,
tzv. "backports", čo sú novšie verzie balíčkov pripravené priamo pre
Debian Sargeapt-get update
apt-get -t sarge-backports spamassassin
V prípade manuálnej inštalácie nejde vďaka
závislostiam na perlovských moduloch (sťahujte ich pomocou návodu uvedeného
v súbore "INSTALL
" alebo ručne z archívu www.cpan.org) o triviálnu inštaláciu, ale
pomocou manuálu a veľkej dávky trpezlivosti sa Vám to určite podarí.
Krátky návod ako inštalovať perlovské moduly (napr. pre
"SpamAssassin
"):
INSTALL
" zoznam modulov, ktoré
budete potrebovať. Niektoré sú súčasťou štandardnej distribúcie Perlu (v
súbore "INSTALL
" Vás na to upozornia poznámky)perldoc File::Spec perldoc HTML::Parser ...
/var/tmp
". Rozbaľte moduly a prečítajte si súbor
"README
" resp. "INSTALL
", aby ste zistili, aké
na akých ďalších moduloch závisia. Stiahnite aj tieto moduly. cd /var/tmp/xxx perl Makefile.PL make make test make install("
make install
" musíte vykonať ako root).SpamAssassin
" a zopakujte hore uvedené kroky (sú uvedené aj v súbore
"INSTALL
")
cd /var/tmp/Mail-SpamAssassin-2.50 perl Makefile.PL make make test make install
"SpamAssassin
" si zatiaľ ponechajte!
Predpokladajme, že SpamAssassin
máte nainštalovaný (napr.
v adresári "/usr/local/bin
"). Nasleduje veľmi dôležitý krok:
otestovanie funkčnosti! Presne ako odporúčajú autori
v "INSTALL
", zadajte v adresári so zdrojovými textami
programu (ak ste inštalovali balíček na Debiane, v adresári
"/usr/share/doc/spamassassin
", kde zároveň rozbaľte zbalené súbory
"sample-nonspam.txt.gz
" a "sample-spam.txt.gz
"):
spamassassin -t < sample-nonspam.txt > nonspam.out spamassassin -t < sample-spam.txt > spam.out
Súbory "sample-nonspam.txt
" a "sample-spam.txt
"
obsahujú skutočné e-mailové správy, z ktorých prvá nie je a druhá je SPAM.
Môžete si ich najprv vypísať, aby ste mi uverili. Dôležité je, že sú to
pokusné e-maily, na ktorých otestujeme, či SpamAssassin
funguje
tak, ako by mal, t.j. či nepadá, nevypisuje chyby a pod.
Pomocou textového editora alebo programov "less
" či
"more
" si vypíšte novovytvorené súbory
"nonspam.out
" a "spam.out
".
"nonspam.out
" by sa mal javiť ako normálny mail (s hlavičkami),
súbor "spam.out
" by mal v subjecte obsahovať text
"****SPAM****
" a identifikáciu SPAMu. Oba príkazy nesmú
zobraziť nijaké chyby pri spúšťaní! V prípade, že vynecháte tieto testy,
môže stať, že sa Vám nebude doručovať pošta!
Ak predchádzajúce testy dopadli dobre, je čas nasadiť SpamAssassin
do
reálneho života. Pomôže nám pri tom program, ktorý fyzicky doručuje poštu
jednotlivým používateľom do ich mailboxov. Tento program je vo väčšine
inštalácií štandardne "procmail
" - ak používate "Postfix",
môžete sa o tom presvedčiť kontrolou premennej
"mailbox_command
" v konfiguračnom súbore
"/etc/postfix/main.cf
". U nás v práci používame na doručovanie
mailov program "maildrop
", ktorý pracuje s formátom Maildir.
Tento program si môžete stiahnuť na stránke www.courier-mta.org, kde nájdete aj
IMAP server "Courier".
Upozornenie! Pri testovaní a konfigurovaní akéhokoľvek filtra (a teda
aj programu "SpamAssassin
") sledujte logy Vášho mailového
servera ("/var/log/mail.log
") a hľadajte anomálie. Ak sa
mailovému serveru nepodarí doručiť poštu (programy "procmail
"
resp. "maildrop
" zlyhajú), ponecháva si ju stále vo fronte
mailov, zaloguje však chybové hlásenie s dôvodom chyby. Najčastejšie je to
chybná cesta/meno súboru.
Program "procmail
" pri doručovaní pošty konkrétnemu
používateľovi hľadá súbor ".procmailrc
" v jeho domácom
adresári. V prípade, že ho nájde, riadi sa jeho pravidlami, čo umožňuje
napr. triediť si poštu do priečinkov už na serveri (nie v e-mailovom
klientovi!), automaticky forwardovať poštu na iné adresy, alebo robiť
s mailami rôzne psie kusy. Presne takto použijeme teraz náš program
SpamAssassin.
Pomocou textového editora otvorte (alebo vytvorte) súbor
".procmailrc
" vo vašom domácom adresári a na jeho
začiatok (aby sa toto pravidlo vykonalo ako prvé bez ohľadu na to, čo
budete neskôr s poštou robiť) vložte toto:
:0fw * < 256000 | /usr/bin/spamassassin
resp.
:0fw * < 256000 | /usr/local/bin/spamassassin
podľa toho, kde je nainštalovaný program
"SpamAssassin
"
Uvedené pravidlo spôsobí automatické filtrovanie každého prijatého mailu,
ktorý je menší ako cca 256 KB cez program SpamAssassin
(zadajte
cestu platnú pre vašu inštaláciu!). Limit veľkosti má význam preto, že mail
so SPAMom zvyčajne nebýva taký veľký a kontrola veľkých mailov trvá
pochopiteľne dlhšie.
Uložte súbor ".procmailrc
" a skúste si poslať mail. Ideálne je,
ak si pošlete jeden normálny mail a potom súbor
"sample-spam.txt
", aby ste sa presvedčili, že v poli "Subject:"
je zreteľné označenie "****SPAM****
"
Poznámka: pri prvom spustení programu SpamAssassin
(čiže
pri doručení prvého mailu) sa používateľovi vytvorí adresár
".spamassassin
" v domácom adresári s konfiguračnými súbormi,
ktoré si môže upraviť podľa svojho gusta. Ja osobne som ich upravovať zatiaľ
nepotreboval.
Poznámka: ak všetko funguje, môžete vytvoriť globálne pravidlo, ktoré
urobí presne to isté, ako sme si ukázali, ale pre všetkých používateľov na
serveri. Postupujte podobne, ale použite/vytvorte súbor
"/etc/procmailrc
". Nezostáva mi nič iné, ako vás dôrazne
varovať, aby ste k tomuto kroku pristúpili až náležitom otestovaní!
Pamätajte tiež na to, že toto riešenie je pomerne neefektívne, pretože pre
každý mail a každého používateľa sa spúšťa nový proces, ktorý spotrebuje
istú časť pamäte. Navyše, toto riešenie neumožňuje použiť "SpamAssassin" na
mailových serveroch, ktoré nedoručujú poštu do lokálnach schránok, ale ju
len preposielajú napr. medzi dvomi sieťami (relay).
Ja používam "/etc/procmailrc
" v takejto
podobe:
DROPPRIVS=yes MAILDIR=$HOME/mail :0fw: /var/tmp/spamassassin.$$.lock * < 256000 | /usr/bin/spamassassin
resp.
DROPPRIVS=yes MAILDIR=$HOME/mail :0fw: /var/tmp/spamassassin.$$.lock * < 256000 | /usr/local/bin/spamassassin
Uvedené pravidlo "| /usr/bin/spamassassin
"
".procmailrc
" resp. "/etc/procmailrc
" zabezpečuje
iba označovanie mailov, ako som spomínal v úvode. Ak chcete s označenou
poštou urobiť niečo iné, musíte si naštudovať manuál k programu
"procmail
" ("man procmailrc
", "man
procmailex
"), prečítať súbor
"procmail.example
" v adresári so zdrojovými kódmi programu
SpamAssassin
, alebo - počkať, kým sa v tejto príručke stihnem
vyjadriť aj k samotnému "procmailu
".
Upozornenie: v globálnom konfiguračnom súbore
"/etc/procmailrc
" sa musí nachádzať direktíva
"DROPPRIVS=yes
"! Pomocou nej zaručíte, že všetky príkazy
spúšťané z "procmail
" sa spustia s právami používateľa, ktorému
sa doručuje mail. Bez tejto direktívy sa SpamAssassin
nespustí.
Program "maildrop
" pri doručovaní pošty kontroluje, či existuje
súbor ".mailfilter
" v domácom adresári používateľa, ktorému
doručuje poštu. V prípade, že ho nájde, riadi sa pravidlami uvedenými
v tomto súbore.
Pomocou textového editora otvorte (alebo vytvorte) súbor
".mailfilter
" vo Vašom domácom adresári a na jeho
začiatok (aby sa toto pravidlo vykonalo ako prvé) vložte riadok:
xfilter "/usr/bin/spamassassin"
Samozrejme, musíte uviesť platnú cestu k programu "spamassassin
". Teraz
uložte súbor ".mailfilter
" a skúste si poslať mailom súbory
"sample-spam.txt
" a "sample-nonspam.txt
" z distribúcie programu
"SpamAssassin
" (alebo akékoľvek maily). Ak sa Vám doručia, filtrovanie
funguje, navyše by mail so SPAMom mal byť označený.
Poznámka: pri prvom spustení programu SpamAssassin
(čiže
pri doručení prvého mailu) sa používateľovi vytvorí adresár
".spamassassin
" v domácom adresári s konfiguračnými súbormi,
ktoré si môže upraviť podľa svojho gusta. Ja osobne som ich upravovať zatiaľ
nepotreboval.
Program "SpamAssassin
" je napísaný v Perle, v čom spočíva veľká
výhoda
- netreba ho kompilovať, je ľahko prenosný a relatívne bezpečný, pretože
v Perle je bezpečnosť prideľovania voľnej pamäte riešená lepšie ako
v jazyku C. Na druhej strane, Perl je interpretovaný kód, resp. pri jeho
spustení sa vykonáva jeho preklad, čo spôsobuje isté spomalenie. Ak
sa filtrovanie mailov vykonáva na serveri, ktorý prijíma veľa pošty, bude
sa interpreter Perlu spúšťať v podstate stále (zakaždým, keď sa má mail
doručiť do mailboxu).
Je jasné, že výkon takéhoto riešenia nie je celkom optimálny. Pre malý počet
používateľov, ktorí používajú "SpamAssassin
" to nepredstavuje
nejaký závažný problém, ale v prípade väčšej organizácie, kde sa maily
filtrujú globálne, sa to už na výkone servera prejaví.
Riešenie je však (našťastie) jednoduché. Program "SpamAssassin
"
obsahuje totiž okrem perlovského skriptu aj klient-server verziu. Démon
"spamd
" je napísaný v Perle, spúšťa sa však iba raz, pri štarte
systému (v závislosti od verzie sa vytvára nový proces pre každý filtrovaný
mail (verzie 2.x) alebo sa používa iba fixný počet procesov (verzie
3.x)). Démon počúva na localhoste na porte 783 (možno ho zmeniť)
a štandardne beží s právami roota, aby mohol zmeniť identitu na
používateľa, ktorému doručuje poštu (aj toto je možné zmeniť, ale treba si
preštudovať manuál). Klientský program "spamc
" je
napísaný v jazyku C a pri jeho spúšťaní teda nevzniká oneskorenie ako pri
perlovskej verzii.
V praxi teda stačí oproti predchádzajúcej inštalácii uskutočniť tieto zmeny:
spamd
" (najčastejšie
"/usr/bin/spamd
" - pri manuálnej inštalácii treba použiť
priložený init-skript v podadresári "spamd
" a spúšťať démona
z adresára podľa inštalácie, napr. "/usr/local/bin/spamd
") - je ich
viacero pre rôzne verzie Unixu/Linuxu. Skontrolujte cesty k programu
"spamd
" v skripte a nezabudnite vytvoriť symbolické linky
z adresárov pre jednotlivé runlevely! Ak použijete balíčkovú distribúciu,
štartovací skript je už vytvorený; na Debiane nezabudnite skontrolovať
súbor "/etc/default/spamassassin
" a nastaviť potrebné
parametre, najmä však parameter "ENABLE=1
". Bez tohto
parametra sa SpamAssassin
pri štarte servera nespustí./usr/local/bin/spamassassin
"
v súbore ".procmailrc
" resp. ".mailfilter
"
volaním programu "/usr/bin/spamc
"spamd
" pomocou init-skriptu:
"/etc/init.d/spamd start
"(automaticky sa bude spúšťať
po štarte servera)Nasleduje opätovné testovanie funkčnosti. Ak Vám doručovanie mailov funguje, všetko je v poriadku.
Poznámka: možno Vás napadla otázka: "čo sa stane s mailami v prípade, že démon na kontrolu SPAMu spadne?". Odpoveď je našťastie jednoduchá a podarilo sa mi ju aj otestovať. Ak sa programu "spamc" nepodarí pripojiť na démona, jednoducho sa mail doručí bez filtrovania. Pošta sa teda nestratí.
Nech je program "SpamAssassin
" akokoľvek perfektný, jeho
nastavenie nemusí vyhovovať každému. Niekto môže požadovať citlivejšie,
iný benevolentnejšie detekovanie SPAMu. Niekto dokonca bude chcieť
upraviť skóre pre jednotlivé testy. Pre toto a všeličo iné existuje možnosť,
ako nastavenie programu "SpamAssassin
" upraviť.
SPAM je zlý. Bežné filtrovanie naň už nezaberá. Spoliehať sa na frázy je už len čiastočné riešenie. Preto múdri ľudia vymysleli služby, ktoré zbierajú SPAM a ak sa ich spýtate, povedia vám, či práve doručovaný mail majú vo svojej databáze - a teda, či je to SPAM.
Je to, pravdaže, trochu zjednodušené. Ale program SpamAssassin
vie
komunikovať s niekoľkými distribuovanými službami na kontrolu SPAMu a my si
ukážeme dve: Razor a DCC
(Distributed Checksum Clearinghouse). Obe fungujú na podobnom princípe:
ak ich chcete používať, SpamAssassin vytvorí z každého kontrolovaného mailu
kontrolný súčet a odošle ho na kontrolu na niektorý zo serverov služieb
Razor alebo DCC. Výsledkom je označenie mailu za SPAM, prípadne určenie
pravdepodobnosti, že ide o SPAM.
DCC a Razor nainštalujeme na Debiane jednoducho:
apt-get install dcc-client razor
Spustite program: cdcc info
.
Výstup by mal vyzerať asi takto:
# 03/19/07 23:21:44 CET /var/lib/dcc/map # Re-resolve names after 00:31:47 # 117.48 ms threshold, 160.75 ms average 12 total, 10 working servers IPv6 off dcc1.dcc-servers.net,- RTT+0 ms anon # 194.228.41.13,- CTc-dcc2 ID 1031 # 83% of 23 requests ok 2032.06+0 ms RTT 101 ms queue wait # 208.201.249.232,- sonic.net ID 1156 # 100% of 4 requests ok 330.58+0 ms RTT 101 ms queue wait # 208.201.249.233,- sonic.net ID 1117 # 100% of 4 requests ok 327.76+0 ms RTT 104 ms queue wait dcc2.dcc-servers.net,- RTT+0 ms anon ...
Pokiaľ DCC nenájde žiaden dostupný server, pravdepodobne musíte na svojom firewalli povoliť prichádzajúce pakety zo zdrojového UDP portu 6277, napríklad pomocou pravidla v nasledujúcom tvare:
iptables -A INPUT -p udp --sport 6277 --dport 1024:65535 -j ACCEPT
Upravte konfiguračný súbor "/etc/dcc/map.txt
" takto:
# public DCC servers dcc1.dcc-servers.net dcc2.dcc-servers.net dcc3.dcc-servers.net dcc4.dcc-servers.net dcc5.dcc-servers.net # local DCC server ###127.0.0.1 RTT-1000 ms 32768 2362976730y283 # local greylist server ###127.0.0.1 GREYLIST 32768 2362976730y283
Reštartujte službu DCC pomocou "/etc/init.d/dcc-client
restart
". Dá sa fungovať aj bez démona - v takom prípade SpamAssassin
použije program "dcc-proc
".
mkdir /etc/spamassassin/.razor razor-admin -home=/etc/spamassassin/.razor -register Register successful. Identity stored in /etc/spamassassin/.razor/identity-rgrU897SVz razor-admin -home=/etc/spamassassin/.razor -create razor-admin -home=/etc/spamassassin/.razor -discoverVytvorte súbor "
/etc/mail/spamassassin/.razor/razor-agent.conf
"
s obsahom:
razorhome = /etc/mail/spamassassin/.razor/
Globálny konfiguračný súbor
pre "SpamAssassin
" je umiestnený
v "/etc/mail/spamassassin/local.cf
" (vlastnoručne
inštalovaná verzia), prípadne
v "/etc/spamassassin/local.cf
" (balíčková verzia pre Debian) a môže obsahovať napríklad tieto
nastavenia:
# prepisat Subject: na "****SPAM**** (povodny subject)" rewrite_subject 1 # doverovat mailom odoslanym z IP adries 10.x.x.x a 127.x.x.x (moja lokalna # siet) trusted_networks 10. trusted_networks 127. # vkladat originalny SPAM do samostatnej prilohy (starsie verzie to nerobili # a napr. HTML maily neboli uz potom citatelne) report_safe 1 # zobrazovat skore v subjecte mailu (_HITS_) rewrite_header Subject *****SPAM***** [_HITS_] # konfiguracia pre razor a dcc razor_config /etc/spamassassin/.razor/razor-agent.conf dcc_dccifd_path /var/lib/dcc/dccifd dcc_path /usr/bin/dccproc dcc_home /usr use_dcc 1 use_pyzor 0 # ak mame DNS, mozeme nechat SpamAssassin vykonavat viacero testov navyse dns_available yes # !!! prisposobene !!! hodnoty pre Bayesovske fitrovanie. V zasade zvysujem # vahu vo vyslednom skore pre samouciace sa mechanizmy. # pouzite na vlastne nebezpecie score BAYES_60 0 0 3.997 3.101 score BAYES_80 0 0 7.300 6.862 score BAYES_95 0 0 7.027 6.002 score BAYES_99 0 0 8.200 6.008
Ak existuje súbor "/etc/spamassassin/v310.pre
", upravte ho takto
(odkomentujte riadky, ostatné môžete nechať v pôvodnom stave):
loadplugin Mail::SpamAssassin::Plugin::DCC loadplugin Mail::SpamAssassin::Plugin::Razor2 loadplugin Mail::SpamAssassin::Plugin::AntiVirus
Ďalšie možnosti nájdete aj v manuálovej stránke:
perldoc Mail::SpamAssassin::Conf
Môžete využiť aj generátor konfigurácie pre SpamAssassin
Po každej zmene konfiguračného súboru je potrebné reštartovať démona
SpamAssassin pomocou
/etc/init.d/spamassassin restart
resp. /etc/init.d/spamd restart
.
Program "SpamAssassin
" využíva pri svojej činnosti tzv.
Bayesovské filtre, ktoré majú za úlohu priebežne vyhodnocovať všetky maily,
ktoré sa dostanú do Vašej schránky. Pri kontrole mailov vytvára
"SpamAssassin
" databázu, do ktorej zapisuje rôzne údaje
- napríklad pre odosielateľov, od ktorých často dostávate poštu, automaticky
predpokladá, že mail s vysokou pravdepodobnosťou nie je SPAM. Mimochodom,
rovnaké samoučiace sa mechanizmy dokáže používať aj Mozilla od verzie 1.3 a vyššej.
Bez toho, aby som vysvetľoval, ako funguje (priznám sa, že sám to zatiaľ nechápem) Vám prezradím, na čo je táto sranda dobrá.
V praxi sa Vám isto stane, že okrem detekovaných SPAMov sa vo Vašich
schránkach budú aj naďalej objavovať aj maily, ktoré
"SpamAssassin
" nezachytí, hoci by mal. Takéto maily je vhodné
uchovávať v jednom samostatnom priečinku a z času na čas na týchto mailoch
spustiť program "sa-learn
". Tento program slúži na "učenie sa"
"SpamAssassina
", konkrétne na učenie sa Bayesovských filtrov.
Podľa rôznych materiálov sa odporúča vytrénovať filtre na vzorke približne
1000 SPAMov a 1000 normálnych mailov. Po tomto učení sa sú Bayesovské filtre
schopné zachytiť SPAM s vysokou účinnosťou.
Osobne som nemal poruke 1000 SPAMov, na ktorých by som program trénoval, preto som používal iba priebežné trénovanie a dnes (po niekoľkých mesiacoch) už bežne dostávam maily, ktoré Bayes označí za "SPAM s 90%-tnou pravdepodobnosťou", za čo v konečnom dôsledku získa mail v celkovom skóre minimálne 3 body.
Program "sa-learn
" sa používa veľmi
jednoducho. Stačí zadať jeden z parametrov "--spam
" (učíme sa
zo SPAMu) alebo "--ham
" (učíme sa z ne-SPAMovej pošty), ďalej
formát poštovej schránky (súbor, adresár) a jej meno. V jednom učiacom cykle
môžete zadať aj viacero schránok (súborov, adresárov).
Ak chcete trénovať "SpamAssassina
" pravidelne, najlepšie je vytvoriť si na
tento účel samostatný priečinok, do ktorého budete odhadzovať iba SPAM.
Všeobecná syntax príkazu "sa-learn
" je nasledovná:
sa-learn [--mbox|--file|--dir] meno1 meno2 .. menoN
Formát poštovej schránky môžete vybrať z:
--mbox
: klasický spôsob uloženia mailov v jedinom súbore, napr.
"/var/spool/mail/vix
" alebo "~/mail/SPAM
"--file
: súbor, ktorý obsahuje presne jeden mail (napr.
ak uložíte mail z Vášho mailového klienta)--dir
: adresár vo formáte "Maildir
"
(používa sa najčastejšie s mailovým serverom "qmail"). V takomto
adresári je každý mail uložený vo vlastnom súbore.Príklad 1: nauč sa zo SPAMu zo schránky ~/mail/SPAM:
sa-learn --spam --mbox ~/mail/SPAM
Príklad 2: nauč sa zo SPAMu z uloženého mailu (súbor obsahuje iba tento mail):
sa-learn --spam --file spam.txt
Príklad 3: nauč sa zo SPAMu z niekoľkých uložených mailov (každý súbor obsahuje iba jeden mail):
sa-learn --spam --file spam1.txt spam2.txt spam3.txt
Príklad 4: nauč sa zo SPAMu z adresára ~/Maildir:
sa-learn --spam --dir ~/Maildir
Príklad 4: nauč sa na dobrej pošte zo schránky /var/spool/mail/vix
sa-learn --ham --mbox /var/spool/mail/vix
Poznámka: Ak Vám po upgrade SpamAssasina prestane fungovať interná
bayesovská databáza (v systémoch logoch uvidíte hlásenia, že sa nedarí
otvoriť súbory v adresári ".spamassassin/bayes_
"), skontrolujte
v dokumentácii, či nedošlo k zmene používaného ovládača na prácu
s databázou. Stáva sa to. Napr. od verzie 2.60 bolo nutné
možnosť skonvertovať bayesovské databázy
vytvorené staršími verziami programu. Pokiaľ ste používali staršiu verziu,
upgradli ste ju a nefunguje Vám Bayes, musíte skonvertovať databázy
príkazom: sa-learn --import
. Túto konverziu je potrebné
vykonať iba raz, zato však pre každého používateľa, ktorý používa
"SpamAssassin
". Aj vo verziách 3.x sú podobné zmeny...
Maily sa nám doručujú, všetko vyzerá výborne, ale má to jednu malú chybičku: ako sa k mailom dostaneme? Ak majú používatelia konto so shellom na serveri, ktorý maily prijíma, je to úplne jednoduché, pretože na výber mailov nepotrebujú nijaké špeciálne protokoly a postupy. Nevýhodou tohto riešenia je však práve fakt, že používatelia musia mať vytvorené konto so shellom, aby mohli spúšťať mailového klienta. Ak maily prijíma a doručuje firewall, najlepším riešením je preposielanie mailov na mail server vo vnútornej sieti, na ktorom už používatelia môžu mať kontá. Vonkajší server funguje iba ako brána pre posielanie mailov. Ak takéto nastavenie nie je možné, prichádza do úvahy ešte výber mailov pomocou protokolov POP3 a IMAP z vnútornej siete.
Niekedy (napr. na školách) nie je možné zabezpečiť, aby funkciu firewallu a mailového servera vykonával samostatný a iba na to určený počítač. Je to škoda, ale tak to proste chodí. Na druhej strane, aj v takýchto prípadoch je žiadúce, aby sa používatelia vnútornej siete dostali k svojim mailom pomocou ich obľúbených e-mailových klientov zo svojich počítačov. Takže služby POP3 a IMAP predsa len budeme potrebovať. Zároveň to však znamená, že používatelia nebudú nevyhnutne potrebovať shell na serveri.
V tomto momente treba povedať, že nastavenie servera pre spúšťanie POP3
a/alebo IMAP servera je v podstate triviálne, pretože sa takmer stopercentne
používa "inetd
", v ktorom sú vhodné riadky často už aj napísané, hoci aj
zakomentované. Oveľa zložitejšie je zabezpečenie týchto služieb. Prečo?
V nasledujúcej ukážke použijeme na obmedzenie prístupu TCP wrapper
(predpokladá sa, že POP3, resp. IMAP služby sa spúšťajú
z "inetd
") Predpokladá sa, že lokálna (vnútorná) sieť má adresu
192.168.1.0/255.255.255.0.
/etc/hosts.deny
:
ALL:ALL ### koniec suboru hosts.deny
/etc/hosts.allow
:
ipop3d: 192.168.1. imapd: 192.168.1. 127.0.0.1 ### koniec suboru hosts.allow
/etc/inetd.conf
:
port typ prot. detaily user program argumenty imap stream tcp nowait.200 root /usr/sbin/tcpd /usr/sbin/imapd pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/ipop3d
Poznámka: Číslo "200" v riadku "imap" určuje počet spojení, ktoré možno uskutočniť v priebehu jednej minúty. Toto číslo je úmyselne explicitne zvýšené kvôli problémom s prihlasovaním sa na webmail (Horde/IMP). So štandardným nastavením sa Vám nepodarí prihlásiť na webmail, ak sa bude naraz prihlasovať väčšia skupina ľudí (napr. celá učebňa).
Pre aktualizáciu údajov treba reštartovať inetd zaslaním signálu HUP ("killall
-HUP inetd
") alebo spustením "/etc/init.d/inetd reload"
.
Program "stunnel
" je užitočná utilita, ktorá vám umožní používať
šifrovanie pri prenášaní údajov aj pri tých službách, ktoré normálne nijaké
šifrovanie neumožňujú. Spomenuli sme, že služby, ktoré sa používajú na výber pošty,
posielajú meno používateľa a jeho heslo v nezašifrovanom tvare. Ak aj
používate na prihlasovanie na server "ssh
", pri čítaní pošty
pomocou "pop3" alebo "imap
" ste z hľadiska bezpečnosti tam, kde
ste boli pred zavedením "ssh
".
Program "stunnel
" vytvára bezpečný kanál medzi aplikáciou
a serverom. Používa na to funkcie knižnice "openssl
". Princíp
tunelovania protokolu "pop3
", "imap
" resp.
akéhokoľvek iného protokolu, ktorý by ste chceli použiť s programami typu
"stunnel
" je takýto:
Stav pred zavedením "stunnel
": klient elektronickej pošty sa
pripája na server na port "pop3" (110) resp. "imap" (143):
+------------------+ (login, password) +------------------+ | | -----------------------> | | | Klient el. pošty | <---------------------- | Server pop3/imap | | | (e-mailové správy) | | +------------------+ +------------------+ nešifrovaný kanál (sieť)
Po zavedení "stunnel
": klient elektronickej pošty sa pripája na
port "pop3s
" (995), ktorý obsluhuje démon "stunnel
".
Komunikácia s "stunnelom
" je šifrovaná, nikto teda nemôže
zachytiť na sieti vaše heslo. "stunnel
" sa následne
lokálne pripojí na port "pop3
" a odovzdá prihlasovacie
meno a heslo používateľa. "stunnel
" vystupuje ako transparentný
prostredník medzi klientom a serverom.
+-----------------------+ (login, password) +-----------------------+ | | -----------------------> | | | Klient el. pošty | <---------------------- | STUNNEL | | | (e-mailové správy) | | +-----------------------+ +-----------------------+ šifrovaný kanál (sieť) | ^ / |(login, password) | . | | spojenie cez localhost . | | \ v (e-mailové správy) | +-----------------------+ | | | Server pop3/imap | | | +-----------------------+
Ak používate na vašej sieti klientov, ktorí nepodporujú šifrovanie
"pop3
" resp. "imap
", máte o jeden problém viac.
V takom prípade treba spustiť program "stunnel
" aj na strane
klienta, aby dáta pochádzajúce od nešifrujúceho klienta zašifroval
a komunikoval so "stunnelom
" na druhej strane - teda na serveri:
+-----------------------+ | | | Klient el. pošty | | | +-----------------------+ |(login, password) ^ | | \ | | . | | . spojenie cez localhost v (e-mailové správy) | / +-----------------------+ (login, password) +-----------------------+ | | -----------------------> | | | STUNNEL | <---------------------- | STUNNEL | | | (e-mailové správy) | | +-----------------------+ +-----------------------+ | ^ / |(login, password) | spojenie cez localhost . | | . | | \ v (e-mailové správy) | +-----------------------+ | | | Server pop3/imap | | | +-----------------------+
Tento problém s väčšinou dostupných a používaných klientov našťastie odpadá a stačí vytvoriť jednu "stranu" tunela - na serveri, čo je presne prípad, ktorý sme si opísali vyššie.
Ak teda používate na vašej sieti iba klientov, ktorí sa vedia pripájať pomocou
šifrovaného spojenia (Mozilla, Microsoft Outlook, Microsoft Outlook Express,
Eudora a určite aj ďalšie), môžete pripojenie na "pop3" a "imap
"
neskôr pomocou firewallu zo siete celkom zakázať, pretože
"stunnel
" sa na tieto porty bude pripájať výlučne lokálne
(pomocou "localhost
" resp. "127.0.0.1
").
Existujú dva spôsoby, ako nastaviť "stunnel
": aby sa spúšťal ako samostatný
démon pre obsluhu každej tunelovanej služby, alebo aby sa spúšťal z démona
"inetd
". Pre konkrétnu implementáciu sa rozhodnite podľa toho, ako často
budete obsluhu služby vyžadovať (prečítajte si časť "Inetd versus samostatné služby").
V prípade, že budete "stunnel
" používať vo forme samostatného démona, treba
zabezpečiť jeho spustenie po štarte servera napríklad prostredníctvom skriptu
v "/etc/init.d
". Nasledujúce riadky platia pre distribúciu
"Debian", ktorá má upravený štartovací skript:
Riadiaci skript "stunnel
" sa nachádza v "/etc/init.d/stunnel
". Po spustení
načíta konfiguráciu zo súboru "/etc/stunnel.conf
", čím uľahčuje nastavenie.
Dôležité direktívy konfiguračného súboru:
#!/bin/bash # stunnel configuration file # by Steve Haslam # Level of verification to use [-v] VERIFY 1 # Certificate for server mode [-p] # cesta k certifikatu SERVERCERT /etc/ssl/certs/stunnel.pem # Trusted certs directory for VERIFY 3 [-a] #TRUSTEDCERTS /etc/ssl/certs # Tunnel definitions (daemon mode) # definicie tunelov, ak bezi stunnel ako demon #TUNNEL imaps /usr/sbin/imapd -- imapd # tunel pre sifrovanie imap pomocou imaps; tu: nepouzivane TUNNEL pop3s /usr/sbin/solid-pop3d -- solid-pop3d # tunel pre sifrovanie pop3 pomocou pop3s
Ak nemáte distribúciu "Debian" alebo sa vám z mne neznámeho dôvodu pri inštalovaní
nevytvoril konfiguračný súbor "/etc/stunnel.conf
", nezúfajte. V skutočnosti
stačí poznať niekoľko parametrov a môžete zariadiť spúšťanie "stunnel-a
" sami.
"stunnel
", ktorý zabezpečuje tunelovanie protokolu "pop3
" na obslužného démona
"solid-pop3d
" vyzerá takto:
/usr/sbin/stunnel -v 1 -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/spop3d -- solid-pop3d
(príkaz treba zadať v jednom riadku!)
Parametre:
-v číslo
: verifikácia klienta pomocou certifikátu. Hodnota "1
": iba v prípade,
že existuje certifikát klienta. V prípade problémov skúste parameter "-v
"
úplne odstrániť.-p cesta
: cesta k súboru s PEM certifikátom servera-l program -- meno
: cesta k obslužnému démonovi služby (spustí ho
"stunnel
", keď príde požiadavka). Za "--
" uveďte meno programu, na základe
tohto mena môžete neskôr vytvoriť pravidlá TCP
wrappera-d port
: číslo alebo meno portu, na ktorom má "stunnel
" počúvať
Príklad: v prípade, že používate na obsluhu "pop3
" iného démona, napr.
"ipop3d
":
/usr/sbin/stunnel -v 1 -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/ipop3d -- ipop3d
stunnel
" z "inetd
"
Princíp spúšťania je úplne rovnaký, nebude však editovať štartovací skript,
ale súbor "/etc/inetd.conf
". Ukážka, tentokrát pre tunelovanie
"imap
":
Pred zmenou:
imap stream tcp nowait.200 root /usr/sbin/tcpd /usr/sbin/imapd
Po zmene:
imap stream tcp nowait.200 root /usr/sbin/tcpd /usr/sbin/stunnel -v 1 -p /etc/ssl/certs/stunnel.pem -d imaps -l /usr/sbin/imapd -- imapd
(príkaz treba zadať v jednom riadku)
Pre používanie démona "stunnel
" treba ešte vygenerovať certifikát
pre server (bez neho by vám napríklad "Outlook Express" škaredo nadával vždy
pri sťahovaní pošty). Program je našťastie vybavený "jednoriadkovým helpom",
ktorý sa vypíše priamo po inštalácii balíčka:
To build a new pem, execute the following OpenSSL command: openssl req -new -x509 -days 365 -nodes \ -config /usr/share/doc/stunnel-3.20/stunnel.cnf \ -out /etc/ssl/certs/stunnel.pem -keyout /etc/ssl/certs/stunnel.pem
Takže tieto tri riadky treba skopírovať do príkazového riadku, spustiť
a odpovedať na otázky. Certifikát sa sám sebou podpíše a uloží do súboru
"/etc/ssl/certs/stunnel.pem
". Platnosť certifikátu je jeden rok
(365 dní).
Pozor! Ako ste si všimli, cesta k "stunnel.cnf
" závisí od
čísla verzie, preto použíte výpis vášho konkrétneho balíčka.
Konfigurácia klienta je väčšinou jednoduchá, len treba nájsť tie správne
zaškrtávacie položky. Ukážka pre "Outlook Express
", ktorý jediný
som mal pre screenshoty k dispozícii:
Krok 1: vyberte menu "Nástroje" a "Kontá":
Krok 2: Pre nastavované konto elektronickej pošty vyberte "Vlastnosti":
Krok 3: Zaškrtnite možnosť "Tento server vyžaduje bezpečné spojenie (SSL)" pre Prichádzajúcu poštu!! Číslo portu sa zmení zo "110" (pop3) na "995" (pop3s), resp. "143" na "993" (imaps):
Obe metódy (obmedzovanie prístupu a šifrovanie) môžete aj kombinovať. V nasledujúcom príklade platí obmedzenie služieb POP3 a IMAP z vnútornej siete a službu POP3 so šifrovaním môže využívať každý počítač v Internete, ktorý nefalšuje svoj DNS záznam:
/etc/hosts.allow
:
ipop3d: 192.168.1. imapd: 192.168.1. 127.0.0.1 solid-pop3d: ALL EXCEPT PARANOID ### koniec suboru hosts.allow