Postfix je MTA jež byl vytvořen jako alternativa k sendmailu.
Základní konfigurační soubory jsou obvykle v adresáři /etc/postfix. Nejdůležitější konfigurační soubory jsou main.cf a master.cf.
V soubor main.cf jsou veškeré nastavitelné parametry pro server (všech jeho subsystémů). V souboru master.cf se určuje které substémy nebo programy (a jak) se mají spuštět pro obsluhu jednotlivých služeb jako je příjem zpráv, přepis hlaviček/obálky, lokální/nelokální relay, apod.
Některé soubory s tabulkami:Soubory s tabulkami se nepoužívají přímo, pro urychlení se používají databáze. Tyto se vytvářejí pomocí příkazu postmap(5) (resp. postalias(5) pro tabulku aliasů).
# komentar parametr = hodnota parametr2 = $parametr
Postfix používá líné vyhodnocování, je tedy možne se odkazovat jak na parametry definované později v souboru tak na parametry které se v konfiguračním souboru vůbec nevyskytuji (používá se implicitni hodnota).
K dispozici je více než sto různých parametrů pro konfiguraci serveru. Naštěstí většina má smysluplné implicitní hodnoty takže k provtnímu nastavení stačí obvykle nastavit jen pár parametrů.
Nejduležitější parametry:# Hostname systemu na kterém server bezi myhostname = thoe-beta.lab.fi.muni.cz # Lokalni domena mydomain = lab.fi.muni.cz # Jakou domenu maji zpravy odeslane z tohoto stroje myorigin = $mydomain # Domeny pro ktere je tento server cilovy (doruci se lokalne) mydestination = $myhostname, localhost.$mydomain, localhost.localdomain, localhost, $mydomain # Na kterych sitovych rozhranich poslouchat inet_interfaces = all # Komu povolit relay. # host - relay jen z tohoto pocitace # subnet - vsechny pocitace v podsiti # class - vsechny pocitace ve stejne IP tride A/B/C mynetworks_style = subnet #mynetworks = 10.0.30.0/24, 127.0.0.0/8 # Pro ktere domeny umoznit relay pocitacum nevyhovujicim $mynetworks resp. # $mynetworks_style relay_domains = $mydestination # Kteremu pocitaci zaslat zpravu pokd ji nevyhovuje zadny zaznam v # tabulce transport relayhost = [thoe-alpha.lab.fi.muni.cz]
Aliasy sou uloženy v souboru /etc/postfix/aliases (aliases(5)). Aliasy slouží k zasílání zprávy jinému adresátovi resp. skupině adresátů.
Formát:# komentar jmeno: hodnota1, hodnota2, hodnota3, hodnota4, ...
Jmeno je lokální adresa (bez domény). Hodnota je adresa, /soubor, |příkaz nebo :include:/soubor
Příklad:mailer-daemon: postmaster postmaster: root nobody: root buse: root root: alice staff: alice joe /var/adm/staff.mail project: :include:/etc/project.list
V souboru použitém u :include: je na každém řádku jeden cíl. Možné cíle sou stejné jako cile na pravé straně pravidla v souboru aliases.
Po změně je třeba spustit "newaliases" pro znovuvytvoření databáze (resp. postalias).
Uživatelé mohou kontrolovat doručování své pošty pomoci ~/.forward jehož obsah má stejný formát jako pravá strana pravidel v souboru aliases.
Vytvoření doménového koše v postfixu je otázkou pár minut. Tím nejdůležitějším rozhodnutím bude na který učet posílat zprávy adresované neexistujícím uživatele. Můžeme využít již existující účet nebo vyhradit jeden speciální.
$ useradd -g nogroup -d /no/home -s /bin/false mailbin
Pak už jen zbývá domluvit se s postfixem. Důležité je aby lokální poštu doručoval susbystem postifxu 'local' a ne někdo jiný, jinač parametr luser_relay nebude fungovat
# Chceme aby zasilal zpravy z cokoliv@lokalni_domena na mailbin@lokalni_domena luser_relay = mailbin@$domain # Necht subsystem local sam rozhodne ktere ucty existuji local_recipient_maps =
Pokud chceme ukládat úplně všechny zprávy na jeden konkrétní účet lze to zařídit také takto
Obsah souboru /etc/postfix/virtual:# Send everything to alice @alice.mydomain.com aliceUpravíme main.cf následovně:
virtual_alias_maps = hash:/etc/postfix/virtualA nakonec vytvoříme databazi:
$ postmap /etc/postfix/virtual
Na místo tabulek se statickými pravidly je možné použít tabulky s pravidly tvořenými regulárními výrazy. Na výběr máme posixové regularni výrazy (klasické i extended) nebo pcre.
Příklad pro tabulku virtual:/^(.*)-abc@/ $1@mydomain.com if !/foo.*@/ /(.*)bar@somewhere.net/ $1@nowhere.net endifObsah main.cf:
virtual_alias_maps = regexp:/etc/postfix/virtualTest funkčnosti:
$ postmap -fq 'that-abc@home.com' regexp:/etc/postfix/virtual that@mydomain.com $ postmap -fq 'foobar@somewhere.net' regexp:/etc/postfix/virtual_test $ postmap -fq 'wheee-bar@somewhere.net' regexp:/etc/postfix/virtual_test wheee-@nowhere.net
Jednoduchá služba pro přenos zpráv ze serveru na klientskou stanici. Standardně běží na portu 110 (SSL verze na portu 995). Protokol je trivialni a obsahuje jen 9 základních příkazu - USER, PASS, STAT, LIST, RETR, DELE, RSET, QUIT, NOOP. Kromě těchto příkazu ještě protokol obsahuje pár doplňkových příkazů které jsou nepovinné. Server odpovídá "+OK" nebo "-ERR". U víceřádkových odpověďí je odpoveď ukončena jednim řádkem obsahujícím tečku.
+OK Dovecot ready. USER thoe +OK PASS secret +OK Logged in. STAT +OK 2 808 RETR 1 +OK 401 octets Return-Path: <root@lab.fi.muni.cz> X-Original-To: thoe Delivered-To: thoe@lab.fi.muni.cz Received: by thoe-beta.lab.fi.muni.cz (Postfix, from userid 0) id CE1BF48872; Sun, 2 Apr 2006 00:31:08 +0200 (CEST) To: thoe@lab.fi.muni.cz From: root@lab.fi.muni.cz Subject: test Message-Id: <20060401223108.CE1BF48872@thoe-beta.lab.fi.muni.cz> Date: Sun, 2 Apr 2006 00:31:08 +0200 (CEST) xx yy . DELE 1 +OK Marked to be deleted. QUIT +OK Logging out, messages deleted.
IMAP - Internet Message Access Protocol
Komplexní protokol umožňující přístup k poště umístěné na serveru. Umožňuje ukládání zpráv do hierarchických uspořádaných složek, vyhledávání podle různých kritérií, přesouvání, kopírování a mazaní zpráv, upload zprav na server, přířazování atributů, a buhvi co vščcko.
Základní syntaxe:
pozadavek: <tag> <prikaz> <argumenty> odpoved: * <odpoved> * <odpoved> ... <tag> <reakce> <text>
Ukázka komunikace:
> | 1 LOGIN thoe secret < | 1 OK Logged in. > | 2 SELECT inbox < | * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) < | * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. ... < | 2 OK [READ-WRITE] Select completed. > | 3 SEARCH ALL < | * SEARCH 1 2 < | 3 OK Search completed. > | 4 FETCH 1 FLAGS < | * 1 FETCH (FLAGS (\Seen)) < | 4 OK Fetch completed. > | 5 fetch 1 BODY[TEXT] < | * 1 FETCH (BODY[TEXT] {5} < | aaa < | ) < | 5 OK Fetch completed. > | 6 fetch 1 RFC822 < | * 1 FETCH (RFC822 {407} To: root@lab.fi.muni.cz From: sophia@lab.fi.muni.cz ... Have a nice day ) < | 6 OK Fetch completed. > | 7 STORE 2 +FLAGS (\Deleted) < | * 2 FETCH (FLAGS (\Deleted \Seen)) < | 7 OK Store completed. > | 8 EXPUNGE < | * 2 EXPUNGE < | 8 OK Expunge completed. > | 9 LOGOUT < | * BYE Logging out < | 9 OK Logout completed.