Stavíme mailový server: Postfix

27. 10. 2003
Doba čtení: 6 minut

Sdílet

V prvním dílu jsme si popsali, jak nainstalovat a nakonfigurovat základní systém a software OpenBSD. V tomto dílu si řekneme, jak nakonfigurovat a spustit mailový program Postfix.

Konfigurace Postfixu

Při instalaci balíku postfix se automaticky vytvoří skupina _postdrop a uživatel a skupina _postfix. Ve starších verzích Postfixu jméno uživatele a skupiny neobsahovalo na začátku podtržítko, což je poměrně nová a užitečná konvence. Podtržítko značí, že nejde o normálního uživatele nebo skupinu, ale o uživatele systémového určeného např. pro běh nějakého daemona.

Upravíme /etc/group, aby obsahoval tyto skupiny (čísla skupin se mohou lišit, záleží na vašem konkrétním systému):

_postfix:*:507:_postfix
_postdrop:*:508:
_amavisd:*:510:
_spam:*:511:
_nospam:*:512:
_clamav:*:513:

Příkazem vipw upravíme /etc/passwd, aby obsahoval uvedené skupiny (opět čísla UID mohou být pro váš počítač jiná):

_postfix:*:507:507:Postfix Daemon:/nonexistent:/sbin/nologin
_amavisd:*:510:510:Amavis Mail Scanner:/var/amavisd:/sbin/nologin
_spam:*:511:511:Spam Bayes Learner:/noexistent:/sbin/nologin
_notspam:*:512:512:Not Spam Bayes Learner:/noexistent:/sbin/nologin
_clamav:*:1000:513:Clam AntiVirus:/noexistent:/sbin/nologin


Nyní nahradíme původní Sendmail Postfixem: spustíme příkaz /usr/local/sbin/pos­tfix-enable. Dále musíme v souboru/etc/rc­.conf nastavit parametry Postfixu:

sendmail_flags="-bd -q15m"

To znamená, že se Postfix má pouštět jako daemon na pozadí a vyprazdňovat frontu mailů každých 15 minut. Interval můžeme dle vlastní potřeby upravit.

V /etc/rc.conf ještě musíme přidat do parametrů syslogu, tedy na řádek „syslogd_flags=“, následující parametry, které říkají, že syslog má naslouchat také na uvedeném socketu:

"-a /var/spool/postfix/dev/log"

Nakonec příkazem crontab -e oeditujeme rootovský crontab a zakomentujeme řádek označený komentářem:

"# sendmail clientmqueue runner"

Tím jsme se zbavili Sendmailu. Dále v souboru /etc/postfix/mas­ter.cfzměníme v tabulce postfixových programů atribut chroot u všech základních programů z hodnoty „-“ na „y“. Na konec souboru přidáme sekci popisující amavis interface. Z důvodu potíží s formátováním soubor v článku necituji, ale uvádím pouze jako odkaz.

Nakonec přijde nejnáročnější část – konfigurace Postfixu. Postfix se konfiguruje pomocí proměnných v souboru /etc/postfix/ma­in.cf. Po nainstalování balíku s Postfixem se automaticky vytvoří výchozí /etc/postfix/ma­in.cf, který ovšem obsahuje pouze některé proměnné ze všech možných, které lze v Postfixu nastavit. Soubor main.cf je více či méně složen ze souborů začínajících předponou sample- z adresáře/et­c/postfix/. V každém souboru jsou proměnné týkající se dané funkce. Například v souboru sample-debug.cf najdeme proměnné ovlivňující debugování, v sample-local.cf najdeme proměnné týkající se lokálního doručování mailů, v sample-aliases.cf najdeme proměnné nastavující přístup k databázi aliasů atd.

A nyní, jak se main.cf vytváří. Soubory s předponou sample-NEEDITUJTE! Pokud chcete nějakou funkci do konfiguráku přidat, prostě k main.cf přidejte příslušný sample- soubor a teprve v main.cf dopište k proměnným hodnoty. V souboru main.cf.default (který také needitujte) můžete najít defaultní hodnoty proměnných. Všechny proměnné jsou v souborech dobře popsány, takže pouze k těm důležitým uvedu, na jaké hodnoty se mají nastavit, případně přidám komentář. Většina hodnot je dobře nastavena defaultně. Případné další informace se lze dočíst v dokumentaci na domácí stránce Postfixu.

Následující proměnné do konfiguráku opište tak, jak je uvádím. Proměnné popisují adresáře, soubory, kde má Postfix uložena data a programy, a uživatele, pod kterými Postfix běží.

mail_owner = _postfix
setgid_group = _postdrop
default_privs = nobody

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/local/sbin/mailq
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = /usr/local/share/doc/postfix/readme

alias_database = hash:$config_directory/aliases
transport_maps = hash:$config_directory/transport
mydestination = $config_directory/local

#content_filter = smtp-amavis:[127.0.0.1]:10024

Na posledním řádku je nataven filtr pro Amavis, který je dočasne zakomentován. Komentář zde nechte, odstraníme jej až při instalaci Amavisu.

Následující proměnné jsem okomentoval a uvedl jsem hodnoty, které jsem použil. Proměnné nastavte podle vlastní potřeby, hodně záleží na konkrétní síti a serveru, jaký vytváříte.

# plné DNS jméno serveru

myhostname = server.mojedomena.cz

# DNS jméno domény

mydomain = mojedomena.cz

# na co se přepisuje adresa u odesílaných mailů
# pepicek@pepickuvpocitac.mojedomena.cz
# -> pepicek@mojedomena.cz

