Príručka systémového administrátora, 1.9.4

6. Služby mailového servera[UPDATE]

Posledná zmena: 6/4/2007

6.1 Cesta mailu od odosielateľa k príjemcovi

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:

  1. mail je určený príjemcovi priamo na tom istom serveri alebo príjemcovi, ktorého doménu obsluhuje mailový server odosielateľa. Mail sa nebude preposielať do Internetu, ale spracuje sa lokálne a uloží do mailboxu.
  2. mailový server odosielateľa zistí z DNS "MX" záznam pre adresu príjemcu (bez mena používateľa a zavináča, teda "example.com") - "MX" záznam určuje meno servera, ktorý prijíma poštu pre danú doménu. Ak "MX" záznam neexistuje, pokúsi sa získať "A" záznam pre adresu príjemcu. Skontaktuje sa s týmto serverom a odovzdá mu mail.
  3. mailový server odosielateľa nedokáže zistiť, komu má doručiť mail (nenastal žiaden z vyššie uvedených prípadov) a podľa toho, aká chyba nastala, sa pokúsi o doručenie neskôr (dočasná chyba, napr. nedostatok voľného miesta na disku alebo chyba pri kontaktovaní DNS servera), alebo vráti mail odosielateľovi (permanentná chyba, napr. cieľový mailový server nepozná príjemcu alebo má prekročenú kvótu).
+-------------------+  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).

6.2 SMTP server "Postfix"

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

6.2.0 Základy SMTP protokolu

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

6.2.1 Filozofia servera "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ú.

6.2.2 Obslužné démony

"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):

6.2.3 Adresáre a súbory

Pri typickej inštalácii "postfixu" sa používajú tieto adresáre a súbory (niektoré možno zmeniť v konfigurácii):

6.2.4 Obsluha Postfixu

S Postfixom môžete vykonávať tieto bežné operácie:

6.2.4.1 Štartovacie skripty

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").

6.2.4.2 Vytváranie databáz pre Postfix

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:

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.

6.2.5 Konfigurácia

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.

6.2.5.1 Syntax konfiguračného súboru "/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:

  1. direktíva má tvar "parameter = hodnota".
  2. ak je hodnotou zoznam, položky sa oddeľujú čiarkou alebo medzerou.
  3. riadky začínajúce medzerami znamenajú, že sú pokračovaním predchádzajúceho riadku. Takto môžete prehľadne zapísať dlhé riadky, typicky s viacerými položkami zoznamu.
  4. hodnoty niektorých direktív môžu obsahovať referenciu na iné premenné pomocou $premenná - v takom prípade sa namiesto $premenná použije jej hodnota.
  5. hodnotou premennej môže byť meno súboru (absolútna cesta) v tvare "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.
  6. hodnotou premennej môže byť databáza (absolútna cesta) v tvare "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.
  7. hodnotou premennej môže byť súbor s regulárnymi výrazmi (absolútna cesta) v tvare "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"

6.2.5.2 Postup pri nastavovaní

Najprv si musíte zodpovedať na nasledujúce otázky:

6.2.5.2.1 Základné nastavenia Vášho mailového servera

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á).

