Elektronická pošta

Ondřej Životský (xzivostk(na)fi.muni.cz), Petr Šmíd (xsmid7(na)fi.muni.cz)


Obsah


Princip posílání e-mailu

  1. Vytvoření zprávy. K tomu slouží MUA (Mail User Agent), např. Eudora, Outlook, Firebird, …

  2. Zpráva se předá odesílacímu programu MSP - (Message Submission Program), např. /usr/sbin/sendmail, který se stará o její odeslání. Je to program, který předá poštu dále. Výhoda je v tom, že uživatelský program nemusí vědět nic o poštovních protokolech a stará se pouze o interakci s uživatelem. Navíc se o konfiguraci a správu odchozí pošty stará správce systému.

  3. MSP předává poštu dále programu pro přenos pošty MTA (Mail Transport Agent), typicky zase sendmail, případně qmail, exim, postfix... V dobách izolovaných sítí procházela pošta přes více MTA, než byla doručena. Dnes se většinou omezuje na jeden server (tzv. SMTP server) - místo, kde se pošta přechovává před doručením (Relay).

    Mnoho MUA ovšem používá systém „vše v jednom“, kdy se MSP obchází a pošta se předává rovnou vzdálenému SMTP serveru. Platí se však za to nutností konfigurace odchozí pošty pro každého uživatele zvlášť a nutností odesílat poštu v době připojení a aktualizovat nastavení všem uživatelům při každé změně SMTP serveru. Zvlášť nepříjemné to je tehdy, používáme-li k vyřizování pošty více takových programů. Naštěstí lze naprostou většinu programů „vše v jednom“ přimět, aby spolupracovaly s místním MTA, a tím problémy s obcházením MSP odpadnou.

  4. MTA komunikuje s cílovým serverem (nebo dalšími MTA), aby doručil poštu pro příjemce. Na cílovém serveru předá dalšímu článku štafety - doručovacímu programu MDA (Mail Delivery Agent), obvykle je to procmail. MDA může poštu ještě dále třídit a filtrovat (např. od nevyžádané pošty) a naložit s ní podle uživatelem zadaných pravidel - nejčastěji putuje do přidělené schránky. Pak již pošta čeká jen na to, až si ji uživatel vyzvedne. Schránka může být i na pracovním počítači, ale většinou je to nepraktické - pokud by nebyl připojen v době, kdy nám dojde nová pošta, snadno by se mohlo stát, že se vrátí odesílateli jako nedoručitelná. Na cílovém serveru však pošta počká, dokud si ji nevyzvedneme.

    Veškerá dosud popsaná komunikace, probíhá v protokolu SMTP (Simple Mail Transport Protocol), jemuž je vyhrazen TCP port 25, nebo jeho rozšířenou verzí ESMTP (mimo jiné s podporou osmibitového přenosu).

  5. Ke konečnému doručení z poštovního serveru do našeho počítače se již používají jiné protokoly: POP (Post Office Protocol; nejčastěji se lze setkat s verzí POP3), protokol, jehož úkolem je stáhnout poštu do pracovního počítače, nebo IMAP (Internet Mail Access Protocol, dnes ve verzi IMAP4), který je navržen nejen ke stahování pošty, ale i pro dálkovou práci s ní. Na straně poštovního serveru k tomu samozřejmě musí běžet příslušný démon, který v těchto protokolech komunikuje (např. pro IMAP Courier imap, Cyrus imap, …, pro POP3 Qpopper, POPular, ...)

  6. Ke stažení pošty lze použít specializované programy (například fetchmail) nebo opět řešení „vše v jednom“. Teprve pak se pošta objeví v poštovním programu příjemce.


Formát e-mailové zprávy

Formát zprávy definuje dokument RFC 2822. Podle definice se emailová zpráva skládá z obálky a vlastní zprávy. Vlastní zpráva se navíc dělí na hlavičku a tělo zprávy.


MIME – Multipurpose Internet Mail Extensions

