Elektronická pošta: qmail, imap, pop3

Michal Prokeš, xprokes3@fi.muni.cz


Obsah


Elektronická pošta

Pro elektronickou poštu používáme adresy typu: uzivatel@domena.cz Pošta s takovouto adresou se doručí na stroj, na který ukazuje DNS MX záznam pro domena.cz a doručí se tam uživateli uzivatel
Přenos pošty zajišťuje protokol
SMTP.
Pokud nemůžeme, popřípadě nechceme odesílat poštu přímo cílovému SMTP serveru, můžeme použít tzv. relay SMTP server. (nejčastěji SMTP server svého poskytovatelepřipojení k internetu)
Podobně pro příjem pošty můžeme využít jiný poštovní server a zprávy z něj stahovat pomocí POP3, popřípadě stahovat, třídit a číst přímo na serveru pomocí IMAP4.
POP3 i IMAP lze používat také v šifrované podobě, jako POP3S a IMAPS

SMTP - Simple Mail Transfer Protocol

Protokol pro přenos pošty je popsán v
RFC2821 z dubna 2001, která nahrazuje RFC821 (SMTP), RFC1035 a RFC974 (MAIL ROUTING AND THE DOMAIN SYSTEM), RFC1869 (SMTP Service Extensions).
Email je zasílán ze SMTP klienta na SMTP server výměnou SMTP příkazů a samotného emailu.
SMTP server: zajišťuje odesílání pouze jedné kopie zprávy pro všechny příjemce mailu v jednom cílovém místě protokol reaguje na každý příkaz odpovědí, aby bylo jasné, že příkaz přijal. Host pro doručení se určuje pomocí DNS MX záznamu.

Příkazy

Příklad relace

xuser3@speo:~> telnet mail.muni.cz smtp
Trying 147.251.49.9...
Connected to mail.muni.cz.
Escape character is '^]'.
220 arethusa.fi.muni.cz ESMTP
EHLO fi.muni.cz
250-arethusa.fi.muni.cz
250-PIPELINING
250 8BITMIME
MAIL FROM:
250 ok
RCPT TO:
250 ok
DATA
354 go ahead
From: 
To: nekdo@mail.muni.cz
Subject: Test

Testovaci zprava
.
250 ok 1048425203 qp 17133
QUIT
221 arethusa.fi.muni.cz
Connection closed by foreign host.

POP3 - Post Office Protocol - Version 3

POP3 popisuje
RFC 1939
Protokol POP3 slouží k tomu, aby si klientské stanice, které nemají nastaven příjem pošty mohli poštu číst ze serveru, který ji pro ně přijímá. POP3, narozdíl od IMAP4 neumožňuje manipulaci se zprávou na serveru. Obvykle ji stáhne a smaže.
Serverová aplikace poslouchá na daném portu (obvykle 110) a čeká na spojení. Po spojení s klientem zašle uvítací zprávu a poslouchá příkazy. Ty se zadávají klíčovým slovem, někdy doplněným parametry a zakončují sekvencí CRLF.
Nejprve je třeba se přihlásit, to uděláme pomocí USER, PASS nebo APOP. Viz níže.Server autorizuje klienta a uzamkne schránku. Přečte maily, které obsahuje a přiřadí jim čísla od 1.

Standardní příkazy POP3

Volitelné příkazy POP3

Příklad relace:

S: 
C: 
S: +OK POP-3 server ready. <0cbc05924ba5c6ff928c699491591dc9@arethusa1.fi.muni.cz>
C:    APOP xuser c4c9334bac560ecc979e58001b3e22fb
S:    +OK User ixuser logged in. UCO 77666.
C:    STAT
S:    +OK 2 320
C:    LIST
S:    +OK 2 messages (320 octets)
S:    1 120
S:    2 200
S:    .
C:    RETR 1
S:    +OK 120 octets
S:    
S:    .
C:    DELE 1
S:    +OK message 1 deleted
C:    RETR 2
S:    +OK 200 octets
S:    
S:    .
C:    DELE 2
S:    +OK message 2 deleted
C:    QUIT
S:    +OK Bye for now.
C:  
S:  

