Elektronická pošta je jedna z nejstarších aplikací na Internetu. Její historie sahá do původního Arpanetu. Již na počátku sedmdesátých let se objevily první programy pro odesílání emailů. V dnešní době patří email mezi základní služby a je jedním z hlavních důvodů rozvoje Internetu. Původně byla elektronická pošta navržena jako jednoduchá služba (definovaná dokumentem RFC 822), která nedělala nic jiného než kopírovala zprávu z počítače odesílatele na počítač příjemce, kde ji připojila k již existujícímu souboru(schránce). Tento základní princip přetrval i do dnešní doby. Postupem času bylo nutné definovat řadu rozšíření pro vetší variabilitu. Jedná se o neinteraktivní (off-line) komunikaci.
Poštovní systémy se teoreticky skládají ze čtyř různých součástí:
/var/spool/mail, /var/mail, případně databáze) většinou přes IMAP nebo POP.
Základním komunikačním protokolem přenosových programů je SMTP (Simple Mail Transport Protocol) definován v RFC 821
nebo ESMTP (Enhanced SMTP) definovaný v RFC 1869, 1870, 1891 a 1985. Většina mailserverů
zvládá oba dva protokoly. Klient se sám rozhodne, který bude používat. Server jeho volbu pozná
podle pozdravu -- HELO u SMTP a EHLO u ESMTP
Ukázka komunikace v SMTP protokolu
[xsvobo14@nymfe57 ~] $ telnet aisa 25
Trying 147.251.48.1...
Connected to aisa.fi.muni.cz.
Escape character is '^]'.
220 aisa.fi.muni.cz ESMTP Sendmail 8.12.10/8.12.8; Tue, 29 Mar 2005 15:20:51 +0200 (MET
DST)
EHLO aisa
250-aisa.fi.muni.cz Hello nymfe57.fi.muni.cz [147.251.53.67], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
MAIL From: xx@ss.cz
250 2.1.0 xx@ss.cz... Sender ok
RCPT To: steve@mail.muni.cz
250 2.1.5 steve@mail.muni.cz... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
testik pro spravu UNIXu
.
250 2.0.0 j2TDKp7M19911434 Message accepted for delivery
Další ukázka komunikace v SMTP protokolu
[xsvobo14@nymfe57 ~] $ mail -v -s ttt steve@mail.muni.cz
test
Cc:
[<-] 220 anxur.fi.muni.cz ESMTP NO UCE NO SPAM - CVT Vas lubi.
[->] HELO nymfe57
[<-] 250 anxur.fi.muni.cz
[->] MAIL FROM:
Základní vlastnosti SMTP:
E-mailová zpráva má tři jasně oddělené části:
| Typ adresování | Příklad | Moderní tvar |
|---|---|---|
| UUCP | mcvax!uunet!ucbvax!boulder!doupe!evi | evi@doupe |
| Směrovaný | <@org1,@org2,...,@orgN:uzivatel@konecna-organizace | uzivatel@konecna-organizace |
| "Trik s procenty" | uzivatel%host1%host2@host3 | uzivatel@host1 |
Received: from the incoming queue by sender:ariadna.fi.muni.cz@ariadna.fi.muni.cz at Tue, 29 Mar 2005 15:28:37 +0200
X-Muni-Spam-Status: 1 BOGOFILTER_HAM,FORGED_RCVD_HELO,MISSING_SUBJECT,NO_REAL_NAME,
UNDISC_RECIPS
X-Bogosity: Ham, tests=bogofilter, spamicity=0.014895, version=0.94.2
Received: (qmail 22020 invoked from network); 29 Mar 2005 13:28:36 -0000
Received: from relay.muni.cz (HELO tirith.ics.muni.cz) (root@147.251.4.35)
by arethusa.fi.muni.cz with SMTP; 29 Mar 2005 13:28:36 -0000
Received: from anxur.fi.muni.cz (anxur.fi.muni.cz [147.251.48.3])
by tirith.ics.muni.cz (8.13.2/8.13.2) with ESMTP id j2TDSXTv004693
for ; Tue, 29 Mar 2005 15:28:35 +0200
Received: from aisa.fi.muni.cz (aisa.fi.muni.cz [147.251.48.1])
by anxur.fi.muni.cz (Postfix) with ESMTP id DC6A222AEF7
for ; Tue, 29 Mar 2005 15:28:33 +0200 (CEST)
Received: from aisa (nymfe57.fi.muni.cz [147.251.53.67])
by aisa.fi.muni.cz (8.12.10/8.12.8) with ESMTP id j2TDKp7M19911434
for steve@mail.muni.cz; Tue, 29 Mar 2005 15:27:26 +0200 (MET DST)
Date: Tue, 29 Mar 2005 15:27:26 +0200 (MET DST)
From: xx@ss.cz
Message-Id: <200503291327.j2TDKp7M19911434@aisa.fi.muni.cz>
To: undisclosed-recipients:;
X-Filter-Version: 1.15 (tirith.ics.muni.cz)
X-Muni-Envelope-From: xx@ss.cz
X-Muni-Virus-Test: Clean
Return-Path: xx@ss.cz
Subject: (none)
X-ISMU-Expires: 2006-03-29
testik pro spravu UNIXu
Tělo zprávy může mít několik částí, kde každá může být jiného MIME (Multipurpose Internet Mail Extensions)
typu (RFC 2045). Povoleny jsou jen tisknutelné znaky, to znamená,
že binární data musí být kódována BASE64.
Aliasy umožňují systémovému administrátorovi nebo jiným uživatelům přesměrování pošty. Mohou definovat elektronické konference,
předávat poštu mezi počítači, nebo umožnit, aby na jednoho uživatele odkazovalo více jmen. Zpracování aliasingu je rekurzivní,
proto je možné, aby jeden alias ukazoval na jiné alisy. Standardně bývají umístěny v souboru /etc/mail/aliases
nebo /etc/aliases.
Ukázka souboru aliases
# Nezbytne aliasy
postmaster: root, problem
MAILER-DAEMON: postmaster
# Vhodne aliasy
root: ivo, steve
webmaster: root, problem
hostmaster: root
# Direktiva include
problem: :include:/usr/local/mail/problem.alias, "/usr/local/mail/logs/problems"
# Vychytavka pro spravce
info: "|/usr/local/bin/sendinfo"
# aliasy seminarnich skupin, seznam udrzovan na jednom miste
unix-sprava: skutecna-trida@aisa
skutecna-trida: :include:/usr/local/mail/trida.seznam
Položky v souboru aliases nejsou tříděné, přímé vyhledávání by bylo neúčinné. Místo toho se vytvoří hashovaná verze pomocí databázového
systému Berkley nebo ndbm. Toho se docílí pomocí příkazu newaliases. Soubory odvozené z /etc/mail/aliases
se nazývají aliases.db pro Berkley a aliases.dir a aliases.pag pro ndbm.
Aliases lze také ukládat v LDAPu. Ovšem díky absenci nástrojů pro jednoduché přidávání, změnu a mazání položek LDAP není zatím výhodné k tomuto řešení přecházet. Více viz. příklad:
dn: uid=steve, dc=speo objectClass: inetLocalMailRecipient mailLocalAddress: steve@lab.fi.muni.cz mailRoutingAddress: steve@mail.muni.cz uid: steveodpovídá
steve: steve@mail.muni.cz
Sám uživatel si může přesměrovávat vlastní poštu pomocí souboru ~/.forward. Soubor se skládá z adres na jednom řádku
oddělených čárkami, nebo z několika položek na oddělených řádcích.
\ xsvobo14, "/home/xsvobo14/archiv", xy@email.czPošta bude replikovaná na třech místech -- v standardním uložišti pošty, v trvalém archivu v mém domovském adresáři a na serveru email.cz. Zpětné lomítko říká, že se má pošta lokálně dodávat bez ohledu na to, co říkají aliasy nebo soubory pro předávání pošty.
Tyto protokoly slouží k dopravení pošty do emailových klientů typu Outlook, Firebird, Eudora. Oba umí neco jako MD5 autentizaci - což je způsob, jak zajistit, aby hesla nešla po siti jen tak. Většina poštovnich klientů také podporuje možnost provozovat POP3 nebo IMAP nad SSL.
Protokol POP3 (Post Office Protocol 3) (RFC 1939) je jednodušší z obou uvedených.
Slouží pro vybírání/mazání mailů ze vzdáleneho serveru. Většína poštovních klientů
bývá implicitně nastavena tak, že při stáhnutí mailu nenechává na serveru kopii.
Základní vlastnosti POP3:
Protokol IMAP (Internet Mail Access Protocol) (RFC 3501) je o něco dokonalejší než POP3.
Umí prohledávat zprávy podle nějakého filtru, např. podle odesílatele.
Většína poštovních klientů, používající IMAP bývá implicitně nastavena tak, že mail nechávají na serveru a stáhnou
ho pouze tehdy, když si to uživatel přeje.
Základní vlastnosti IMAP:
Obecne platí, že POP3 je off-line protokol a IMAP on-line protokol. U free-mailovýchschránek bývá většinou přístup umožněn pomocí POP3 protokolu, za IMAP se musí platit.
Dříve bylo zvykem, že se mailserver choval k mailům stejně, ať byly od lokálního uživatele, nebo je dostal od jiného
mailserveru. Každý uživatel internetu jej mohl využít k odeslání své pošty. Tomuto chování se říká open-relay.
Od takovéhoto nastavení se v současnosti ustupuje, protože je lehce zneužitelné spamery.
Ochrana proti relayingu se konfiguruje pomocí souborů /etc/mail/*_allow.
Tyto textové soubory vychází z konfigurace uzlů, pro které se zajišťuje přijimání a odesílání pošty.
Jednotlivé řádky souboru /etc/mail/ip_allow resp. /etc/mail/name_allow
tvoří IP adresy strojů a sítí resp. doménová jména strojů a domén, které mohou posílat
poštu po SMTP přes váš počítač. Pokud by se o to pokusil počítač, ktery není uveden ani
v jednom z těchto souborů, byl by odmítnut, jako nepovolený relaying.
Sendmailu má pro zabránění relayingu sadu pravidel check_rcpt.
Pod pojmem spam si nejčastěji představíme nevyžádaný dopis. Jde například o rozesílání hromadných reklamních
zpráv. Pohybu těchto zprávám po síti je samozřejmě potřeba zabránit. Nejen pro usnadnění
práce lokálnímu uživateli, který by asi po čase nedělal nic jiného, než mazal spamy, ale
hlavně z důvodu odstranění neoprávněného relayingu. Ten na náš počítač může přenášet
jednak zátěž, ale hlavně se počítač, který
nebrání relayingu může dostat na černou listinu.
Základem pro ochranu proti spamu je databáze /etc/mail/deny.db.
Mezi opravdu učinné a v současné době nejčastěji užívané metody (pasivni) obrany patří
Oproti tomu filtry založené na databázích spamu fungují tak, že na vstupu obdrží potenciální spam, ten proženou nějakou hashovací funkcí a výsledek porovnají s databází znamých spamu uloženou na centralním serveru. Uživatel sám má vetšinou možnost nevyžádaný mail označit jako spam, systém posléze přidá do databáze hash tohoto mailu. Mezi zástupce patří nástroj Razor.
V praxi se nejlépe osvědčuje kombinace obou přístupu, vylepšenou např. o přidělování extra "bodů" za maily obsahujici "podezřelá slova."
Na dnešním open-source trhu jsou k dispozici v podstate 4 mailservery, které stojí za úvahu. Jsou to:
Sendmail je asi nejstarší mailserver. V současné době je ve verzi 8.13.4. Jeho vývoj je sponzorován firmou Sendmail, Inc. Jedná se o monolitický program, konfigurace není triviální, vetšinou se používá množina m4 maker. Asi nejpoužívanější open-source mailserver. Díky svému stáří měl/má problémy s bezpečností, autor při návrhu nepočítal s možností útoku na program.
Postfix vznikl jako projekt sponzorovaný
firmou IBM. V současné době je ve verzi 2.2. Byl psán s důrazem na bezpečnost, jeho autor je
Wietse Venema.
Hlavní konfigurační soubor je /etc/postfix/main.cf.
Více informací o konfiguraci lze nalézt na serveru
unix.kropes.cz.
Qmail je jedním z programů napsaným panen Bernsteinem. V současné době je ve verzi 1.03 (již od roku 1998). Byl také psán s důrazem na bezpečnost. Je portabilní, modularní, skládá se z několika programů. Program se nesmí distribuovat v binární formě, zájemce o tento mailserver si musí stáhnout nejprve zdrojáky, pak potřebné patche. Nikde ovšem nemáte garantováno, že všechny budou moci být aplikovány současně. Více informací o konfiguraci lze nalézt na http://www.lifewithqmail.org/ a v jednom z předchozích referátů.
Exim je vyvíjen University of Cambridge, aktuální verze je 4.50.
Standardní mailserver v distribuci Debian/GNU Linux. Funkce eximu odpovídají nejpoužívanějším funkcím
programu sendmail. Hlavní konfigurační soubor je /etc/exim.conf, lze ovšem spustit příkaz
eximconfig, který počáteční konfiguraci provede za nás. Pro podrobnější konfiguraci bych odkázal na
Exim/Mailman HOWTO
Program sendmail verze 5 napsal Eric Allman v roce 1983. Poté vznikly verze IDA a KJS. V současnosti se používá verze 8 -- nejnovější je 8.13.4.
Při typické konfiguraci moderních instalací běží sendmail jako dva démony - jeden, privilegovaný,
běží jako SMTP server, čeká na spojení na TCP portu 25 a stará se o odeslání čekající pošty z fronty
v /var/spool/mqueue. Druhý občas nahlédne do neprivilegované fronty
/var/spool/clientmqueue
s poštou nepřijatou k odeslání (většinou proto, že se nepodařilo kontaktovat cílový server) a pokusí se o její
opětovné odeslání.
Stav neprivilegované fronty lze kontrolovat příkazem mailq -Ac, stav privilegované fronty může superuživatel
ověřit příkazem mailq. Ke statistice mailového provozu slouží mailstats.
Sendmail se spouští pod superuživatelem jako dva démony, typicky těmito příkazy:
# Sendmail jako MTA /usr/sbin/sendmail -L sm-mta -bd -q1h # Sendmail pro kontrolu MSP fronty /usr/sbin/sendmail -L sm-msp-queue -Ac -q30m
Pokud nějaký správce systému nahlédne do konfiguračního souboru /etc/mail/sendmail.cf, zcela určitě se
zhrozí a začne přemýšlet o jiném mailserveru.
Ovšem situace není až tak tragická, protože existuje jednodušší postup, jak sendmail přizpůsobit svým požadavkům. Je jim množina
m4 maker,
s jejichž pomocí vytvoříme krátký konfigurační soubor, a ten pak zpracujeme makroprocesorem. Příslušná makra možná
naleznete ve vaší instalaci -- často /usr/share/sendmail/cf, ale určitě v balíčku se zdrojovým kódem. Spolu s ním nalezneme README, kde jsou
základní informace o jednotlivých volbách.
Toto je nejjednodušší část celé konfigurace - do zónového souboru se dopíše tento řádek:
IN MX 1 speo-alpha.lab.fi.muin.cz.Což v zóně lab.fi.muin.cz znamená, že poštu pro tuto doménu spravuje počítač speo-alpha.lab.fi.muin.cz.
Konfigurační soubor je optimaliyovaný pro čtení sendmailem na úkor lidské čitelnosti.
Řádky souboru sendmail.cf začínají písmeny, které mají specifický význam:
V - definice verze konfiguračního souboru
O - definice konfigurační volby
D - definice makra
C - definice třídy makra
F - definice třídy makra z externího souboru
R - definice přepisovacích pravidel
S - definice startovacích pravidel
H - definice hlaviček
M - definice maileru
P - definice doručovací priority
T - deklarace duvěryhodných (trusted) uživatelů
K - deklarace klíčů databáze
#####################
# Trusted users #
#####################
# this is equivalent to setting class "t"
#Ft/etc/mail/trusted-users
Troot
Tdaemon
Tuucp
#########################
# Format of headers #
#########################
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u
for $u; $|;
$.$b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
############################################
### Ruleset 3 -- Name Canonicalization ###
############################################
Scanonify=3
# handle null input (translate to <@> special case)
R$@ $@ <@>
# strip group: syntax (not inside angle brackets!) and trailing semicolon
R$* $: $1 <@> mark addresses
R$* < $* > $* <@> $: $1 < $2 > $3 unmark
R@ $* <@> $: @ $1 unmark @host:...
R$* [ IPv6 : $+ ] <@> $: $1 [ IPv6 : $2 ] unmark IPv6 addr
R$* :: $* <@> $: $1 :: $2 unmark node::addr
R:include: $* <@> $: :include: $1 unmark :include:...
R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if leading colon
R$* : $* <@> $: $2 strip colon if marked
R$* <@> $: $1 unmark
R$* ; $1 strip trailing semi
R$* < $+ :; > $* $@ $2 :; <@> catch
R$* < $* ; > $1 < $2 > bogus bracketed semi
Ruční konfigurace takovéhoto souboru není žádná procházka růžovým parkem. Proto existuje makroprocesor M4.
Samotná konfigurace spočívá ve vytvoření krátkého konfiguračního souboru *.mc s makry, která
reprezentují explicitní nastavení. Pro ostatní volby konfiguračního souboru sendmail.cf bude použito implicitní natavení sendmailu.
Z praktických důvodů je lepší konfigurační metasoubor uchovávat vždy spolu s používaným vygenerovaným souborem v
adresáři /etc/mail se stejným jménem, ale příponou .mc
cd /usr/share/sendmail/cf/m4 m4 ../m4/cf.m4 /etc/mail/sendmail.mc >/etc/mail/sendmail.cf killall -HUP sendmail
divert(-1)dnl ###Toto je komentář. V konfiguraci se neobjeví. divert(0) VERSIONID(`$Id$') dnl typ operačního systému OSTYPE(`linux') dnl typ domény (obecná), pro velke systemy DOMAIN(`generic') dnl místní poštu doručuje Procmail FEATURE(`local_procmail') FEATURE(`always_add_domain') dnl připojit definice pro místní poštu MAILER(`local') dnl připojit definice pro protokol SMTP MAILER(`smtp') dnl připojit definice pro Procmail MAILER(`procmail')Základ neprivilegovaného konfiguračního souboru submit.cf najdeme mezi m4 makry jako /usr/share/sendmail/cf/cf/submit.mc (záleží na distribuci).
Pokud chceme přeposílat poštu přes SMTP server jako relay, využijeme následující nastavení:
define(`SMART_HOST', `smtp:speo-beta.lab.fi.muin.cz')Program sendmail obsahuje podporu pro přístupovou databázi, pomocí které může odmítat zprávy od konkrétních uživatelů nebo domén.
sendmail.cf se přidá řádek
FEATURE(`access_db', `hash -o /etc/mail/access.db')dále se vytvoří soubor
/etc/mail/access obdobného obsahu jako v tomto výpise:
aisa.fi.muni.cz OK fi.muni.cz OK informatics.muni.cz OK 147.251 RELAY bad_boy@iol.com REJECT hotlivesex@ 550 Spam rejectedNakonec se vytvoří přístupová databáze.
makemap hash /etc/mail/access < /etc/mail/accessDalší nastavení:
dnl maskarada pro odcházející poštu: MASQUERADE_AS(`pokus.fi.muni.cz') dnl maskarada i pro obalku FEATURE(`masquerade_envelope') dnl maskarada pro celou domenu FEATURE(`masquerade_entire_domain') dnl maskarada pro přicházející poštu FEATURE(`always_add_domain') dnl rozesílat poštu z místní domény FEATURE(`relay_entire_domain') dnl přijímat poštu z nedostupných domén, firewall ... FEATURE(`accept_unresolvable_domains')
http://www.root.cz/clanky/posta-pro-kazdeho/
http://www.root.cz/clanky/stavime-mailserver/
http://www.sendmail.org/
http://www.procmail.org/
http://www.catb.org/~esr/fetchmail/
http://anfi.homeunix.net/cyrus/ -- IMAP server
http://www.faqs.org/docs/Linux-HOWTO/Cyrus-IMAP.html
http://www.faqs.org/rfcs/
http://www.ordb.org/
man sendmail