Cílem protokolu SMTP je přenášet e-maily spolehlivě a efektivně. Tento protokol není závislý na přenosovém subsystému a vyžaduje pouze spolehlivý přenosový kanál. Ve svojí základní podobě je to relativně jednoduchý textově orientovaný protokol, který umí předávat e-maily z jednoho serveru na druhý. Pokud je ta samá zpráva poslána více příjemcům na cílovém serveru, tento protokol zajišťuje přenos pouze jedné kopie. Zpráva může putovat rovnou k cílovému mailserveru a nebo může putovat přes několik SMTP mailserverů typu relay nebo gateway (zpráva se přenáší do nějakého jiného síťového prostředí) až k cílovému mailserveru. "Next-hop" mailserver je vybrán na základě DNS MX záznamu. Když SMTP klient chce poslat e-mail, vytvoří obousměrný přenosový kanál k SMTP serveru. Klientovým úkolem je přenést e-mail na server a nebo ohlásit chybu. Server odpovídá na každý příkaz klienta číselnou odpovědí (Reply), indikující jeho stav. Jakmile je přenosový kanál vytvořen, SMTP klient pošle příkaz MAIL, kterým inicializuje přenos zprávy na mailserver.
+----------+ +----------+ +------+ | | | | | User |<-->| | SMTP | | +------+ | Client- |Commands/Replies| Server-| +------+ | SMTP |<-------------->| SMTP | +------+ | File |<-->| | and Mail | |<-->| File | |System| | | | | |System| +------+ +----------+ +----------+ +------+ Client-SMTP Server-SMTP Model for SMTP Use
SMTP je "push" protokol, který nedovoluje stahovat e-maily ze vzdáleného serveru. Ke stažení e-mailů se použije poštovní klient za použití protokolu POP3 nebo IMAP.
Binární data se musela vždy konvertovat do textu (Base64), protože tento protokol uměl přenášet pouze ASCII data, což má za následek zvětšení objemu dat o 33.3%. Dnes ale většina SMTP serverů podporuje 8-bit MIME rozšíření, dovolující přenášet binární data stejně dobře jako plain text.
Programem telnet lze jednoduše otestovat funkčnost SMTP serveru otevřením spojení se vzdáleným strojem na TCP portu 25. V následující ukázce je klient označen jako C, server jako S.
telnet www.example.com 25 S: 220 www.example.com ESMTP Postfix C: HELO mydomain.com S: 250 Hello mydomain.com C: MAIL FROM: <sender@mydomain.com> S: 250 Ok C: RCPT TO: <friend@example.com> S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: Subject: test message C: From: sender@mydomain.com C: To: friend@example.com C: C: Hello, C: This is a test. C: Goodbye. C: . S: 250 Ok: queued as 12345 C: QUIT S: 221 Bye
Na rozdíl od ukázky téměř všichni klienti místo příkazu HELO použijí napřed příkaz EHLO. Pokud server příkaz nezná, znamená to že nepodporuje ESMTP rozšíření. V tom případě klient použije příkaz HELO.
SMTP server během komunikace vrací číselné kódy (Reply) doprovázené stručným textem, které lze rozdělit do následujících skupin:Uživatelé se příliš nestarají o řídící sekvence, jako je <CR><LF>.<CR><LF>. Proto SMTP klient musí zařídit zrušení takové sekvence přidáním další tečky na začátek řádku. Když řádek s textem dorazí na SMTP server, ten ověří první znak. Jsou-li dvě tečky na řádku pak jednu odstraní. Je-li jediná tečka na řádku pak to namená konec e-mailu.
Zpět na obsahPříjemcovo doménové jméno je pravá část e-mailové adresy za znakem zavináč. Jen resolvovatelné, plně kvalifikované doménové jméno (FQDN) je dovoleno pro použití v SMTP. Jinými slovy jsou to taková jména, které lze resolvovat na MX záznamy nebo A záznamy. Provedením DNS dotazu na MX záznamy získá SMTP klient seznam adres mailserverů spolu preferenčním číslem. Jestliže nejsou nalezeny žádné MX záznamy ale jen A záznamy, pak jsou tyto použity místo MX záznamů. Jestliže je nalezen jeden nebo více MX záznamů pro dané jméno, pak SMTP systém nesmí použít A záznamy. Jestliže MX záznamy jsou přítomny, ale nejsou použitelné, pak je ohlášena chyba.
Klient se pak pokusí vytvořit SMTP spojení s jedním z těchto serverů počínaje tím, který má nejnižší preferenční číslo. Zprávu předá prvnímu serveru, se kterým se podaří vytvořit spojení.
Zpět na obsahObálka zprávy je něco jiného než hlavičky zprávy, obsahuje odesílatele zprávy - kam se má vrátit chybová zpráva pokud ten e-mail není doručitelný a obsahuje jednoho nebo více příjemců zprávy. Adresát zprávy nemusí být uvedený v hlavičkách, e-maily jsou doručovány podle obálky a nemusí mít vůbec žádnou korespondenci s hlavičkami e-mailu. Jedná se pouze o transportní věc, takže když se odesílá e-mail, tak si první MTA vygeneruje obálku na základě hlaviček. Pak ten e-mail s obálkou případně různě upravovanou putuje Internetem, a jakmile se doručí na cílový MTA, tak ten tu obálku zahodí a do schránky uživateli uloží jenom hlavičky s tělem zprávy. Obálka je pro uživatele neviditelná.
Pokud se zjistí že e-mail je nedoručitelný, tak se generuje chybová zpráva a posílá se na odesílatele uvedeného v obálce (první MTA). Aby chybové zprávy necyklily Internetem při neexistenci ani toho původního odesílatele, tak se chybová zpráva posílá s prázdným odesílatelem.
Hlavičky jsou rozdělené na řádky, které vypadají jako nějaký klíč, například: Subject: mezera <hodnota/parametry>
Hlavičky mohou být napsány na více řádků, pokračovací řádek hlavičky se pozná tak, že začíná bílým znakem.
Pokud v hlavičkách neřekneme jinak, tělo zprávy nesmí obsahovat jiné znaky než bílé znaky a tisknutelné ASCII znaky.
Chceme-li v e-mailu posílat binární data, je to potřeba předem říci hlavičkou Content-Transfer-Encoding: 8-bit, a nebo data překódovat do textu - Base64. V hlavičkách zprávy nesmí být žádné osmibitové znaky mimo US-ASCII.
From: autor nebo autoři zprávy, jednu zprávu může vytvářet více autorů.
Sender: zde může být skutečný odesílatel zprávy
Reply-To: na jakou adresu se má poslat odpověď, informace pro cílového MUA
To: adresa hlavního příjemce
Cc: carbon copy - další příjemci
Bcc: blind carbon copy; MTA před odesláním tuto hlavičku odstraní
Message-Id: jedinečná/jednoznačná identifikace zprávy, používá se na detekci zacyklení pošty
In-Reply-To: identifikátor předchozí zprávy, MUA jsou schopni na základě této informace generovat strom
References: pokud autor zprávy reaguje na více zpráv, pak jsou zde jejich identifikátory
Received: každý MTA přidává tuto hlavičku se svým podpisem, možnost odhalit kudy ta zpráva šla (lze falšovat)
Return-Path: sem MTA nebo MDA umístí odesílatele z obálky
Date: datum vzniku zprávy
Subject: předmět, věc
Keywords: klíčová slova
X-<cokoliv>: nestandardní hlavičky, někteří MUA je podporují
Jednoduché prověření počtu Received: ve hlavičkách e-mailu se ukázalo být efektivní metodou detekce cyklů v mailsystémech.
V původním RFC 822 se nepočítá s multimediálními netextovými zprávami, taktéž národní textová rozšíření nejsou zahrnuta, dalším omezením je maximální délka řádku do 1000 znaků. Tyto problémy řeší MIME.
Mime-Version: 1.0
Content-Type: <typ>[<podtyp>[; <parametry> ...]]
Content-Transfer-Encoding: <přenosové kódování>
text plain, html, ...
image, audio, video gif, jpeg, avi, ...
application octet-stream, postscript, pdf, ...
X-cosi nestandardní typ
multipart/mixed několit typů dat, např. text a obrázky
mutipart/parallel více částí naráz prezentovatelné, text + audio
multipart/aternative např. text a html, MUA si může vybrat jak zprávu zobrazí
Spammer na rozeslání množství e-mailů s komerčním obsahem vynaloží mizivou hodnotu. Vždy ale na svém úsilí vydělá, pokud dojde třeba jen k nepatrné odezvě na inzerovaný produkt. Že svým chováním obtěžuje miliony uživatelů ho příliš nezajímá. Mezi účinné a v současnosti nejpoužívanějěí metody pasivní obrany patří:
Databáze open-relay mailserverů, které umožňují rozesílat e-maily od kohokoliv na Internetu. Takové servery jsou samozřejmě vyhledávané a zneužívané spammery.
Tyto filtry fungují tak, že z potenciálního spamu spočítají hash a výsledek porovnají s databází známých spamů, která je uložena na centrálním serveru. Mezi zástupce patří nástroj Razor.
Pracují na principu vyhledávání podobností v nevyžádané poště proti běžné poště uživatele.
Jedná se o poměrně důmyslný algoritmus, který při dostatečně velké databázi je i velmi účinný.
Typickým zástupcem je SpamAssassin.
Oblíbenou technikou spammerů je připojovaní se na servery s nejnižší prioritou (s nejvyšší numerickou hodnotou). Tuhle techniku používají taktéž některé počítačové viry za účelem vyhnutí se antivirovému softwaru.
Zpět na obsahAž do roku 1990 bylo normální konfigurací mailserveru dovolit každému na Internetu odesílat přes něj e-maily. Takové nastavení nečinilo tehdy problémy, protože na vládních a univerzitních sítích, kde Internet začínal, bylo zakázáno posílat komerční zprávy. V současné době je open-relay ze známých důvodů nežádoucí, a na Internetu se už téměř nevyskytuje. Pokud ano, pak je to chyba, protože takový mailserver se brzo vyskytne na blacklistu. Všechny odesílané zprávy z něho budou ostatními mailservery odmítány. Open-relay blacklisty jsou často generovány automatickou detekcí, posíláním testovacích e-mailů na takové servery. Open-relay je zneužíváno spammery, protože odeslané e-maily neodkazují na spamerův mailserver, ale na nějaký jiný server. A tak se stane, že se na black-listu místo spammera ocitne zneužitý mailserver.
Zpět na obsahSpamAssassin je e-mailový filtr a klasifikátor, který používá k identifikaci spamu širokou škálu heuristických testů aplikovaných na e-mailové hlavičky a těla. Podrobí každou zprávu testu a přiřadí jí hodnotu indikující pravděpodobnost, že se jedná o spam. Údajná úspěšnost detekce spamu je někde mezi 95% a 100% v závislosti na typu e-mailů, které uživatel dostává. Nesprávné označení e-mailu za spam, který nebyl spamem se udává někde na 0.1%. Zajímavé čtení o úspěšnosti při různém nastavení filtrů naleznete ve stromu rozbalené distribuce: Mail-SpamAssassin-3.1.0/rules/STATISTICS-set*.txt
SpamAssassin-neni program na manipulaci s e-maily.Distribuce je ke stažení zde: http://wiki.spamassassin.org
Zpět na obsahSendmail je robustní a dnes snad už i vychytaný program. V současnosti se používá verze 8.13.5. Při typické konfiguraci běží sendmail jako dva démony. Jeden démon je privilegovaný jako SMTP server, čeká na spojení na TCP portu 25 a stará se o odeslání čekající pošty z fronty v adresáři /var/spool/mqueue/. Druhý démon běží pod uživatlem a skupinou smmsp, a hlídá zda do neprivilegované fronty s poštou /var/spool/clientmqueue/ nepřibyla nějaká neodeslaná pošta. Tu se pak periodicky pokouší odeslat místnímu SMTP serveru.
Stav neprivilegované fronty lze kontrolovat příkazem:mailq -Ac
Stav privilegované fronty může superuživatel ověřit stejným příkazem bez parametrů. Ke statistice mailového provozu slouží mailstats.
Sendmail se typicky spouští těmito příkazy:# Sendmail jako MTA /usr/sbin/sendmail -L sm-mta -bd -q1h # Sendmail pro kontrolu MSP fronty ("-q30m" kontroluj frontu každých 30 minut) /usr/sbin/sendmail -L sm-msp-queue -Ac -q30mKonfigurace
Hlavní konfigurační soubory jsou dva: /etc/mail/sendmail.cf; /etc/mail/submit.cf. Po nahlédnutí do těchto souborů většina rozumných lidí pochopí, že rozsáhlá ruční editace není triviální, protože tyto soubory jsou optimalizovány pro čtení sendmailem.
Konfigurační soubory jsou generovány ze souborů /etc/mail/sendmail.mc; /etc/mail/submit.mc pomocí makroprocesoru m4.
Další soubory s příponou ".mc" pro jinou konfiguraci jsou v adresáři /usr/share/sendmail-cf/cf/.
/usr/share/sendmail-cf/m4/ je adresář s makry
# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf # m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/submit.mc > /etc/mail/submit.cf
Dalším konfiguračním souborem nezbytným pro správnou funkci sendmailu je /etc/mail/local-host-names kde jsou uvedeny adresy počítačů, které má brát sendmail jako lokální. Pokud na server přijde pošta s cílovou adresou na některý z uvedených strojů, tak se uloží do lokálního mailboxu.
Soubor /etc/mail/aliases slouží k definování lokálních aliasů. Jeho řádky mají tvar: alias: adresa1, adresa2, ...
Aby sendmail mohl pracovat se souborem aliases, musí se tento soubor převést do databázového tvaru - to zajistí příkaz newaliases, který ze souboru /etc/mail/aliases vytvoří databázový /etc/mail/aliases.db.
Příklad souboru /etc/mail/access:
aisa.fi.muni.cz OK
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
freepics.com ERROR
sval@bach.fi REJECT
Databázi vygenerujete takto:
makemap hash /etc/mail/access.db < /etc/mail/accessPříklady maker:
# SMTP server jako relay define(`SMART_HOST', `smtp:proto-beta.lab.fi.muni.cz') # přístupová databáze pro odmítání konkrétních uživatelů a domén FEATURE(`access_db', `hash -o /etc/mail/access.db')Úplný popis maker naleznete v distribuci: sendmail-8.13.5/cf/README
Jednotlivé řádky souboru /etc/mail/ip_allow; příp. /etc/mail/name_allow tvoří IP adresy strojů a sítí příp. 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ů, bude odmítnut.
Zpět na obsah