myhostname = server.example.com
určuje plné meno servera. Štandardne sa použije meno servera získané z Vášho operačného systému (príkaz hostname)
mydomain = example.com
určuje doménové meno servera. Štandardne je to hodnota premennej $myhostname bez prvej zložky (mena serveru)
myorigin = $myhostname
určuje meno servera v odchádzajúcej pošte z tohto servera. Toto meno sa pripája za meno používateľa, ak nebola v adrese odosielateľa špecifikovaná doména. Štandardne je to hodnota premennej $myhostname.
inet_interfaces = all
zoznam adries (nie eth0 a pod!) sieťových rozhraní, na ktorých sa prijíma pošta. Štandardne: na všetkých.
append_at_myorigin = yes
nahradenie adresy typu "user" adresou "user@$mydomain". Toto upraví adresy odosielateľov v mailoch odchádzajúcich z Vášho mailového servera tak, aby sa na ne dalo odpovedať. Toto by však mali robiť mailové programy, ktoré bežia na serveri (napr. ak posielate poštu priamo zo servera).
append_dot_mydomain = yes
nahradenie adresy typu "user@server" adresou "user@server.$mydomain". Toto by malo prepísať adresy odosielateľov v mailoch prechádzajúcich z Vášho intranetu do Internetu tak, aby sa na ne dalo odpovedať. Pridávanie domény by sa však malo robiť iba v nevyhnutných prípadoch, každý mailový klient v sieti má mať v adresách doménu už nastavenú!
masquerade_domains = $mydomain
zoznam domén, z ktorých má byť pri posielaní mailov cez Váš server odstránená subdoménová časť z hlavičiek (napr. ak je mydomain = "sub.example.com", vznikne "example.com"). Ak použijete tento parameter, musíte samozrejme zabezpečiť príjem/preposlanie mailov aj pre používateľov, ktorým ste takto skrátili adresy.
6.2.5.2.2 Ktoré domény rozpoznáva Váš mailový server?

Nasledujúce nastavenia určujú domény, ktoré Postfix bude rozpoznávať pri prijímaní a relayovaní pošty.

mydestination = $myhostname, $mydomain, mail.$mydomain, localhost
doménové adresy, ktoré Postfix považuje za lokálne a pre ktoré prijíma poštu. Ak nesprávne nastavíte túto premennú, Váš mailový server nebude prijímať poštu.
relay_domains = $mydestination
doménové adresy, pre ktoré Postfix umožňuje relay (príjem pošty na ďalšie spracovanie, okrem príjmu na lokálny server napr. preposielanie pošty určenej serveru, pre ktorý je Postfix záložným serverom a pod.). Štandardná hodnota tejto premennej je rovnaká ako mydestination.
Pravidlá relayu v Postfixe:
  1. Postfix povoľuje relay pre klientov, ktorých IP adresa vyhovuje $mynetworks
  2. Postfix povoľuje relay pre domény z premennej $relay_domains
  3. Postfix povoľuje posielať maily pre všetkých ostatných klientov NA adresy uvedené v $relay_domains a ich subdomény
  4. Postfix prijíma maily pre adresy, ktoré vyhovujú premennej $inet_interfaces
  5. Postfix prijíma maily pre adresy v $mydestination
  6. Postfix prijíma maily pre adresy uvedené v $virtual_maps

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.
6.2.5.2.3 Pre aké domény je Váš mailový server prostredníkom a preposiela ich na ďalšie mailové servery (napr. vo vnútornej sieti)?
transport_maps = hash:/etc/postfix/transport
určenie databázy s popisom transportných máp
/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.

6.2.5.2.4 Ako odosiela Váš mailový server poštu? Smeruje ju na mailový server Vášho poskytovateľa, alebo ju odosiela sám?

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

relayhost = upstream.example.com
adresa servera, ktorému Postfix odovzdáva všetku odchádzajúcu poštu, ktorú nevie doručiť pomocou mapy "transport". Typicky môže ísť o mailový server poskytovateľa Vášho pripojenia k Internetu. Ak tento parameter chýba alebo je jeho hodnota prázdna (default), Postfix doručuje odchádzajúcu poštu sám.
6.2.5.2.5 Aké počítače sa môžu pripájať na Váš mailový server a využívať službu SMTP?
mynetworks = 10.0.0.0/24, 127.0.0.0/8
adresy klientských počítačov, ktoré môžu pomocou Postfixu odosielať poštu (pomocou SMTP). Ak nesprávne nastavíte túto premennú, Postfix neumožní klientom posielať poštu (odmietne pripojenie).
6.2.5.2.6 Aliasy a virtuálne adresy (domény)

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.

alias_maps = hash:/etc/aliases
alias_maps = dbm:/etc/aliases
určuje umiestnenie databázy aliasov. Databáza typu "hash" má príponu ".db", databáza typu "dbm" má príponu ".pag" a ".dir"
alias_database = hash:/etc/aliases
alias_database = dbm:/etc/aliases
určuje umiestnenie databázy aliasov, ktorá sa vytvorí po spustení programu "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ôš).

