Linux E X P R E S

Facebook

Správa linuxového serveru: Postconf, řízení fronty, greylisting

debain_notext.png

Tento díl se zabývá nástrojem postconf, který vám usnadňuje nastavení Postfixu, dále řízením fronty, provozem Postfixu na více portech současně a greylistingem, jednou z nejúčinnějších taktik pro boj se spamem.


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.

Diskuze (2) Nahoru