Elektronická pošta

Martin Kyselák, xkyselak@fi.muni.cz

Architektura

MUA (Mail User Agent)

MTA (Mail Transport Agent)

MDA (Mail Delivery Agent)

Formát zpráv

Základní formát e-mailových zpráv se řídí popisem v RFC 2822. V tomto RFC se popisuje pouze přenos textových zpráv v ASCII kódování. Formáty zpráv v jiném kódování se zabývají RFC 2045, 2046, 2049. Elektronická pošta dělí každou zprávu na obálku a obsah zprávy. Obálkou rozumíme informace, které jsou potřeba k doručení zprávy. Obsah určuje vlastní text zprávy, která má být doručena příjemci.

RFC 2822 popisuje pouze obsah zprávy, který se skládá z několika řádků, které obsahují ASCII znaky. Jednotlivé řádky jsou od sebe odděleny sekvencí znaků CRLF (Carriage Return, Line Feed). Obsah zprávy se dále dělí na povinnou hlavičku a nepovinné tělo. Tyto dvě části jsou od sebe odděleny prázdným řádkem.

Hlavička obsahuje jednotlivá pole (header fields) v následujícím formátu:

název pole: tělo pole

Název pole mohou tvořit pouze tisknutelné znaky kromě dvojtečky. Tělo může být buď nestrukturované nebo strukturované, strukturované tělo má specifickou syntaxi popsanou v RFC.

Je-li tělo příliš dlouhé, můžeme ho rozdělit tak, že se před libovolný bílý znak (mezera, tabulátor) vloží sekvence znaků CRLF. Například:

Subject: This
 is a test

Ukázka hlavičky:

Return-Path: <3636@fi.muni.cz>

Received: from anxur.fi.muni.cz (anxur.fi.muni.cz [147.251.48.3])

by aisa.fi.muni.cz (8.13.6/8.12.8) with ESMTP id l287KFNb3364233

for <xkyselak@aisa.fi.muni.cz>; Thu, 8 Mar 2007 08:20:15 +0100 (MET)

Received: by anxur.fi.muni.cz (Postfix)

id 190C522AEFE; Thu, 8 Mar 2007 08:20:16 +0100 (CET)

Received: from minas.ics.muni.cz (minas.ics.muni.cz [147.251.4.40])

by anxur.fi.muni.cz (Postfix) with ESMTP id 0DD3522AEF3

for <xkyselak@fi.muni.cz>; Thu, 8 Mar 2007 08:20:16 +0100 (CET)

Received: from arethusa1.fi.muni.cz (arethusa1.fi.muni.cz [147.251.49.6])

by minas.ics.muni.cz (8.13.8/8.13.8/SuSE Linux 0.8) with ESMTP id l287KEr7023832

for <xkyselak@fi.muni.cz>; Thu, 8 Mar 2007 08:20:15 +0100

Received: by arethusa1.fi.muni.cz (Postfix, from userid 115)

id D0AFF5949DF; Thu, 8 Mar 2007 08:20:14 +0100 (CET)

Delivered-To: 98741@mail.muni.cz

Received: from the incoming queue by sender:ariadna.fi.muni.cz@ariadna.fi.muni.cz at Thu, 08 Mar 2007 08:20:14 +0100

Received: from ismu-submit at Thu 08 Mar 2007 08:19:43 AM CET via SQL

From: Radek Oslejsek <3636@mail.muni.cz>

To: Martin Kyselak <98741@mail.muni.cz>

Subject: PV167: Ukol do pondeli

Mime-Version: 1.0

Content-Type: text/plain; charset=utf-8

Content-Transfer-Encoding: 8bit

Message-Id: <1173338414.107248678.495.958787193036@mail.muni.cz>

Date: Thu, 08 Mar 2007 08:20:14 +0100

Status: RO

Hlavičky, které zpráva musí obsahovat:

Příklady nepovinných hlaviček:

MIME (Multipurpose Internet Mail Extensions)

Původně byla elektronická pošta navržena pro přenos prostého ASCII textu. Brzy však vyvstala potřeba přenášet elektronickou poštou binární soubory různých typů. Kvůli RFC 822 (později RFC 2822) je nutné binární soubor překódovat do ASCII (zmenšením abecedy se ale zvětší délka zprávy), například programy uuencode a uudecode.

Jako řešení výměny binárních dat byl zvolen standard MIME. Každá zpráva ve formátu MIME musí obsahovat hlavičku MIME-Version (v současnosti se používá verze 1.0) a Content-Type, který určuje typ dat, s následujícím formátem:

Content-Type: typ/podtyp; par1=val1; par2=val2

Příklady typů:

Jednotlivé části zprávy pak musí ještě obsahovat hlavičku Content-Transfer-Encoding (7bit, 8bit, binary nebo base64), nepovinně pak Content-ID (identifikátor) a Content-Description (textový popis). MIME je definováno v normách RFC 1521-1522, 2045-2049, 2231.

DNS MX záznamy

Každá elektronická adresa se skládá ze dvou částí: jména uživatele (levá část před zavináčem) a doménového jména (pravá část za zavináčem); v SMTP je dovoleno pouze resovovatelné, plně kvalifikované doménové jméno (FQDN – Fully Qualified Domain Name).

Provedením DNS dotazu na MX (Mail eXchanger) záznamy získá SMTP klient seznam IP adres mailserverů společně s preferenčním číslem každého z nich. Pokud klient dotazem nezíská žádné MX záznamy, ale pouze A (Address) záznam(y), je použit místo MX záznamu A záznam. Naopak klient nesmí použít A záznam, pokud byl nalezen alespoň jeden MX záznam. Pokud jsou přítomné MX záznamy, ale nejsou funkční, klient ohlásí chybu.

Bylo-li na DNS dotaz vráceno více MX záznamů, pokusí se SMTP klient vytvořit spojení s jedním z nich, počínaje serverem s nejnižším preferenčním číslem.

SMTP (Simple Mail Transfer Protocol)

SMTP je internetový protokol používaný pro přenos e-mailů mezi systémy. Standardizován byl normou RFC 821 (1982), kterou v roce 2001 ji nahradila novější RFC 2821. SMTP funguje nad protokolem TCP, používá port TCP/25.

Protokol umožňuje doručování pošty pomocí přímého spojení mezi odesílatelem a adresátem. Zpráva je doručena do schránky adresáta, ze které si ji může uživatel kdykoliv vyzvednout, např. pomocí POP3 nebo IMAP.

Komunikace funguje na modelu výměny zpráv mezi odesílajícím a přijímajícím serverem.

Nejdůležitější SMTP příkazy (nutné pro odeslání zprávy):

Příkaz pro nápovědu je „HELP“, kde najdeme také popis jednotlivých příkazů.

Ukázka SMTP komunikace (S – server, C – client):

$ telnet aisa.fi.muni.cz 25

Trying 147.251.48.1...

Connected to aisa.fi.muni.cz (147.251.48.1).

Escape character is '^]'.

S: 220 aisa.fi.muni.cz ESMTP Sendmail 8.13.6/8.12.8; Wed, 21 Mar 2007 12:03:18 +0100 (MET)

C: HELO nymfe24.fi.muni.cz

S: 250 aisa.fi.muni.cz Hello nymfe34.fi.muni.cz [147.251.53.44], pleased to meet you

C: MAIL FROM: xkyselak@fi.muni.cz

S: 250 2.1.0 xkyselak@fi.muni.cz... Sender ok

C: RCPT TO: kyselak@seznam.cz

S: 250 2.1.5 kyselak@seznam.cz... Recipient ok

C: DATA

S: 354 Enter mail, end with "." on a line by itself

C: Subject: testovaci zprava

C: From: xkyselak@fi.muni.cz

C: To: kyselak@seznam.cz

C: Testujeme SMTP komunikaci.

C: .

S: 250 2.0.0 l2LB3IMs5626126 Message accepted for delivery

C: QUIT

S: 221 2.0.0 aisa.fi.muni.cz closing connection

Connection closed by foreign host.

Postfix

Původní myšlenkou stojící v počátcích vývoje Postfixu byla snaha vytvořit alternativu k velice oblíbenému, ale ne příliš bezpečnému Sendmailu. Proto už od začátku je Postfix navržen tak, aby byl výrazně bezpečnější a aby byl funkčně schopen nahradit Sendmail. Pro Postfix také mluví jednoduchost jeho použití.

Základní konfigurace