virtual_maps = hash:/etc/postfix/virtual
určuje umiestnenie databázy so zoznamom virtuálnych domén
/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:

  1. Doména "virtualexample.com" je určená na prijatie mailu pre akéhokoľvek používateľa na "@virtualexample.com" (Postfix nebude vracať poštu pre neexistujúcich používateľov) a všetky tieto maily budú doručené používateľovi "somebody@example.com".
  2. Doména "virtualexample2.com" umožňuje výhradne príjem na adresu "someone@virtualexample2.com" a všetky takéto maily preposiela na adresu "someoneelse@example3.com". Presne takto mám urobenú aj svoju doménu "deja-vix.sk".
  3. Doména "virtualexample3.com" presmeruje všetku poštu pre akéhokoľvek používateľa domény "@virtualexample3.com" na používateľa "ja@virtualexample3.com". Z tejto adresy sa potom dá vyberať ako doménový kôš pomocou protokolov POP3 a IMAP a triediť pre viacerých používateľov napr. pomocou programu "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:

luser_relay = username
luser_relay = username@example3.com
určuje meno používateľa alebo e-mailovú adresu, na ktorú sa doručuje pošta pre neexistujúcich používateľov. To Vám umožní odchytávať poštu napr. pre "cokolvek@example.com" (ak je "example.com" Vaša doména), aj keď neexistuje používateľ ani alias "cokolvek".

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.

6.2.5.2.7 "Pekné adresy" v tvare Meno.Priezvisko

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.

canonical_maps = hash:/etc/postfix/canonical
určuje umiestnenie databázy so zoznamom kanonických mien a ich transformácií
/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.

