Elektronická pošta, princip SMTP, program Postfix

Hana Prokešová, xprokes1@fi.muni.cz


Obsah


Elekronická pošta

Elektronická pošta slouží k posílání zpráv v počítačových sítích. Skládá se z několika částí: Zpět na obsah

SMTP protokol

Protokol SMTP (Simple Mail Transfer Protocol) je protokol pro předávání zpráv mezi počítači. Definuje jej rfc2821. Komunikace standardně probíhá na TCP portu 25 jako komunikace klient -- server. Jako klient vystupuje MUA/MSP, který předává zprávu prvnímu MTA, nebo MTA, který předává zprávu dále. Klient naváže spojení na příslušný port a zadává SMTP příkazy. Server na ně odpovídá a sestavuje obálku zprávy podle které je zpráva dále posílána. Každá odpověď serveru začíná třímístným kódem výsledku operace.

SMTP příkazy:

rfc2821 určuje příkazy, které musí mailserver akceptovat:
HELO <doména> -- zahajuje komunikaci
RSET -- vyčistí obálku
NOOP -- nedělá nic, obálka se nemění
MAIL FROM:<adresa> -- přidání odesílatele do obálky
RCPT TO:<adresa> -- přidání adresáta do obálky
DATA -- zahajuje přenos zprávy (hlavička + tělo zprávy). Zakončí se <CR><LF>.<CR><LF> (tečka na samostatném řádku).
QUIT ukončí spojení
Některě další časté SMTP příkazy:
EHLO <domena> -- jako HELO, ale vypíše nestandardní akceptované příkazy a další parametry
VRFY <adresa> -- zkontroluje zda server akceptuje zprávu pro danou adresu
EXPN <adresa> -- vypíše adresy v mailing listu.
Příklad komunikace:
$ telnet localhost 25
Trying 127.0.0.1...
Negotiating binary mode on output.
Connected to localhost.
Escape character is '^]'.
220 brnenska.zoo.cz ESMTP Postfix (Debian/GNU)
HELO prazska
250 brnenska.zoo.cz
MAIL FROM:<zirafa@prazska.zoo.cz>
250 Ok
RCPT TO:<krokodyl@brneneska.zoo.cz>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Ahoj krokodyle,      
jak se mas? Ja uz mam vseho po krk.
Zirafa ze ZOO
.
250 Ok: queued as 5194E14A53
QUIT
221 Bye
Connection closed by foreign host.

Přijatá zpráva je dále MTA zpracována:

Do její hlavičky je každým MTA přidán záznam
Received: from <domena klienta> by <domena MTA serveru> 
  via <fyz. adresa> with <protokol> id <msg. id> 
  for <puvodní formát adresy příjemce> ; <datum, čas>
(Některé části mohou být vynechány).
Podle adres v hlavičce se rozhodne jak se se zprávou dále naloží. Podle konfigurace provede MTA přepis adres a přidání dalších záznamů do hlavičky. Pošta pro lokální počítač se uloží do příslušného mailboxu. Ostatní zprávy se zařadí do fronty pro odchozí poštu. Tato fronta se v pravidelných intervalech prochází a mailserver se pokouší maily odeslat. Pokud se zprávu podaří odeslat, je z fronty dstraněna. V opačném případě je zaslána odesílateli zpráva o chybě a dle nastavení se server dále zprávu odeslat. Pokud se to nepodaří, pošle server odesílateli zprávu o nedoručitelnosti a zpráva se z fronty odstraní.

Směrování zpráv:

MTA se snaží každou zprávu, která není určena pro lokální počítač poslat MTA, který je co nejblíže k adresátovi. K rozhodování slouží MX záznamy v DNS. MX záznamů může být víc a mají uvedenou prioritu. Při hledání dostupného příjemce se postupně zkouší adresy s menší a menší prioritou. Návrat k záznamu s větší prioritou není možný, protože by mohl vzniknout kruh. Pokud neexistuje MX záznam pro směrovou část adresy, dotazuje se MTA na veškeré informace o směrové části adresy. Použití DNS při směrování pošty popisuje rfc1033-1035

Ke čtení:
Kromě rfc2821: Bernstainova refarenční příručka o SMTP

Zpět na obsah


Formát zprávy:

Příklad zprávy:
>From krokodyl@brnenska.zoo.cz  Sun Mar 23 16:32:15 2003
Return-Path: <krokodyl@brnenska.zoo.cz>
X-Original-To: zirafa
Delivered-To: zirafa@prazska.zoo.cz
Received: by prazska.zoo.cz id AA08075; Sun, 23 Mar 2003 16:32:15 +0100 (CET)
Received: by brnenska.zoo.cz (Postfix, from userid 1000)
        id 3CF4914A54; Sun, 23 Mar 2003 16:30:36 +0100 (CET)
Date: Sun, 23 Mar 2003 16:30:36 +0100
To: Zirafa ze ZOO <zirafa@prazska.zoo.cz>
Subject: Re: Your Mail
Message-ID: <20030324065713.GA9311@brnenska>
References: <20030324052402.3320814A53@brnenska.zoo.cz>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="FCuugMFkClbJLl1L"
Content-Disposition: inline
In-Reply-To: <20030324052402.3320814A53@brnenska.zoo.cz>
From: krokodyl@brnenska.zoo.cz (Krokodyl z reky Nil)

--FCuugMFkClbJLl1L
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Ahoj zirafo,
diky za zpravu. Ja se mam fajn. Kunkaji tu zaby.
Zdravi te krokodyl

