Na úvod připomenu první dva díly (první díl, druhý díl) o poštovním serveru, které se převážně zabývaly teorií, stejně jako minulý díl, který se věnoval základnímu nastavení Postfixu a související nastavení DNS a SPF. Pokud jste si je neprošli, doporučuji to udělat.
Pár slov o nastavení Postfixu a nástroji postconf
Hlavní konfigurační soubor Postfixu, /etc/postfix/main.cf
obsahuje (alespoň v případě Debianu) relativně málo voleb a minimum komentářů. Pokud nahlédnete do dokumentace, zjistíte, že Postfix má nepřeberné množství nejrůznějších voleb. Přirozeně, každá z nich má nějaké výchozí nastavení, takže pokud její nastavení v main.cf
neupravíte, použije se výchozí hodnota. Proto může být konfigurace Postfixu relativně strohá – například pouze několikařádková.
Konfiguraci Postfixu vám může podstatně ulehčit nástroj postconf
, který je schopen s konfigurací manipulovat a vypisovat ji různým způsobem.
Zavoláním postconf
bez parametrů docílíte vypsání aktuálního nastavení. Hledáte-li něco konkrétního, použijte nástroj grep. Jedny z typických pokročilejších nastavení jsou nastavení nejrůznějších omezení, která si pomocí grepu můžete nechat elegantně vypsat:
postconf | grep restrictions
Nástroj postconf
však umí nejenom to. V některém případě se vám hodí mít možnost vypsat výchozí hodnoty, nikoliv ty aktuálně nastavené. K tomu slouží přepínač -d
(d
jako default). Porovnejte:
server:~# postconf -d smtpd_use_tls smtpd_use_tls = no server:~# postconf smtpd_use_tls smtpd_use_tls = yes
Pokud tedy někdy budete potřebovat rychle zjistit výchozí hodnotu pro danou volbu, hodí se vám parametr -d
. Všimněte si také, že pokud se jedná o jednu konkrétní volbu, můžete ji zadat nástroji postconf
přímo a on vám ji vyhledá a vypíše. V tomto případě tedy nepotřebujete grep.
Postconf vám také umožňuje provádět editace konfiguračního souboru. Chcete-li tedy např. změnit myhostname
, můžete to provést kromě ruční editace takto:
postconf -e myhostname=mujnovyserver.example.org
Výše uvedený příkaz změní hodnotu v konfiguračním souboru, je-li tam definovaná, pokud ne, zapíše ji tam i s požadovanou hodnotou. Přirozeně, změny se projeví až při znovunačtení konfigurace Postfixu:
/etc/init.d/postfix reload
Na závěr přijde o nástroji postconf
to nejdůležitější, a sice parametr -n
. Ten je schopen vypsat hodnoty pouze těch parametrů, které se liší od výchozích hodnot. Je to de facto vaše unikátní konfigurace Postfixu:
postconf -n
Dokumentace jednotlivých voleb nastavení Postfixu je k dispozici v manuálových stránkách:
man 5 postconf
Zadat číslo sekce je zde nutné, bez něj se zobrazí dokumentace k samotnému nástroji postconf
. Připomínám také možnost vyhledávat v manuálových stránkách (následující dva příkazy jsou ekvivalentní):
man -k postfix apropos postfix
Řízení fronty Postfixu
Ne všechny maily se nutně musí podařit doručit okamžitě, a to nikoliv nezbytně proto, že je cílový poštovní server nedostupný. Pokud jste četli předchozí díly, možná si vzpomínáte na techniku zvanou greylisting, která spočívá v odmítání doručení po určitou dobu.
Poštovní server se v případě nedostupnosti cílového serveru podívá, jestli nejsou k dispozici nějaké jiné poštovní servery v MX záznamech pro danou doménu. Pokud ne, e-mail zůstane ve frontě a Postfix se ho časem pokusí znovu doručit. Po určité době (5 dní ve výchozím stavu) to vzdá úplně a pošle odesílateli zprávu o nedoručení. Tuto dobu je možné ovlivnit konfigurační volbou maximal_queue_lifetime
(výchozí hodnota je „5d
“ (d
jako day, tedy den).
Frontu jako takovou můžete řídit pomocí nástroje postqueue
. Vypsání e-mailů, které jsou ve frontě, docílíte příkazem:
postqueue -p
Chcete-li se pokusit frontu vyprázdnit, tedy nařídit Postfixu, aby se pokusil obsah fronty doručit ihned, použijte parametr -f
:
postqueue -f
Konfigurační soubor master.cf a Postfix na více portech
Postfix není jeden velký démon, ale hromada provázaných služeb, které jsou volány a reagují na různé podněty. Tento konfigurační soubor definuje právě tyto služby. Změny v tomto souboru jsou časté např. při nasazení služeb typu Amavis, které kontrolují obsah zpráv (antispam, antivirus).
Úpravou tohoto souboru můžete kupříkladu nechat Postfix naslouchat na více portech, což se hodí v situaci, kdy vaši uživatelé chtějí odesílat poštu přes váš server, ale jejich poskytovatel připojení blokuje odchozí komunikaci na port 25. Pokud byste chtěli, aby Postfix naslouchal kromě portu 25 také na portu 250, přidali byste do tohoto souboru následující řádku:
250 inet n - - - - smtpd
Tato řádka definuje novou síťovou službu (klíčové slovo inet
) běžící na portu 250 a příkaz spouštějící danou službu je smtpd
, což odpovídá SMTP serveru Postfixu.
Podrobnější dokumentaci k tomuto konfiguračnímu souboru naleznete v manuálových stránkách:
man 5 master
Greylisting
Greylisting je v boji se spamem jednou z nejúčinnějších metod, i když skýtá jistá rizika a nevýhody. Hlavním problémem je zpoždění doručení pošty, které vyvolává. To se může v praxi pohybovat od několika minut až po hodiny. Některé špatně nastavené poštovní servery nemusí být schopny poštu doručit vůbec (to by měly být ale opravdu výjimky).
Greylisting byl zmíněn v tomto dílu, takže jen velmi stručně – tato technika spočívá v tom, že poštovní server odmítá přijmout e-mail z neznámého zdroje po určitou dobu. Standardně by se poštovní servery měly pokusit -e-mail doručit znovu, až se jim to nakonec podaří, zatímco spammeři obvykle e-maily dvakrát neposílají.
Démonů zajišťujících tuto funkcionalitu existuje více. Patrně nejčastěji se setkáte s nástrojem Postgrey, napsaným v Perlu a určeným pro Postfix. Nainstalujete jej jako obvykle, pomocí správce balíčků:
aptitude install postgrey
Démon se nastavuje prostřednictvím voleb předaných na příkazové řádce. Tyto volby je možné upravit v souboru /etc/default/postgrey
, konkrétně pak v proměnné POSTGREY_OPTS
, která vypadá ve výchozím stavu takto:
POSTGREY_OPTS="--inet=10023"
Kromě zde nastaveného portu, kde služba běží, můžete nastavit zejména dobu, po kterou bude Postgrey odmítat e-mail z neznámého zdroje. Výchozí hodnota je 300 sekund, tedy pět minut. Pokud byste tuto lhůtu chtěli snížit na minutu, provedli byste to pomocí volby --delay
, takto:
POSTGREY_OPTS="--delay=60 --inet=10023"
Žádný antispam by neměl postrádat whitelisting, tedy možnost některé klienty propustit bez kontroly (v případě greylistingu bez „ochranné lhůty“). Postgrey má k dispozici dva konfigurační soubory určené pro whitelisting:
-
/etc/postgrey/whitelist_clients
umožní propustit poštu pocházející z určitých zdrojů (domén či IP adres a rozsahů) -
/etc/postgrey/whitelist_recipients
umožní propustit poštu doručovanou konkrétnímu příjemci (typicky např.postmaster
)
Po úpravě konfigurace restartujte Postgrey:
/etc/init.d/postgrey restart
Integrace s Postfixem se provádí přes volbu smtpd_recipient_restrictions
, která umožňuje klást požadavky na příjemce a odmítat poštu, která jim nevyhovuje. Více o restrikcích se dozvíte v příštím díle. Výchozí hodnotou této volby je řetězec dvou parametrů oddělených čárkou:
-
permit_mynetworks
– sítě, které Postfix spravuje, nebudou omezeny -
reject_unauth_destination
– odmítne požadavek, pokud není Postfix finálním příjemcem zprávy nebo není nastaven tak, aby zprávu přeposílal dál
Postgrey zařaďte na konec této „fronty“ pomocí check_policy_service
, která provede kontrolu pomocí specifikované služby, takto:
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023
Následně zbývá donutit Postfix znovu načíst konfiguraci:
/etc/init.d/postfix reload
Postgrey má přirozeně své alternativy, u vytíženějšího serveru se může hodit, pokud se známé triplety ukládají do databáze (MySQL, PostgreSQL, atd.). K tomu vám může posloužit sqlgrey
. A tím bych tento díl ukončil.