6.2.5.2.8 Chcete nastaviť obmedzenia na príjem a posielanie pošty? Tieto Vám pomôžu zbaviť sa časti SPAMu.
local_recipient_maps = $alias_maps proxy:unix:passwd.byname
local_recipient_maps = $alias_maps unix:passwd.byname
umožní odmietať prijímanie pošty pre používateľov, ktorí neexistujú na Vašom serveri ešte počas prijímania pošty (pošta sa vôbec neprijme, ani dočasne, a tak sa neskôr nebude generovať ďalší mail o nemožnosti doručenia pošty). Táto direktíva určuje tabuľku používateľov (štandardne je to samozrejme súbor "/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.

disable_vrfy_command = yes
zakáže príkaz SMTP protokolu "VRFY" na zisťovanie existencie mailovej schránky. Klient (alebo hackerský/spamerský nástroj) na druhej strane spojenia musí uskutočniť normálny pokus o odoslanie mailu.
allow_untrusted_routing = no
zakáže smerovanie pošty zadané odosielateľom (odosielateľ môže určiť, cez aký server sa bude posielať pošta). Toto zastavuje niektoré SPAMy.
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl
obmedzenia na adresy klientských počítačov, ktoré môžu využiť služby Vášho SMTP servera:
permit_mynetworks
povolí pripojenie z IP adries určených premennou $mynetworks. Ak uvádzate toto pravidlo, uveďte ho ako prvé!
reject_unknown_client
zakáže pripojenie v prípade, že klient nemá v DNS reverzný záznam. Toto je síce veľmi vhodné na odmietanie veľkého množstva vírusov (často sa posielajú z počítačov, ktoré nemajú reverzný záznam), ale zároveň spoľahlivo odmietnete aj množstvo regulérnej pošty zo serverov, ktoré nemajú reverzný záznam nastavený alebo ktoré ho nemajú nastavený správne. Používajte opatrne!
reject_rbl_client rbl_server
reject_rbl_client relays.ordb.org, reject_rbl_client dnsbl.njabl.org, reject_rbl_client sbl-xbl.spamhaus.org
zakáže pripojenie v prípade, že RBL server identifikoval adresu klienta, teda ak ide o známy zdroj SPAMu, odosielateľa vírusov alebo porušovateľa štandardov. Pomocou RBL serverov je možné zachytiť určité množstvo SPAMu ešte pred fyzickým prijatím na server. Zoznam použiteľných RBL serverov nájdete tu.
check_client_access typdb:databaza
check_client_access hash:/etc/postfix/client_access
skontroluje adresu klienta v databáze (súbore) daného typu (najčastejšie "hash" alebo "dbm") a zachová sa podľa pravidiel v nej. Najčastejšie pravidlo je "REJECT", teda odmietnutie pošty. V novších verziách Postfixu môžete pridať aj text, ktorý sa zobrazí odosielateľovi ako dôvod odmietnutia pošty. (Mne to teda na Debiane Woody so štandardným Postfixom ešte nešlo, musel som použiť konvenciu "550 Text") Ďalšie štandardné pravidlo je "OK", teda prijatie pošty.
/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
reject_maps_rbl
zablokuje prístup v prípade, že je adresa pozitívne identifikovaná zoznamom RBL.
reject
zakáže prístup. Používajte na konci zoznamu pravidiel.
permit
povolí prístup. Používajte na konci zoznamu pravidiel.
smtpd_helo_required = yes
klient musí použiť SMTP príkaz "HELO" (čiastočne zabráni príjmu SPAMu, ale aj normálnych mailov od chybných mailových klientov, ktoré príkaz "HELO" neodosielajú)
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_maps_rbl
obmedzenia na syntax SMTP príkazu "HELO". Umožňuje zablokovať prijímanie mailu už počas prvej fázy SMTP spojenia, keď sa klient "predstavuje" Vášmu Postfixu. Tieto obmedzenia umožňujú odstrániť časť SPAMu, ale tiež normálnej pošty, ktorá je zasielaná neštandardným spôsobom.
permit_mynetworks
povolí pripojenie z IP adries určených premennou $mynetworks. Ak uvádzate toto pravidlo, uveďte ho ako prvé!
reject_invalid_hostname
zablokuje pripojenie v prípade, že klient použil nesprávnu syntax príkazu HELO
reject_unknown_hostname
zablokuje pripojenie v prípade, že počítač uvedený ako parameter príkazu "HELO" nemá v DNS záznam typu "A" alebo "MX". Toto umožňuje veľmi dobre filtrovať SPAM, pretože pošta sa má doručovať iba z poštových serverov a tie majú mať jeden z týchto záznamov. Bohužiaľ, existuje množstvo serverov, ktoré majú tento záznam nesprávny. Používajte opatrne.
reject_non_fqdn_hostname
zablokuje pripojenie v prípade, že počítač uvedený ako parameter príkazu "HELO" nie je uvedený v plnej doménovej forme (iba "host" namiesto "host.example.com")
reject_rbl_client rbl_server
reject_rbl_client relays.ordb.org, reject_rbl_client dnsbl.njabl.org, reject_rbl_client sbl-xbl.spamhaus.org
zakáže pripojenie v prípade, že RBL server identifikoval adresu klienta, teda ak ide o známy zdroj SPAMu, odosielateľa vírusov alebo porušovateľa štandardov. Pomocou RBL serverov je možné zachytiť určité množstvo SPAMu ešte pred fyzickým prijatím na server. Zoznam použiteľných RBL serverov nájdete tu.
check_helo_access typdb:databaza
check_helo_access hash:/etc/postfix/helo_access
skontroluje adresu uvedenú ako parameter príkazu HELO v databáze (súbore) daného typu (najčastejšie "hash" alebo "dbm") a zachová sa podľa pravidiel v nej. Najčastejšie pravidlo je "REJECT", teda odmietnutie pošty. V novších verziách Postfixu môžete pridať aj text, ktorý sa zobrazí odosielateľovi ako dôvod odmietnutia pošty. (Mne to teda na Debiane Woody so štandardným Postfixom ešte nešlo, musel som použiť konvenciu "550 Text") Ďalšie štandardné pravidlo je "OK", teda prijatie pošty.
/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
reject
zakáže prístup. Používajte na konci zoznamu pravidiel.
permit
povolí prístup. Používajte na konci zoznamu pravidiel.
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_maps_rbl, reject_non_fqdn_sender, check_sender_access hash:/etc/postfix/access
obmedzenia na obsah príkazu SMTP "MAIL FROM". V tomto príkaze uvádza klient adresu odosielateľa pošty. Toto nastavenie môže zastaviť SPAM od známych odosielateľov, pre kompletnejšiu ochranu však potrebujete špecializovaný program, napr. "SpamAssassin".
permit_mynetworks
povolí pripojenie z IP adries určených premennou $mynetworks. Ak uvádzate toto pravidlo, uveďte ho ako prvé!
reject_unknown_sender_domain
zakáže pripojenie v prípade, že doména uvedená v "MAIL FROM" nemá v DNS záznam typu "A" alebo "MX". klient nemá v DNS reverzný záznam.
reject_rbl_client rbl_server
reject_rbl_client relays.ordb.org, reject_rbl_client dnsbl.njabl.org, reject_rbl_client sbl-xbl.spamhaus.org
zakáže pripojenie v prípade, že RBL server identifikoval adresu klienta, teda ak ide o známy zdroj SPAMu, odosielateľa vírusov alebo porušovateľa štandardov. Pomocou RBL serverov je možné zachytiť určité množstvo SPAMu ešte pred fyzickým prijatím na server. Zoznam použiteľných RBL serverov nájdete tu.
check_sender_access typdb:databaza
check_sender_access hash:/etc/postfix/access
skontroluje adresu uvedenú ako parameter príkazu "MAIL FROM" v databáze (súbore) daného typu (najčastejšie "hash" alebo "dbm") a zachová sa podľa pravidiel v nej. Najčastejšie pravidlo je "REJECT", teda odmietnutie pošty. V novších verziách Postfixu môžete pridať aj text, ktorý sa zobrazí odosielateľovi ako dôvod odmietnutia pošty. (Mne to teda na Debiane Woody so štandardným Postfixom ešte nešlo, musel som použiť konvenciu "550 Text") Ďalšie štandardné pravidlo je "OK", teda prijatie pošty.
/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
reject_non_fqdn_sender
zablokuje prístup v prípade, že mailová adresa odosielateľa v "MAIL FROM" nie je uvedená v plnom doménovom tvare.
reject
zakáže prístup. Používajte na konci zoznamu pravidiel.
permit
povolí prístup. Používajte na konci zoznamu pravidiel.
smtpd_recipient_restrictions = permit_mynetworks, check_recipient_access pcre:/etc/postfix/recipient_checks, reject_unauth_destination
obmedzenia na obsah príkazu SMTP "RCPT TO". V tomto príkaze uvádza klient adresu príjemcu pošty.

Pozor! musíte uviesť aspoň jednu z hodnôt "reject", "check_relay_domains" alebo "reject_unauth_destination", inak Postfix nebude prijímať poštu!

permit_mynetworks
povolí pripojenie z IP adries určených premennou $mynetworks. Ak uvádzate toto pravidlo, uveďte ho ako prvé!
check_recipient_access typdb:databaza
check_recipient_access hash:/etc/postfix/recipient_checks
Toto obmedzenie môžete s výhodou použiť napríklad na limitovanie doručovania pošty z Internetu pre niektorých používateľov. Napríklad systémové kontá umožňujú príjem pošty, ktorá sa presmeruje na adresu správcu systému. Načo má však používateľ "nobody" prijímať poštu z Internetu? Nemusí ju prijímať vôbec!

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
permit_mx_backup
povolí prijať mail pre servery, ktoré uvádzajú Váš mailový server ako mailový server (záznam typu "MX" v DNS). Tento parameter je určený na to, aby mohol Váš Postfix fungovať ako záložný mailový server pre tieto domény.
reject_unauth_destination
check_relay_domains
povolí prijať mail:
  • na adresy určené premennými $inet_interfaces, $mydestination alebo $virtual_maps (toto je doručenie pošty NA mailový server)
  • z adries vyhovujúcich $relay_domains a ich subdomén kamkoľvek (týmto klientom poskytujete službu zasielania pošty cez Váš mailový server smerom von)
  • z ostatných klientov na adresy uvedené v $relay_domains a ich subdomény (z Internetu môžu klienti cez tento mailový server posielať posťu iba smerom dnu)
Uvedenie tohto parametra zároveň odmietne všetku ostatnú poštu. Uvádzajte toto pravidlo ako posledné v zozname "smtpd_recipient_restrictions"!

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

6.2.5.2.9 Obmedzenia spracovania mailov (veľkosti, časy)
bounce_size_limit = 50000
maximálna veľkosť chybového mailu, ktorý sa vracia v prípade chyby. Zmenšením veľkosti zamedzíte prípadnému kolovaniu vírusov medzi Vaším a iným mailovým serverom.
header_size_limit = 102400
maximálna veľkosť všetkých hlavičiek mailu
line_length_limit = 2048
maximálna dĺžka riadku v maili
message_size_limit = 4096000
maximálna veľkosť spracovaného mailu (pri prijímani či odosielaní) v bajtoch
mailbox_size_limit = 51200000
maximálna veľkosť poštovej schránky, s ktorou bude Postfix pracovať. V skutočnosti je to maximálna veľkosť akéhokoľvek súboru pri zápise.

Pozor! Tento parameter nesmie byť menší ako hodnota message_size_limit!

queue_minfree = 0
minimálna veľkosť voľného miesta na disku. Ak klesne pod Vami zadanú hodnotu, Postfix prestane prijímať poštu, aby ešte viac nevyčerpal voľné miesto. To je veľmi vhodné v prípade, že máte malý disk. Hodnota "0" túto kontrolu vypína.
delay_warning_time = 4
čas, po ktorom príde odosielateľovi upozornenie o nedoručiteľnosti mailu. Štandardne: 4 hodiny.
6.2.5.2.10 Ako sa doručujú maily do používateľských schránok? (Umiestnenie, formát a program, ktorý mail spracuje môžu byť rôzne.
mail_spool_directory = /var/mail
adresár s "klasickými" mailovými schránkami používateľov (jedna schránka je jeden súbor, pre každého používateľa jeden). Ak uvediete tento parameter, zvyšné dva nepoužívajte!
home_mailbox = Mailbox
súbor "Mailbox" v domácom adresári používateľa
home_mailbox = Maildir/
adresár "Maildir" v domácom adresári používateľa. Bezpodmienečne treba uviesť znak "/" na konci mena adresára!!! Tento spôsob uchovávania mailov používajú najmä: poštový server "qmail", IMAP/POP server "Courier IMAP" a iné.
mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME
doručovanie pošty pomocou programu "procmail"
mailbox_command = /usr/bin/maildrop -d $USER
doručovanie pošty pomocou programu "maildrop". Tento program je súčasťou balíka "Courier" a štandardne používa formát "Maildir" spomenutý v predchádzajúcich parametroch.
6.2.5.2.11 Vyžadujete antivírovú a antispamovú kontrolu?

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.

header_checks = pcre:/etc/postfix/body_checks
súbor s regulárnymi výrazmi (formát Perl), ktoré sa majú kontrolovať v hlavičkách mailov za účelom odmietania mailov. Aby toto fungovalo, musíte mať nainštalovaný aj balíček "postfix-pcre"!
header_checks = regexp:/etc/postfix/body_checks
súbor s regulárnymi výrazmi (formát regexp), ktoré sa majú kontrolovať v hlavičkách
body_checks = pcre:/etc/postfix/body_checks
súbor s regulárnymi výrazmi (formát Perl), ktoré sa majú kontrolovať v telách mailov za účelom odmietania mailov. Aby to fungovalo, musíte mať nainštalovaný aj balíček "postfix-pcre"
body_checks = regexp:/etc/postfix/body_checks
súbor s regulárnymi výrazmi (formát regexp), ktoré sa majú kontrolovať v telách

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.

6.2.5.2.12 Ostatné direktívy v konfiguračnom súbore

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!

queue_directory = /var/spool/postfix
adresár, v ktorom sa uchovávajú maily čakajúce na spracovanie (queue). Ak bežia démony Postfixu v chroote, je tento adresár pre ne koreňovým adresárom.
command_directory = /usr/sbin
umiestnenie programov dodávaných s Postfixom ("post*")
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
adresár, v ktorých sa nachádzajú démony Postfixu
mail_owner = postfix
používateľ, pod ktorým beží väčšina procesov súvisiacich s Postfixom a ktorý je vlastníkom čakajúcich mailov. Pri inštalácii vytvorte na tento účel špeciálneho použivateľa; balíčkové distribúcie vytvárajú používateľa "postfix".
default_privs = nobody
používateľ, ktorého práva sa štandardne použijú pri lokálnom doručovaní mailov.

Poznámka: Nepoužívajte používateľa "postfix" ani "root".

smtpd_banner = $myhostname ESMTP
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
text, ktorým sa ohlási Postfix, keď sa k nemu pripojí klient. Možno budete chcieť ukryť meno poštového programu a jeho verziu. (Pamätajte, že k bezpečnosti to veľmi neprispeje.)
maximal_queue_lifetime = 5
maximálny čas, počas ktorého sa Postfix pokúša doručiť mail (štandardná jednotka je deň (d), iné možnosti: hodiny (h), minúty (m), sekundy (s), týždne (w); default: 5 dní)
bounce_queue_lifetime = 5
maximálny čas, počas ktorého sa Postfix pokúša doručiť chybové hlásenie o nedoručiteľnom maili (štandardná jednotka je deň (d), iné možnosti: hodiny (h), minúty (m), sekundy (s), týždne (w); default: 5 dní)
delay_warning_time = 4
čas, po ktorom príde odosielateľovi varovanie o nedorušiteľnosti mailu (default: 4 hodiny)
queue_run_delay = 1000s
interval na vyprázdňovanie mailového frontu (default: 1000 sekúnd)

6.2.5.3 Kompletný príklad konfiguračného súboru

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

6.2.5.4 Nedoručené maily a riešenie problémov

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.

6.2.5.5 Jednoduchá "ochrana proti vírusom"

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!

6.2.5.6 Konfiguračný súbor démonov

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:

6.2.5.6.1 Chroot pre "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".

6.3 SPAM - nevyžiadaná pošta [UPDATE]

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:

  1. ako sa mi SPAM dostal do mailboxu?
  2. ako sa môžem brániť proti SPAMu?

6.3.1 Ako sa SPAM dostane do mailboxu?

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:

  1. nepoužívajte pri registrácii na stránkach svoju normálnu (napr. firemnú) e-mailovú adresu - vytvorte si jednu práve na takéto účely a raz za čas ju skontrolujte a vyprázdnite
  2. dôkladne si prečítajte, ako bude prevádzkovateľ danej stránky nakladať s vašimi údajmi - menovite e-mailovou adresou
  3. pred odoslaním registrácie sa presvedčte, že nie je vybraná voľba typu "chcem dostávať pravidelné e-maily o ..." - takáto voľba býva často štandardne predvolená!
  4. nešírte zjavné reťazové maily (kontrolujte na www.hoax.cz)
  5. neverte všetkému, čo čítate o vírusoch vo vašej pošte (kontrolujte na stránkach antivírusových dodávateľov)

6.3.2 Detekcia a filtrovanie SPAMov

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

a mnohé iné!

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

6.3.3 Inštalácia programu SpamAssassin

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:

  1. do súboru "/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 Sarge
  2. aktualizujte databázu dostupných balíčkov príkazom

    apt-get update

  3. nainštalujte SpamAssassin pomocou:

    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"):

  1. prečítajte si v súbore "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)
  2. skontrolujte, ktoré z požadovaných modulov už máte nainštalované, napr. príkazom na zobrazenie ich dokumentácie (príkaz "perldoc" nesmiete spúšťať ako root, nepôjde to):
    
        perldoc File::Spec
        perldoc HTML::Parser
        ...
        
  3. moduly, ktoré nemáte nainštalované, stiahnite zo stránky www.cpan.org napr. do adresára "/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.
  4. inštaláciu modulov (začnite tými, ktoré nezávisia na ďalších moduloch) uskutočníte príkazmi ("xxx" predstavuje adresár s rozbaleným modulom):
    
        cd /var/tmp/xxx
        perl Makefile.PL
        make
        make test
        make install
    
    ("make install" musíte vykonať ako root).
  5. ak sa inštalácia nepodarila (zobrazia sa chyby o tom, že požadované moduly neboli nájdené), skontrolujte ešte raz, ktoré moduly ste už nainštalovali a doinštalujte potrebné moduly!
  6. celkom na záver vojdite do adresára s rozbaleným archívom programu "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
    
  7. po úspešnej inštalácii môžete vymazať adresáre s rozbalenými a už nainštalovanými modulmi. Adresár so samotným programom "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!

6.3.4 Prepojenie programu SpamAssassin s programom na doručovanie pošty

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.

6.3.4.1 SpamAssassin a Procmail

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

6.3.4.2 SpamAssassin a Maildrop

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.

6.3.5 Optimalizácia výkonu programu SpamAssassin - spúšťanie démona

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:

  1. zabezpečiť spúšťanie démona "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í.
  2. zameniť volanie programu "/usr/local/bin/spamassassin" v súbore ".procmailrc" resp. ".mailfilter" volaním programu "/usr/bin/spamc"
  3. spustiť démona "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í.

6.3.6 Rastieme k dokonalosti

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

6.3.6.1 Razor, DCC

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 -discover  
  
Vytvorte súbor "/etc/mail/spamassassin/.razor/razor-agent.conf" s obsahom:
  razorhome = /etc/mail/spamassassin/.razor/
  

6.3.6.2 Konfiguračný súbor programu SpamAssassin

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.

6.3.6.3 Učenie sa na vzorkách

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:

  1. --mbox: klasický spôsob uloženia mailov v jedinom súbore, napr. "/var/spool/mail/vix" alebo "~/mail/SPAM"
  2. --file: súbor, ktorý obsahuje presne jeden mail (napr. ak uložíte mail z Vášho mailového klienta)
  3. --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...

6.4 Služby na výber mailov (POP3, IMAP)

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?

  1. obslužné démony pre výber mailov sa spúšťajú zásadne pod rootom, po autentifikácii používateľa bežia s jeho identitou. Akákoľvek snaha o preniknutie na server prostredníctvom týchto služieb (a najmä úspešná) je nebezpečná pre ďalší beh servera. Prístup na tieto služby by mal byť obmedzený, najlepšie iba z vnútornej siete. Na obmedzenie môžete použiť TCP wrapper a/alebo firewall.
  2. protokoly POP3 a IMAP pri autentifikácii nešifrujú heslo používateľa, preto je ho možné zachytiť kdekoľvek na ceste medzi klientom a serverom. Ak je povolené používanie týchto služieb iba z vnútornej siete, ktorá je implementovaná ako prepínaný Ethernet (pomocou switchov), nebezpečenstvo nie je veľké. Ak je však potrebné sprístupniť POP3 a IMAP zvonku, je nevyhnutné použiť šifrovanie!

6.4.1 Obmedzenie prístupu k službám POP3 a IMAP

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

6.4.2 Tunelovanie & šifrovanie: stunnel

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").

6.4.2.1 Konfigurácia

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").

6.4.2.1.1 Samostatne spúšťaný démon

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:

SERVERCERT cesta
cesta k certifikátu
TUNNEL port cesta -- meno_demona
určuje jednotlivé "tunely", čiže porty, na ktorých bude "stunnel" počúvať. "Cesta" určuje umiestnenie obslužného démona. "meno_demona" využijete pri obmedzení prístupu pomocou TCP wrappera.
#!/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:

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
6.4.2.1.2 Spúšťanie "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)

6.4.2.2 Vytvorenie certifikátu

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.

6.4.2.3 Konfigurácia klienta

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á":

Nastavenie Outlook Express (1)

Krok 2: Pre nastavované konto elektronickej pošty vyberte "Vlastnosti":

Nastavenie Outlook Express (2)

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

Nastavenie Outlook Express (3)

6.4.3 Kombinovaný prístup

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
Späť (Druhy útokov na server v sieti) Obsah Ďalej (Proxy server)

© Ivan "VIX" Noris, 2002-2007
mail: vix (zavinac) deja-vix bodka sk