myorigin = $mydomain

# nastavení adres "trusted" klientů, pro které
# server relayuje kamkoliv, tedy klientů, kteří si
# jako outgoing SMTP server nastaví tento server
#
# nastavíme buď pomocí mynetworks_style, nebo
# mynetworks
#
# mynetworks_style: host (jen tento server),
# subnet (stejná IP podsíť, na které je server),
# class (stejná IP třída (A/B/C) jako server)
#
# mynetworks: soubor s výčtem adres

mynetworks = $config_directory/mynetworks
# mynetworks_style=

# seznam domén, do kterých server relayuje pro
# "netrusted" klienty, tedy domény, kam všude
# server dovolí doručovat v praxi znamená domény,
# které jsou pro náš server cílovou stanicí
# (mydestination), plus případné další servery,
# kam posíláme (jsme tedy jen přestupní stanicí)

relay_domains = $mydestination

# může být též definováno přímým výčtem adres, pak
# každá adresa, která není ve výčtu uvedena, je
# odmítnuta

# relay_recipient_maps =

# seznam pravidel, kam doručovat maily
# tabulka obsahuje dvojice adresa (respektive
# doména) a protokol:next_hop, například:
# kancelare.mojedomena.cz smtp:mx3.mojedomena.cz
#
# pokud máte druhý server (např. mx-imap), na který
# se doručuje veškerá pošta a uživatelé z něj pak
# maily čtou IMAPem, napište do transportního
# souboru:
# mojedomena.cz smtp:mx-imap.mojedomena.cz
# .mojedomena.cz smtp:mx-imap.mojedomena.cz
#
# více informací se dozvíte v man transport(5)

transport_maps = hash:/etc/postfix/transport

# zde si můžete nastavit defaultní adresu, kam
# doručovat maily v případě, že na adresu nebude
# platit žádné pravidlo z transport_maps

# relayhost =

# maškarádování domén, zde si můžete nastavit
# domény, které mají skrývat svoje subdomény,
# aby v odchozích mailech nebyly vidět
#
# například adresa:
# manicka@subdomena1.mojedomena.cz
# se přepíše na manicka@mojedomena.cz
#
# seznam se prochází zleva doprava a pro přepis se
# použije první pravidlo, které pasuje

masquerade_domains = $mydomain

# z masquerade_domains mohou být explicitní
# výjimky, uvedené adresy se nebudou maškarádovat
# například zde můžete uvést "root" nebo
# "mailer-daemon"

masquerade_exceptions =

# pokud někdo změní adresu nebo se omylem udělá
# hokej v konfigurácích, tak neodmítat maily
# natvrdo (550), ale odmítnout stylem "zkus to
# za chvíli znova"

unknown_local_recipient_reject_code = 450

Do souboru /etc/postfix/a­liases uvedeme mailové aliasy, které potřebujeme. Formát souboru je popsán v man aliases(5). Když máme soubor upravený, vygenerujeme z textového souboru hash databázi příkazem postalias:

# vi /etc/postfix/aliases
# postalias /etc/postfix/aliases

Z bezpečnostních důvodů je vhodné mít ještě druhý mailový server, kam první server posílá všechnu doručenou poštu a odkud si ji uživatelé stahují například přes IMAP. Výhoda tohoto řešení spočívá jednak ve zvýšené bezpečnosti, neboť IMAP server je za firewallem a server, který poštu přijímá, nemá krom SMTP portu 25 otevřené žádné jiné služby, jednak také v tom, že na serveru, který poštu jen přijímá, nejsou fyzicky žádní uživatelé a ani zde neběží služba ident, takže spamovací servery nemohou scannováním zjistit seznam uživatelů na serveru.

Pokud tedy máme IMAP server, kam se všechny maily forwardují, uvedeme tento server do konfiguračního souboru /etc/postfix/tran­sport. Když žádný další server nemáme, soubor vytvoříme a necháme ho prázdný. Formát je popsán přímo v tomto souboru, případně v manuálové stránce transport(5). Pokud máme například IMAP server „mail2“ a doménu „mojedomena.cz“, do souboru transport napíšeme:

mojedomena.cz smtp:mail2.mojedomena.cz
.mojedomena.cz smtp:mail2.mojedomena.cz

Po modifikaci souboru vygenerujeme databázový soubor /etc/postfix/tran­sport.db příkazem:

# postmap /etc/postfix/transport

Vytvoříme soubor /etc/postfix/lo­cal a napíšeme do něj seznam domén a adres (na každý řádek jednu), které server bude považovat za cílové adresy.

Podobně vytvoříme soubor /etc/postfix/my­networks, který bude obsahovat adresy „trusted“ klientů, pro které budeme maily posílat kamkoliv. Příklad souboru:

217.13.91.0/23
10.0.0.0/8
127.0.0.0/8

Náročnou konfiguraci máme konečně za sebou a můžeme Postfix spustit. Buďto rebootujeme stroj, nebo napíšeme příkaz:

/usr/local/sbin/postfix start

Telnetem ozkoušíme, jestli Postfix poslouchá na portech 25 a 10025:

bitcoin_skoleni

# telnet localhost 25

Server by měl odpovědět:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.mojedomena.cz ESMTP

Telnet ukončíme a stejným způsobem ozkoušíme i port 10025.

Když se nám v tomto dílu podařilo nakonfigurovat a spustit Postfix, tak si v třetím dílu ukážeme, jak nainstalovat Amavis.

Autor článku