Martin Kyselák, xkyselak@fi.muni.cz
poštovní klient, který zpracovává zprávy u uživatele
například: pine, mutt, Mozilla Thunderbird, Evolution
server, který se stará o doručování zprávy na cílový systém adresáta
například: Sendmail, Postfix, Qmail
program pro lokální doručování, který umísťuje zprávy do uživatelských schránek
například: procmail
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:
orig-date: datum a čas, kdy uživatel předal zprávu poštovnímu systému k doručení
from: seznam adres odesílatele zprávy, pokud je uvedena více než jedna adresa, musí být přítomna i hlavička „sender“
Příklady nepovinných hlaviček:
sender: adresa odesílatele
to: seznam adresátů
cc: carbon copy – seznam adres, na které má být doručena kopie zprávy
bcc: blind cc – podobně jako cc, ale tyto adresy nejsou posílány ostatím adresátům zprávy
message-id: unikátní řetězec jednoznačně identifikující zprávu
in-reply-to: id zprávy na kterou se odpovídá
references: id předchozích zpráv
subject: předmět zprávy
keywords: klíčové slova
resent-{date,from,sender,to,cc,bcc} – pole, která se do hlavičky přidávají kdykoliv je zpráva uživatelem opětovně vložena do transportního systému.
recieved: adresa serverů, které zprávu přijaly
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
text (textová zpráva, může být v různých kódováních, používané podtypy: plain, html)
multipart (zpráva se skládá z více částí, které mohou být různých typů; tím je možné přílohy větvit do stromů (část typu multipart) plní úlohu uzlu, ostatní typy jsou listy)
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.
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 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):
HELO (klient se představuje serveru)
MAIL FROM (určení adresy odesílatele)
RCPT TO (určení adresy příjemce)
DATA (zadávání vlastní zprávy, ukončení řádkem s tečkou („.“))
QUIT (uzavření spojení)
Příkaz pro nápovědu je „HELP“, kde najdeme také popis jednotlivých příkazů.
$ 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.
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í 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:
access (pravidla určující od koho přijímat/nepřijímat e-maily)
aliases, virtual (konfigurace aliasů)
canonical, generic (přepisovací pravidla pro adresy)
transport (konfigurace relay na základě adresy)
header_checks (modifikace nebo blokace e-mailu na základě (ne)existence hlaviček)
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 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.
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 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):
USER (zadání přihlašovacího jména uživatele)
PASS (zadání hesla uživatele)
STAT (zobrazí počet zpráv a jejich celkovou zprávu v bajtech)
LIST (vypíše seznam zpráv; jen číslo a velikost zprávy v bajtech)
RETR (zobrazí zprávu; nemaže ji)
DELE (označí zprávu ke smazání; bude smazána po zadání příkazu QUIT)
QUIT (uzavření spojení)
$ 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 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.
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 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.
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:
není nutná konfigurace koncových klientů
malá náročnost na systémové prostředky serveru
Nevýhody:
některé špatně nakonfigurované systémy se nemusí pokoušet odeslat email znovu
některé systémy mohou po dočasném odmítnutí odeslat odesílateli zprávu, že email byl dočasně odmítnut
dochází ke zpoždění doručení zpráv
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.
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/)