MIME rozšiřuje tělo zprávy z původního texového obsahu definovaného v RFC 822 na několik typů. Každý ze základních typů má další podtypy. Standard MIME umožňuje rekurzi, takže zpráva ve standardu MIME může ve svém těle obsahovat další zprávu, také typu MIME. MIME se kóduje do sedmi bitového ASCII (např. pomocí Base 64). Tím se zajistí bezproblémový průchod dat.

Typy zpráv MIME:


SMTP - Simple Mail Transport Protocol

Protokol SMTP se používá pro přenos e-mailových zpráv od klienta na server, dále pro výměnu e-mailů mezi servery. SMTP servery i klienti směrují emaily na základě záznamů MX v DNS (Domain Name Service). Pokud MX záznam neexistuje, použije se A záznam. Minimální implementace protokolu musí být schopna odpovědět na tyto příkazy: HELO, MAIL, RCPT, DATA, RSET, NOOP a QUIT.

Příklad konverzace se SMTP serverem s autentizací uživatele (jméno a heslo je zakódováno pomocí base64):

# telnet smtp.seznam.cz 25
Trying 212.80.76.43...
Connected to smtp.seznam.cz (212.80.76.43).
Escape character is '^]'.
220 email.seznam.cz - Email zdarma na cely zivot ESMTP
helo nymfe06.fi.muni.cz
250 email.seznam.cz - Email zdarma na cely zivot
ehlo nymfe06.fi.muni.cz
250-email.seznam.cz - Email zdarma na cely zivot
250-PIPELINING
250-8BITMIME
250-SIZE 19922944
250 AUTH LOGIN PLAIN CRAM-MD5
auth login
334 VXNlcm5hbWU6
bm92YWsucGVwYQ==
334 UGFzc3dvcmQ6
YWJjZGU=
235 ok, go ahead (#2.0.0)
MAIL FROM: novak.pepa@seznam.cz
250 ok
RCPT TO: novak.pepa@fi.muni.cz
250 ok
data
354 go ahead
From: "Pepicek Novak" 
To: "Sobe" 
Subject: Test SMTP
Date: Tue, 08 Nov 2005 18:50:07 +0200
Tento mail je uplne nanic,
slouzi jen k demonstraci SMTP konverzace.
Doporucuji ho ihned smazat

Pepa
.
250 ok 1131473025 qp 16339
quit
221 email.seznam.cz - Email zdarma na cely zivot
Connection closed by foreign host.


POP3 - Post Office Protocol - Version 3

Protokol POP3 slouží k přenosu e-mailových zpráv, doručených do schránky na serveru, na klientský počítač. Uživatel, který chce s poštou pracovat si ji tedy stáhne tímto protokolem na svůj počítač. Stažené zprávy jsou ze serveru smazány (pokud není řečeno jinak). Uživatel tedy s poštou pracuje bez nutnosti připojení na server.

Příkazy protokolu


Příklad konverzace se serverem pomocí POP3 protokolu:

# telnet mail.popserver.com 110

Trying 192.168.0.100
Connected to mail.popserver.com.
Escape character is '^]'.
+OK <21860.1076718099@mail.popserver.net>

user USERNAME

+OK

pass PASSWORD

+OK

list

1 3713
2 83815
3 6180
4 3813
5 2177
6 4134
7 7168
8 18234
.

retr 1

+OK ???? octets
[[message]]
.

dele 1

+OK

quit

+OK
Connection closed by foreign host.


IMAP - Internet Message Access Protocol

Protokol IMAP, slouží obdobně jako protokol POP3, k načítání zpráv elektronické pošty ze serveru na stranu klientské aplikace. Nejdůležitější rozdíl od POP je možnost práce se zprávami na straně serveru. Klient může zprávy přesouvat mezi schránkami, editovat zprávy, ukládat, načítat. To je výhodné, pokud přistupujeme k poště z více počítačů.

Více informací lze nalézt na http://www.imap.org/ nebo přehledněji na http://www.cs.vsb.cz/grygarek/kotasek/indexima.htm.


Spam

S rozšiřováním popularity Interentu a elektronické pošty se zvyšuje i množství nevyžádané pošty - spamu. Denně dostávají miliony lidí do své emailové schránky spousty reklamních zpráv, hoaxů, nabídek, ... Získat miliony adres pro spam není složité. Stačí prohledat internetové stránky, tipnout si uživatele velkých mailových serverů atd.

Obran proti spamu je více:


SpamAssassin

SpamAssassin je program na filtrování mailů na základě textové analýzi zprávy, Bayes filtrování, DNS blocklistu a spolupráce s databází. Slouží k filtrování (třídění), nikoliv mazání nebo směrování spamů. SpamAssassin dokáže rozpoznat 95% - 100% spamů v závislosti na druhu příchozí pošty. Falešně zprávu označí v cca 0,1%.

Nastavení filtrace příchozí pošty pomocí SpamAssassinu si každý uživatel může nastavit přidáním řádku

| spamassassin -P |maildir ./Maildir/
do souboru .qmail (případně ekvivalent pro jiný poštovní server) ve svém domovském adresáři.
Nastavení Spamassassinu se provádí v souboru /etc/spamassassin/local.cf.


Qmail

Autorem qmailu je Daniel Bernstein (DJB), profesor na Chicagské univerzitě. Aktuální verzí qmailu již několik let zůstává 1.03. Existují desítky uživatelských patchů a rozšíření, na které jsou uživatelé odkázáni, když od MTA očekávají trochu víc. Celý program je tvořen řadou modulů tvořících řetězec, kterým prostupuje každá zpráva. Díky této vlastnosti se qmail stal jedním z nejbezpečnějších MTA programů vůbec.

Před tím, než se pustíte do instalace qmailu, je dobré odinstalovat Sendmail (případně jiný MTA) a další programy (např. Imap-2000), které nejsou s qmailem kompatibilní.
Před samotnou instalací je potřeba vytvořit adresářovou strukturu a speciální uživatele pro qmail démony:

# mkdir /var/qmail
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails

Qmail je nejlepší stáhnout v balíku netqmail, který obsahuje qmail a patche. Stáhnou si ho můžete např na http://qmail.kn.vutbr.cz/netqmail-1.05.tar.gz
Netqmail je potřeba rozbalit a příkazem "./collate.sh" aplikovat na qmail patche. Poté je možné qmail nainstalovat příkazem "make setup check".
Dále musíte nastavit jméno počítače:

#./config-fast thoe-beta.lab.fi.muni.cz

Chceme-li qmail zkonfigurovat na přijímání pošty pro naši doménu, musíme ji zapsat do souborů rcpthosts i locals:

# echo "thoe.lab.fi.muni.cz" >> /var/qmail/control/locals
# cp /var/qmail/control/locals /var/qmail/control/rcpthosts

qmail úplně ignoruje soubor /etc/hosts nebo jiná tradiční linuxová nastavení, a všechna kanonická jména, se kterými se při své práci setká, resolvuje výhradně skrze DNS. Proto je kritickou podmínkou mít při provozování qmailu v pořádku DNS.

Protože qmail nedoručuje poštu do speciálních systémových účtů, je nutné vytvořit aliasy, kterými případné zprávy přesměrujeme regulernímu uživateli:

# cd ~alias
# echo "root@thoe-beta.lab.fi.muni.cz" > .qmail-root
# cp .qmail-{root,mailer-daemon}
# cp .qmail-{root,postmaster}
# cp .qmail-{root,hostmaster}
# cp .qmail-{root,abuse}
# chmod 644 ~alias/.qmail*
Adresář ~alias (resp. /var/qmail/alias) obsahuje aliasy uživatelských účtů. Soubory .qmail* jsou alternativou sendmailovských souborů .forward. Pokud například přijde mail na adresu postmaster@thoe-beta.lab.fi.muni.cz a soubor .qmail-postmaster obsahuje &00420602xxxxxx@sms.eurotel.cz, pak se mail přepošle(&) na mobil (resp. emailovou adresu).

Dále si každý uživatel musí vytvořit svoji mailovou schránku:

# /var/qmail/bin/maildirmake ~/Maildir
nebo je root vytvoří pomocí příkazu:
# cd /home && \
> for user in *
> do
>  su -l "$user" -c "/var/qmail/bin/maildirmake Maildir"
>  ls -ld "$user"/Maildir
> done

Aby mohli programy předávat poštu i ve formátu pro sendmail, musíme vytvořit symlinky:

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
Nakonec si zvolíme typ schránek (mbox/maildir), které chceme používat pro doručování pošty:
# echo ./Maildir >/var/qmail/control/defaultdelivery

Start samotného qmailu provedeme příkazem:

# exec env - PATH="/var/qmail/bin:$PATH" qmail-start "`cat /var/qmail/control/defaultdelivery`" &

Start SMTP a POP3 démona:

Kromě vlastního procesu qmail, který se zabývá zpracováváním fronty zpráv a doručováním do mailboxů uživatelů, je nutné nainstalovat také qmail-smtpd, což je síťový modul qmailu, zajišťující vlastní služby SMTP. Ten se nespouští přímo, ale pomocí superserveru (tcpserver/inetd/xinetd). Autor doporučuje využít jeho vlastní (tedy tcpserver), který je rychlejší.

K ověřování uživatelsých hesel slouží program checkpassword, který si můžete stáhnout na adrese: http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
Instalace je opět jednoduchá:

# tar xvpf checkpassword-0.90.tar.gz
# cd checkpassword-0.90
# patch < /root/install/netqmail-1.05/other-patches/checkpassword-0.90.errno.patch
# make
# make setup check

Správné fungování checkpassword si můžete ověřit například takto:

Konfigurace mailového systému je v adresáři /var/qmail/control/. Konkrétní nastavení každého uživatele pro doručování jeho pošty je v ~/.qmail. Pomocí tohoto souboru je možné třídit poštu, forwardovat, spouštět programy, adt. Význam jednotlivých souborů je uveden v následující tabulce:
Control Default Used by Purpose
badmailfrom none qmail-smtpd blacklisted From addresses
bouncefrom MAILER-DAEMON qmail-send username of bounce sender
bouncehost me qmail-send hostname of bounce sender
concurrencyincoming none /service/qmail-smtpd/run max simultaneous incoming SMTP connections
concurrencylocal 10 qmail-send max simultaneous local deliveries
concurrencyremote 20 qmail-send max simultaneous remote deliveries
defaultdelivery none /var/qmail/rc default .qmail file
defaultdomain me qmail-inject default domain name
defaulthost me qmail-inject default host name
databytes 0 qmail-smtpd max number of bytes in message (0=no limit)
doublebouncehost me qmail-send host name of double bounce sender
doublebounceto postmaster qmail-send user to receive double bounces
envnoathost me qmail-send default domain for addresses without "@"
helohost me qmail-remote host name used in SMTP HELO command
idhost me qmail-inject host name for Message-ID's
localiphost me qmail-smtpd name substituted for local IP address
locals me qmail-send domains that we deliver locally
me FQDN of system various default for many control files
morercpthosts none qmail-smtpd secondary rcpthosts database
percenthack none qmail-send domains that can use "%"-style relaying
plusdomain me qmail-inject domain substituted for trailing "+"
qmqpservers none qmail-qmqpc IP addresses of QMQP servers
queuelifetime 604800 qmail-send seconds a message can remain in queue
rcpthosts none qmail-smtpd domains that we accept mail for
smtpgreeting me qmail-smtpd SMTP greeting message
smtproutes none qmail-remote artificial SMTP routes
timeoutconnect 60 qmail-remote how long, in seconds, to wait for SMTP connection
timeoutremote 1200 qmail-remote how long, in seconds, to wait for remote server
timeoutsmtpd 1200 qmail-smtpd how long, in seconds, to wait for SMTP client
virtualdomains none qmail-send virtual domains and users

Relaying

Pokud je qmail nainstalován standardním posupem, je relaying automaticky vypnut a pošta je doručována jen na domény uvedené v souboru /var/qmail/control/rcpthosts. Pokud chceme povolit doručování pošty pro nějaké uživatele, musíme pomocí tcpserveru nastavit proměnné prostředí RELAYCLIENT, které pak má u qmail-smtpd přednost před nastavením v rcpthosts. Do souboru /etc/tcp.smtp se musí přidat řádky typu:

127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
:allow
První řádek říká, že povolujeme připojení na SMTP z loclahostu a že má tcpserver nastavit RELAYCLIENT. Poslední řádek říká, že spojení na SMTP je povoleno odkudkoliv, ale nenastaví se RELAYCLIENT.
Pak je nutné znovu vytvořit přístupovou databázi k SMTP pomocí jednoho z postupů:
qmailctl cdb
nebo
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp*

Provoz virtuální domény a doménového koše se v qmailu realizuje připsáním řadku do souboru /var/qmail/control/virtualdomains v tomto tvaru:

user@domain:prepend
Položka user je nepovinná. Toto způsobí při příchodu pošty na user@domain převední adresy na prepend-user@domain a zpráva se doručí lokálně.
Zpráva pepa@thoe-beta.lab.fi.muni.cz je zpracována pravidly v $HOME/pepa/.qmail, zpráva pepa-neco@thoe-beta.lab.fi.muni.cz je zpracována pravidly v $HOME/pepa/.qmail-neco (nebo $HOME/pepa/.qmail-default). Takto lze tedy jednoduše vytvořit pro naši doménu i "doménový koš".

Vytváření aliasů je v qmailu velice jednoduché. Pokud si chce uživatel pepa vytvořit alias xxxxx, pak stačí vytvořit soubor /var/qmail/alias/.qmail-xxxxx. Do něj přidá adresy skutečných příjemců pošty, např řádek "pepa@thoe-beta.lab.fi.muni.cz".

Pro provoz virtuálních domén a virtuálních účtů můžeme s výhodou použít vpopmail (http://www.inter7.com/vpopmail/). Pokud budeme pro správu účtů používat pouze programy vpopmailu, nemusíme se v souvislosti s mailboxy zabývat ničím dalším (vpopmail za nás sám vytváří a maže uživatelské maildiry, sám zajistí modifikaci souborů v /var/qmail/control apod.). Nespornou výhodou vpopmailu je také možnost práce s účty přes www rozhraní, které je možné využít díky programu http://mail.inter7.com/qmailadmin. Jeho instalace je velmi jednoduchá. Vyzkoušet si jej můžete na stránce http://mail.inter7.com/cgi-bin/qmailadmin (účet: postmaster, doména: test.com, heslo: test).


Postfix

Postfix je, stejně jako Qmail, alternativa sendmailu. Lze jej získat na http://www.postfix.org/. Instalace se spustí klasicky příkazem "make && make install. " Při instalaci se automaticky vytvoří skupina postdrop a uživatel a skupina postfix. Během instalace nám instalátor položí několik otázek na umístění souborů apod. Většinou se dá spokojit s defaultním nastavením. Dále je nutné upravit soubor /etc/postfix/aliases. Do něj uvedeme mailové aliasy, které potřebujeme. Formát souboru je jednoduchý a dá se v něm zorientovat na první pohled. Poté vygenerujeme z textového souboru hash databázi příkazem postalias: "postalias /etc/postfix/aliases". Také je potřeba upravit konfigurační soubor /etc/postfix/main.cf. Minimálně upravíme parametry mydomain, myhostname, myorigin, mydestination a mynetworks. Soubor je dobře okomentován, kompletní seznam parametrů a jejich voleb je na manuálové stránce postconf(5).

Parametry:

Nakonec můžeme server spustit: "/usr/sbin/postfix start".


Zdroje a reference

http://www.root.cz/clanky/posta-pro-kazdeho/
http://www.root.cz/clanky/stavime-mailserver/
http://tomclegg.net/qmail-linux
http://www.lifewithqmail.org/lwq.html
http://www.linuxfocus.org/English/November2000/article175.shtml
http://www.cs.vsb.cz/grygarek/kotasek/pop02.htm