--FCuugMFkClbJLl1L
Content-Type: audio/mpeg
Content-Description: zabi kunk
Content-Disposition: attachment; filename="zabi_kunk.mp3"
Content-Transfer-Encoding: base64

//8OA4LGXdBnm/827///mdBt3///6H8yaf//7/80LCyTD9P/8xJRcMEazLZRkSEaULmZKZM4
YDnIH0hD1h5yBOiZSkzJWQlA9aD787KJ0QLHgiIQfT1h7IRNtKcPu+4lMyV7B7IXZiIw9nKU
TAgxAve0HnKQtn2HrIekD6zfD0hbPWb/+5JE/4AL8ABLAAAAAAAACWAAAAAAAAEsAAAAAAAA
pkC1k2y9h6zEwQSHAAGkhiZkplIH6mB+MOkdBZQL9NC7EiUwAx2pKNj9+R8lnZG/tdTnf97q

--FCuugMFkClbJLl1L
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="zaba.txt"

              .--._.--.
             ( O     O )
             /   . .   \
            .`._______.'.
           /(           )\
         _/  \  \   /  /  \_
      .~   `  \  \ /  /  '   ~.
     {    -.   \  V  /   .-    }
   _ _`.    \  |  |  |  /    .'_ _
   >_       _} |  |  | {_       _<
    /. - ~ ,_-'  .^.  `-_, ~ - .\

--FCuugMFkClbJLl1L--
Zpět na obsah

Postfix

Postfix je poštovní server, který byl napsán Wietsem Venema jako alternativa k rozšířenému sendmailu. Puvodne se jmenoval VMailer. Postfix se snaží být výkonný, lehce konfigurovatelný a relativně bezpečný. Podporuje unixový styl mailbox (/var/[spool/]mail), sendmailové aliasy a .forward.

Oproti monolytickému kolosu sendmail se postfix skládá s více menších částí, které se starají specifickou činnost a navzájem spolu komunikují.

Jak postfix funguje

Hlavním procesem je démon master, který dohlíží nas celím mailovým systémem. Při spuštění postfixu se nastartuje právě tento démon, který pak v případě potřeby inicializuje další a také se stará o dedržení limitů, které jsou popsány v soubory master.conf.

Cestu zprávy přes postfix lze rozdělit do dvou částí. První se odehrává příchodem zprávy do mailserveru a končí jejím uložím do incoming fronty. Odtud je vyzvednuta v druhé fázi do fronty active a dále zpracována až systém nějakým způsobem opustí (doručení, přeposlání, smazání).

Zpráva se může do systému dostat buď lokálně (lokální MTA je první v řadě) nebo ze sítě. Lokálně je přepravována programem sendmail, který ji zařadí do fronty maildrop odkud se přes program pickup dostane k programu cleanup. Ke zpracování programem cleanup se dostanou i zprávy doručené ze sítě, které putují přes SMTP (démon smtpd). Program cleanup upraví adresy do vhodného tvaru, provede přepisy adres, maškarádu a uloží zprávo do fronty incoming.

Z fronty incoming je část zpráv vyzvednuta do fronty active programem qmgr, který je ústřední částí zpracování v druhé fázi. Program qmgr se snaží o doručení zpráv. Zprávy pro lokální počítač předává programu local, který je ukládá do mailboxů nebo v případě přesměrování v souboru .forward předává opět vstupní části (programu cleanup). Zprávy určené pro jiné počítače posílá qmgr přes rozhraní smtp dále do sítě. Maily, které se napodařilo přeposlat nebo dručit se ukládají do fronty deferred, odkud jsou opět po určité době vyzvedávány k dalšímu pokusu o doručení.


obrázek z www.postfix.org

Konfigurace

konfigurační soubory jsou standardně uložny v adresáři /etc/postfix/

můžeme zde najít následující soubory:

main.cf -- hlavní konfigurační soubor
master.cf -- konfigurační soubor pro démona master; řídí zacházení se zdroji a pod.
access -- nastavení pravidel k přistupu přes SMTP
chronical -- přepis adres, změny v hlavičce...
virtual -- virtuální přepis adres. Přepisuje se pouze v obálce
relocated -- kam přeposílat maily pro již neexistující adresy
transport -- lze měnit způsob doručování zpráv
Většinu konfiguračních souborů je potřeba pro postfix převést do indexovaného formátu příkazem postmap. Také použití takto vygenerovaných konfigračních souborů se musí uvést v souboru main.cf

Konfigurační soubory jsou velmi podrobně okomentované a proto by bylo zbytečné popisovat zde jejich nastavování. Pro většinu případů stačí nastavit v souboru main.cf

myhostname plné doménové jméno počítače
mydomain doména ve které je umístěn $myhostname

Příklad maškarády:

Do souboru main.cf dopíšeme
masquerade_domains = $mydomain
masquerade_classes = envelope_sender, header_sender, header_recipient
masquerade_exceptions = root krokodyl
všechny adresy typu jmeno@neco.blabla.$mydomain se prepísí na jmeno@$mydomain a provede se tak v obálce a hlavičce v polích Sender a Recepient. Pro roota a uzivatele krokodyl se maškaráda provádět nebude. V případě, že je u masquerade_domains více jmen uplatňuje se první shoda.

Ke čtení: Dokumentace k postfixu: www.postfix.org/docs.html
Jmenovitě popis konfigurace: www.postfix.org/basic.html
Průvodce instalací a konfigurací: www.bsdtoday.com/2000/September/Features274.html

Zpět na obsah