Základní konfigurační soubory jsou (obvykle) umístěny v adresáři /etc/postfix. Nejdůležitější konfigurační soubory jsou main.cf a master.cf. Soubor main.cf obsahuje hlavní nastavitelné parametry serveru a jeho podsystémů. Soubor master.cf potom obsahuje nastavení procesů serveru Postfix (které programy a jak spouštět např. pro 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, které se vytvářejí pomocí příkazu postmap(5) (resp. postalias(5) pro tabulku aliasů).

Soubor main.cf obsahuje dvojice parametr = hodnota, $parametr určuje hodnotu parametru (nemusí být definována před použitím $parametr; není-li definována vůbec, použije se implicitni hodnota). „#“ se používá pro komentář.

Nejdůležitější parametry:

# hostname systému, na kterém běží server
myhostname = proto-beta.lab.fi.muni.cz

# lokální doména
mydomain = lab.fi.muni.cz

# doména, kterou mají uvedenou zprávy odesílané z tohoto serveru
myorigin = $mydomain

# pro tyto domény je server cílový (lokální doručení)
mydestination = $myhostname, localhost.$mydomain, localhost.localdomain,
        localhost, $mydomain

# síťová rozhraní, na kterých je sledován provoz
inet_interfaces = all

# komu povolit relay:
# host - jen z tohoto počítače
# subnet - všechny počítače v podsíti
# class - všechny počítače ve stejné IP třídě A/B/C
mynetworks_style = subnet
# mynetworks = 10.0.30.0/24, 127.0.0.0/8

# které doméně povolit relay, pokud neprojde $mynetworks resp. $mynetworks_style
relay_domains = $mydestination

# kterému počítači zaslat zprávu, jestliže jí nevyhovuje žádný záznam v
# tabulce transport
relayhost = [proto-alpha.lab.fi.muni.cz]

Aliasy

Aliasy slouží k zasílání zprávy jinému adresátovi nebo skupině adresátů. Aliasy jsou uloženy v souboru /etc/postfix/aliases.

Základní formát aliasu:

# komentář
jmeno: hodnota1, hodnota2,
       hodnota3, hodnota4, ...

kde jmeno je lokální adresa (bez domény), hodnota je adresa, /soubor, |příkaz nebo :include:/soubor.

Napří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 cíle na pravé straně pravidla v souboru /etc/postfix/aliases.

Po aktualizaci souboru /etc/postfix/aliases je nutné spustit příkaz newaliases pro znovuvytvoření databáze.

Uživatelé mohou kontrolovat doručování své pošty pomoci souboru ~/.forward, jehož obsah má stejný formát jako pravá strana pravidel v souboru /etc/postfix/aliases.

Doménový koš

Před vytvořením doménového koše musíme určit účet pro posílání zpráv adresovaných neexistujícím uživatelům. Můžeme využít již existující účet nebo vytvořit nový, speciální:

$ useradd -g nogroup -d /no/home -s /bin/false mailbin

Při nastavování Postfixu je důležité, aby lokální poštu doručoval podsystém 'local', jinak parametr luser_relay nebude fungovat:

luser_relay = mailbin@$domain 

# podsystém local sám rozhodne, které účty existuji
local_recipient_maps =

POP3 (Post Office Protocol version 3)

POP3 se používá pro stahování e-mailových zpráv z poštovního server na klienta. Protokol byl standardizován v roce 1996 v RFC 1939.

POP3 je výhodný pro uživatele, kteří platí za dobu připojení k Internetu (typicky telefonní připojení), protože jim umožňuje stáhnout zprávy, odpojit se a v pak v off-line režimu zprávy číst.

Protokol původně podporoval pouze nešifrované přihlašovací mechanismy, později přibyla metoda APOP (která používá MD5 funkci pro zabezpečený přenos hesla od klienta na server. Podporuje-li to server, může navíc klient celou komunikaci šifrovat buď pomocí SSL nebo TLS.

POP3 používá TCP, konkrétně port 110. Komunikace probíhá na principu výměny zpráv mezi klientem a serverem. Příkaz vždy začíná na začátku řádky, v základní implementaci POP3 mají příkazy 3 nebo 4 znaky. Každá odpověď od serveru musí začínat indikací stavu operace (buď +OK, nebo -ERR).

Nejdůležitější POP3 příkazy (nutné pro příjem a smazání zprávy):

Ukázka POP3 komunikace (S – server, C – client):

$ telnet aisa.fi.muni.cz 110

Trying 147.251.48.1...

Connected to aisa.fi.muni.cz (147.251.48.1).

Escape character is '^]'.

S: +OK POP3 aisa.fi.muni.cz v2001.77 server ready

C: USER xkyselak

S: +OK User name accepted, password please

C: PASS ***

S: +OK Mailbox open, 52 messages

C: STAT

S: +OK 5 780766

C: LIST

S: +OK Mailbox scan listing follows

S: 1 770077

S: 2 1285

S: 3 1622

S: 4 4693

S: 5 3089

S: .

C: RETR 4

S: +OK 4693 octets

S: <POP3 server pošle zprávu 4>

S: .

C: DELE 50

S: +OK Message deleted

C: QUIT

S: +OK Sayonara

Connection closed by foreign host.


IMAP (Internet Message Access Protocol)

IMAP je (stejně jako POP3) protokol pro přístup k e-mailovým schránkám. V současné době se používá verze 4 definována v RFC 3501.

Na rozdíl od protokolu POP3 je IMAP vhodný pro klienty, kteří jsou trvale (nebo dlouhodobě) připojeni k síti. Zprávy zůstávají uloženy na serveru a průběžně se stahují na vyžádání. IMAP obsahuje podporu pro práci více připojených klientů zároveň, uchovávání stavů zpráv na serveru, podporu více složek a prohledávání zpráv na straně serveru. Tyto vlastnosti jsou výhodné pro uživatele, kteří ke své schránce přistupují z několika počítačů.

Protokol IMAP používá TCP protokol, port 143.

Spam

Relaying, open relay

Jako relay je často označován mailserver, systém určený pro přenos pošty. V počátcích Internetu až do roku 1990 bylo běžné, že mailservery byly nakonfigurovány tak, aby přes ně kdokoliv mohl posílat e-maily. Tyto tzv. open-relays pro Internet, resp. elektronickou poštu nepředstavovaly problém. Díky čím dál častějším případům zneužití těchto serverů spammery se dnes open-relays prakticky nevyskytují – a pokud ano, pak se dříve nebo později ocitnou na některém z blacklistů.

Blacklisting

Blacklisting rozhoduje, zda dopis je nebo není spam, buď podle adresy odesílatele, nebo lépe podle IP adresy, ze které dopis přišel na cílový SMTP server. Tyto adresy jsou přidávány na tzv. Černou listinu, blacklist. Na základě tohoto seznamu systém zprávu buď přímo odmítne, nebo je informace o umístění odesílatele na blacklistu použito při dalším filtrování pošty.

Greylisting

MTA, který používá greylisting, dočasně odmítá emaily od odesílatele, kterého nezná. Pokud se nejedná o spam, odesílatel se pokusí po určité době odeslat zprávu znovu, zatímco servery, které rozesílají spam se často neobtěžují odesílat zprávy vícekrát a spam tak v mnoha případech vůbec nedorazí.

Server používající greylisting si ukládá trojici údajů: IP adresu připojeného serveru, adresu příjemce a odesílatele na obálce. Pokud server obdrží zprávu s údaji, které nemá v databázi, email dočasně odmítne.

Výhody:

Nevýhody:

Antispamové filtry

Jestliže je spam doručen na cílový počítač, může uživatel použít antispamové filtry, které se dále snaží oddělit nevyžádanou poštu od relevantních zpráv. Jakmile MTA doručí poštu na cílový systém, přebírá ho MDA, který může zprávu filtrovat ještě před vlastním doručením do uživatelovy poštovní schránky. Mezi nejpoužívanější antispam patří SpamAssassin, který funguje jako e-mailový filtr a klasifikátor příchozích e-mailů. Na základě široké škály heuristických testů, kterými podrobí hlavičku i tělo zprávy, přiřadí každému e-mailu hodnotu vyjadřující pravděpodobnost, že daná zpráva je nevyžádaná. SpamAssassin může zvýšit svoji úspěšnost a snížit chybovost tím, že se „učí“ rozeznávat spam nad pravidelně aktualizovanou množinou nevyžádaných zpráv a množinou relevantních zpráv.

MDA potom podle získané klasifikace může např. zprávu přesunout do uživatelem definované přihrádky.

Také klientská aplikace (MUA) často obsahuje vlastní antispamový filtr, který buď pracuje samostatně, nebo využívá klasifikace SpamAssassinu (příp. jiných serverových antispamových řešení) uložené v hlavičce zprávy. Nevýhodou čistě klientského řešení je nutnost stahovat všechny e-maily včetně těch nevyžádaných.

Literatura

http://en.wikipedia.org/wiki/Post_Office_Protocol

http://cs.wikipedia.org/wiki/Spam#Blacklisting

http://en.wikipedia.org/wiki/Greylisting

http://cs.wikipedia.org/wiki/POP3

http://cs.wikipedia.org/wiki/SMTP

Archiv referátů (http://www.fi.muni.cz/~kas/p090/referaty/)