IMAP4 - Internet Message Access Protocol

IMAP4rev1 (dále jen IMAP4) popisuje:
RFC 2060
Tento protokol umožňuje, narozdíl od POP3 nejen stažení emailu, ale také manipulaci s ním přímo na serveru.
Umožňuje:
Příznaky zprávy
Ve schránce je možné vytvářet libovolné složky a podsložky. Speciální složka INBOX je primární složkou uživatele. Pro názvy složek používající lokalizované znaky, např. diakritiku, se používá kódování UTF-7.

Klient může zasílat příkazy aniž by čekal na výsledek předešlého. Server je pak také současně zpracovává. Je však nutné simultálně spouštět pouze příkazy, které neovlivňují stejná data.

Relace vypadá tak, že po spojení klient zasílá řetězec (aby mohl identifikovat, k čemu patří odpověď) a příkaz, popřípadě parametry a server odpovídá.

Příkazy IMAP4rev1

Vždy použitelné:
stav Přihlašování:
stav Autentifikovaný:
stav Výběr:

Odpovědi serveru

Příklad relace

xuser3@speo:~> telnet imap.atlas.cz imap
Trying 212.47.13.67...
Connected to imap.atlas.cz.
Escape character is '^]'.
* OK Kerio MailServer ATLAS/18-02-2003b IMAP4rev1 server ready
a001 LOGIN xuser3 tajne_heslo
a001 OK LOGIN completed
a002 SELECT INBOX
* FLAGS (\Deleted \Seen \Answered \Draft \Flagged)
* 382 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1033742513] UID validity
* OK [UIDNEXT 383] Predicted next UID
* OK [PERMANENTFLAGS (\Deleted \Seen \Answered \Draft \Flagged)] Permanent flags
a002 OK [READ-WRITE] SELECT completed
a003 FETCH ALL 
a003 BAD FETCH Invalid request format
a003 SEARCH ALL
* SEARCH 1 2 3 4 5
a003 OK SEARCH completed in 0.00 s
a004 FETCH 1 ALL  
* 1 FETCH (RFC822.SIZE 4330 INTERNALDATE "03-Oct-2002 06:52:23 +0100" ENVELOPE (
"Wed, 02 Oct 2002 23:42:03 -0400" "Cash for xuser3@domena.cz" (("Theodora
 Blesi" NIL "Bessfv" "bol.com.br")) (("Theodora Blesi" NIL "Bessfv" "bol.com.br"
)) (("Theodora Blesi" NIL "Bessfv" "bol.com.br")) ((NIL NIL "xuser3" "domena.cz
")) NIL NIL NIL "") FLAGS (\Seen))
a004 OK FETCH completed
a005 LOGOUT
* BYE logging out
a005 OK LOGOUT completed
Connection closed by foreign host.


QMAIL mailserver

O autorovi

Daniel J. Bernstein

Autorem qmailu je programátor zaměřený na počítačovou bezpečnost a profesor University of Illinois. Jeho nejznámější programy:
O D.J.Bernsteinovi se rozepisuji zejména proto, že jeho programovací zvyklosti jsou hodně nestandardní.
Jak jsem se již zmínil, autor se zaměřuje na bezpečnost. U svých programů nabízí $500 za najití security hole. Na stránkách qmailu se prezentuje tím, že se to dosud nikomu nepodařilo. Za bezpečnost zde však zaplatíte použitím zcela nestandardních postupů, změnou základního adresářového stromu a také tím, že budete v podstatě donuceni užívat i ostatních programů od toho autora.

O programu

qmail je poštovní agent (MTA - Mail Transfer Agent) pro UNIXové operační systémy. Důraz je kladen zejména na bezpečnost (běží pod různými uživateli, kteří si navzájem nevěří a postupně si email na cestě předávají), výkonnost (standardně zvládá simultálně doručovat až 20 emailů, spolehlivost (zaručuje, že se email neztratí při chybě během ukládání) a také jednoduchost (je menší než konkurenční MTA)

Qmail také přichází s revolučním adresářem Maildir, který nahrazuje soubor Mailbox. Pošta je rozdělena do mnoha souborů, díky čemuž není zpomalována tím, že už je jí v souboru mnoho, umožňuje současný přístup více klientů ke schránce, uzamyká pouze jednotlivé maily.
Od qmailu přebírá Maildir také Exim a postfix.

Historie


Rozdělení programu

Je to sada programů, běžících pod různými uživateli, kterými email postupně prochází. Pro pochopení doporučuji prohlédnout obrázky PIC.* v dokumentaci qmailu. Ještě lépe
The big qmail pictures od André Oppermanna.

Základní programy

Ostatní

Pomocné programy a utility

Tyto je třeba stáhnout zvlášť z
cr.yp.to

Kompatibilita


Instalace

K instalaci systému existuje mnoho návodů typu bash skriptů:
FreeBSD:
Qmail FreeBSD Mail Toaster Linux: mnoho odkazů z qmail.org
Základní postup pro Linux:
Stáhneme si qmail z www.qmail.org a rozbalíme. Vytvoříme adresář /var/qmail, upravíme soubor INSTALL.ids dle našeho operačního systému a následně vytvoříme potřebné uživatele spuštěním toho souboru a spustíme make.
cd /usr/local/src
wget http://qmail.kn.vutbr.cz/qmail-1.03.tar.gz
gunzip qmail-1.03.tar.gz
tar xpf qmail-1.03.tar

mkdir /var/qmail
cd /usr/local/src/qmail-1.03
úprava INSTALL.ids
sh INSTALL.ids
make setup check
Nyní je třeba vytvořit konfigurační soubory:
./config-fast hostname.domena.cz
Konfigurační soubory jsou v /var/qmail/control. Upravíme podle svých potřeb. Popis souborů uvádím v sekci konfigurace.
Doporučuji: ln -s /var/qmail/control /etc/qmail
Vytvoříme aliasy pro root,postmaster a mailer-daemon, poněvadž qmail nedoručuje poštu root uživatelům.
cd ~alias; 
echo "&user3@jinadomena.cz" > .qmail-postmaster
cp .qmail-postmaster .qmail-mailer-daemon
echo "user3" > .qmail-root 
chmod 644 ~alias/.qmail*
Zbývá smazat sendmail a vytvořit alias na speciální sendmail, který bude doručovat přes qmail od aplikací které ho používají.
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
Systém spouštíme (první používá mailbox, druhý Maildir):
/var/qmail/bin/qmail-start ./Mailbox  /var/qmail/bin/splogger qmail &
/var/qmail/bin/qmail-start ./Maildir/ /var/qmail/bin/splogger qmail &
POZOR! Maildir adresáře je třeba vytvořít pomocí maildirmake.

Pro spouštění pomocí RC skriptů si stáhněte RedHat RCskript, popřípadě použijte daemontools. Pro ty, co si zvykly na daemontools např. u DJBDNS doporučuji qmail-conf, který vytvoří skripty qmail-*-conf a pomocí těch můžeme jednoduše tvořit adresáře pro daemontools.

Před použitím je vhodné nainstalovat ucspi-tcp (náhrada inetd).
tcpserver -v -u qmaild -g nofiles 0 smtp /var/qmail/bin/qmail-smtpd &
RELAYING se řeší pomocí ucspi-tcp:
  echo '127.:allow,RELAYCLIENT=""' > /etc/qmail/tcp.smtp
  echo '192.168.:allow,RELAYCLIENT=""' >> /etc/qmail/tcp.smtp
  echo ':allow' >> /etc/qmail/tcp.smtp
  tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/smtp.tmp /etc/qmail/etc.smtp
Funkčnost lze otestovat pomocí TEST.deliver a TEST.receive v dokumentaci.

Antivirový a antispamový filtr qmail-scanner

Vzhledem k počtu virů a spamů, které se v poslední době na internetu šíří je vhodné tyto emaily filtrovat přímo na emailovém serveru a jednotlivým uživatelům už, alespoň viry, ani nezasílat. Toto je možné docílit pomocí předřazené fronty qmail-scanner.
Qmail-Scanner:
http://qmail-scanner.sourceforge.net/
Tento scanner pracuje na principu předřazené fronty. Takže při doručování pošty je zpráva předána forntě qmail-scanner-queue a až po dokončení kontroly se zpráva předá klasické qmail-queue. Qmail-scanner také dopisuje, dle nastavení X hlavičky s informacemi o své práci, může adresáta také informovat textově, že mu byl zaslán virus, spamy označit příznakem, upravit předmět apod.
Snadno si můžete přidat vlastní filtry. Mazat přílohy daného typu apod.

Instalace antivirových a antispamových programů:
Nainstalujeme podporované programy. Viz. homepage. Z mnoha jmenuji alespoň: Kaspersky AVP, MacAfee, F-prot, RAV Antivirus, Spam Assassin, ...

Instalace:
Je zde více možností: Následuje stručná instalace s aplikací patche.
cd /usr/local/src/
wget http://www.qmail.org/qmailqueue-patch
cd /usr/local/src/qmail-1.03
patch -p0 < qmailqueue-patch
cd qmail-1.03
make setup check
cd ..
wget http://prdownloads.sourceforge.net/qmail-scanner/qmail-scanner-1.16.tgz
tar xzvf qmail-scanner-1.16.tgz
cd qmail-scanner-1.16/
./config  --help
./config 
./config --install
# otestovani funkcnosti
./contrib/test_installation.sh
Nyní zbývá nastavit tcpserver. Např. takto:
/etc/tcpserver/smtp.rules
#
# Zadny Qmail-Scanner na maily z 127.x.x.x
127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"
# Qmail-Scanner bez SpamAssassin na postu z mistni site
# [it triggers SpamAssassin via the presence of the RELAYCLIENT var]
10.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
#
# Qmail-Scanner se SpamAssassin na postu z okolniho sveta
:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

Odkazy na související programy

V této sekci uvadíme pouze odkazy na programy, které by se vám mohli ke qmailu hodit.

Konfigurace

Konfigurační soubory

Aliasy

Aliasy uživatelů se řeší pomocí .qmail* souborů (namísto .forward).
Po příchodu je pošta doručena uživateli. Nenajde-li se potřebný uživatel, prohledávají se .qmail* soubory v homu uživatele alias.
Soubor obsahuje na každém řádku jednoho uživatele kterému se má email doručit, popřípadě emailové adresy začínající znakem & pro přeposlání. Potom se obdobně prohledává domovský adresář daného uživatele.

Příklad:
Pro pes@domena.cz vytvoříme
echo "user3" > /var/qmail/alias/.qmail-pes
Tím doručíme daný email uživatelovi user3.
Uživatelé si mohou doručení upravit pomocí .qmail či pomocí .qmail-cokoli ve svém homu tvořit aliasy pro user3-cokoli@domena.cz.
Speciální soubor .qmail-default doručí uživatelům v něm uvedeným všechny zprávy, které nevyhoví jiným pravidlům (jinak se vrátí jako nedoručitelné).


Zdroje

RFC:
RFC 2821 (SMTP) RFC 1939 (POP3) RFC 2060 (IMAP)
http://www.lifewithqmail.org Life with Qmail
http://www.qmail.org Hlavní stránka qmailu
http://cr.yp.to D.J.Bernstein