Elektronická pošta

Petr Bartel, xbartel@fi.muni.cz

Obsah

Historie:

1965MAILBOX - posílání zpráv v rámci jednoho počítače, ve formě ukládání zpráv do souboru a umístění souboru do adresáře uživatele
1971SNDMSG, READMAIL - Ray Tomlinson
1971znak @, jméno_uživatele@jméno_počítače
1971příkazy MAIL, MLFL přidány do protokolu FTP RFC(385)
1982protokol SMTP definovány v RFC821, později RFC2821 a následně RFC5321 SMTP (Simple Mail Transport Protocol) - cílem je přenášet zprávy efektivně a spolehlivě
1980'sUUCP unix to unix copy, RFC976 UUCP Mail Interchange Format Standard. Počítače spojené do UUCP projektu, jej používaly pro přesun zpráv mezi systémy. Definuje obálku (informace pro MTA) a zprávu (hlavička + tělo, informace o odesílateli i příjemci)
1980'sSendmail vyvinutý na UC Berkeley, a poskytováno s prvním BSD (4.0 a 4.1), co podporovalo TCP/IP, v roce 1983. Derivát derivermailu z ARPANETU
1984X.400 konkurent SMTP, používá se do dnes v komerčních systémech jako např. MS Exchange, jiný formát adresy G=Georg; S=Hansen; O=sintef; OU=delab; PRMD=uninett; ADMD=uninett; C=no (zárodek LDAPu), verze X.400/84 a X.400/88
1986IMAP, Internet Mail Access Protocol
1995Qmail, napsaný Danielem J. Bernsteinem, jako bezpečnější náhrada sendmailu
1996Exchange Server Beta 1, Microsoft, první veřejná verze vyšla téhož roku pod názvem Exchange 4.0 (X.400 client-server, X.500 adresářové služby)
1998Postfix, Wietse Venema, IBM

Jak zjistit kde hledat SMTP server?

Příkazy SMTP

komunikace mezi MUA a MTA

                  +----------+                +----------+
      +------+    |          |                |          |
      | User |<-->|          |      SMTP      |          |
      +------+    |  Client- |Commands/Replies| Server-  |
      +------+    |   SMTP   |<-------------->|    SMTP  |    +------+
      | File |<-->|          |    and Mail    |          |<-->| File |
      |System|    |          |                |          |    |System|
      +------+    +----------+                +----------+    +------+
                   SMTP client                SMTP server
  HELO    EHLO    MAIL    RCPT    DATA
  RSET    NOOP    QUIT    HELP    VRFY
  EXPN    VERB    ETRN    DSN     AUTH
  STARTTLS

možné odpovědi příkazu EHLO (ESMTP)

SENDSend as mail [RFC821]
SSOMLSend as mail oř terminal [RFC821]
SSAMLSend as mail and terminal [RFC821]
SEXPNExpand the mailing list [RFC821]
SHELPSupply helpful information [RFC821]
STURNTurn the operation around [RFC821]
S8BITMIMEUse 8-bít data [RFC1562]
SSIZEMessage size declaration [RFC1870]
SVERBVerbose Allman
SCHUNKINGChunking [RFC1830]
SBINARYMIMEBinary MIME [RFC1830]
SPIPELININGCommand Pipelining [RFC1854]
SDSNDelivery Status Notification [RFC1891]
SETRNRemote Message Queue Starting [RFC1985]
SSTARTTLSSecure SMTP [RFC2487]
SAUTHAuthentication [RFC2554]
SENHANCEDSTATUSCODESEnhanced status codes [RFC2034]
SDELIVERBYDeliver By [RFC2852]

ukázková SMTP komunikace

  telnet mail.example.com 25 nebo netcat mail.example.com 25

  S: server
  C: client

  C: navázání spojení se serverem (zpravidla na TCP portu 25)
  S: 220 mail.example.com ESMTP Postfix
  C: HELO example.net
  S: 250 Hello example.net
  C: MAIL FROM: 
  S: 250 Ok
  C: RCPT TO: 
  S: 250 Ok
  C: DATA
  S: 354 End data with .
  C: Subject: test message
  C: From: sender@example.net
  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

kódy odpovědi SMTP

kódvýznam
2xxpříkaz byl přijat
3xxpříkaz byl přijat, ale čeká se na další informace
4xxpříkaz nebyl přijat, dočasná chyba
5xxpříkaz nebyl přijat, pernamentni chyba

Koho můžeme potkat v souvislosti s el. poštou?

- alias postmaster@ je povinný podle RFC2142
MTAvlastnosti
postfix
  • modulární
  • nízká oprávnění
  • chroot /var/spool/postfix
  • snaží se nepoužívat statické buffery pro dynamická data
  • kontroluje proměnné prostředí
  • DSN, IPv6, LDAP, SQL, MIME, SASL, TLS
  • pluginy SPF, DomainKeys, DKIM, SenderID, sendmail milter
sendmail
  • nepříliš čitelná konfigurace, makrojazyk M4
  • podpora milteru (od v8.12)
  • vývoj postupně převzal MeTA1
  • monolitický
  • nízká bezpečnost (hlavně dříve)
qmail
  • bezpečný (proti přetečeny zásobníků, haldy, formátovacím řetězcům
  • modulární
  • nízká oprávnění jednotlivých procesu (každý proces jiná)
  • nízká až mizivá četnost update (viz. odměna za odhalení bezp. chyby)
  • zavedl Maildir
exim
  • monolitický, ale relativně bezpečný
  • content filter
  • ACL listy
  • nemá vlastního správce fronty (výkonnost)
Microsoft Exchange
  • sdílení zdrojů (kalendáře, kontakty, úlohy)
  • mobilní a webový přístup
  • antispam, antivirus
  • podpora clusteringu a replikace dát
  • MAPI, uzavřeny RPC protokol
MDAvlastnosti
procmail
  • filtrování a třídění zpráv do složek dle hlaviček
  • autoodpovidac
  • spuštění procmailu na příchozí postu v souboru ~/.forward
  • nastavení v souboru ~/.procmailrc
  • pravidlo ve tvaru :0 [flags] [ : [locallockfile]]
  • flags (H - hledej v hlavičce /default/, c - výtvor kopii, ! - opak podmínky)
  • 0 nebo více podmínek, podmínka začíná *
maildrop
  • filtrování a třídění zpráv do složek dle hlaviček
  • napsaný v C++, větší než procmail, ale efektivnější při práci se zdroji.
  • velké maily skenuje jako soubor /tmp a nenačitá je do paměti
  • jazyk pro filtrování je strukturovaný (if, $size, regexp, foreach)
  • adresář ~/.mailfilters se používá v embedded módu
  • maildrop -m nebo maildrop -M (spuštěno jinou aplikaci
  • nastavení v souboru ~/.mailfilter
  • maildirmake, podpora kvót
MUAimplementace
textové
  • Mutt
  • Pine
  • Elm
  • Mailx
grafické
  • Mozilla Thunderbird
  • Evolution
  • Microsoft Outlook
  • Kmail
webmail
  • Squirrelmail
  • IMP
MSAvlastnosti
MSA
  • mezi MUA a MTA
  • provádí kontroly FQDN, relay, hlaviček, existence lokálních jmen
  • RFC 4409, RFC 5068, port 587
  • požaduje, aby byl klient autorizovaný a autentifikovany

Kde můžeme o poště zaslechnout?

25SMTP
80HTTP (webmail)
110POP3
143IMAP4
443HTTPS (webmail)
465SSMTP
587SUBMISSION
993IMAPS
995POP3S
viz. /etc/services

Jak se MUA k poště dostane?

Jak vypadá zpráva?

Kam se zpráva uloží?

Nevyžádaná pošta?

Struktura Postfixu

architektura Postfixu

Schéma architektury (převzato z http://www.akadia.com/services/postfix_mta.html)

Během svého průchodu systémem Postfix se zprávy nacházejí v různých frontách zpráv. O jejcih přesun mezi nimi se stra správce fronty (qmgr).

Fronty zpráv
názevvýznam
maildrop sem se vloží nová zpráva, která vznikla lokálně v systému
incoming příchozí lokální nebo z Internetu, prošly očistou a čekají na zpracování
activepřesunuté z incoming, právě zpracovávané
deferreddočasně odložené, z důvodů chyby

Celý systém řídí residentni démon Master, který spouští jednotlivé démony (služby) podle potřeby. Neboť přistupuje k službám systému vyžadujícím oprávnění administrátora (root) i proces sám, toto oprávnění potřebuje. Ostatní démoni běží pod neprivilegovaným uživatelem definovaným v konfiguraci (postfix).

Existuje čtvero způsobu jak se může zpráva objevit v systému.

Komponenty systému Postfix
názevfunkce
sendmail slouží pro odeslání (vytvoření) zprávy Postfixu, je kompatibilní se Sendmailem
pickup sleduje adresář (frontu) maildrop. V případě že se objeví nová zpráva, ujme se ji a předá ji démonů cleanup
cleaner přidává chybějící hlavičky; může překládat podle kanonických nebo virtuálních mapování; informuje qmgr o nové zprávě v incoming frontě
qmgr správce fronty; kontaktuje démony doručení (local, pipe, smtp); informuje o přesunutí adresy
bounce generuje zprávu o nedoručitelnosti, případně vrátí zprávu
defer generuje zprávu o nedoručitelnosti, z důvodů chyby nebo nedosažitelnosti cíle
smtpzjišťuje cíl pro doručení zprávy
smtpdpřijímá síťová spojení; provádí kontroly
localdoručuje místním uživatelům; příp. (procmail/maildrop)
pipeposílá zprávy rourou pro jiné transporty; např. UUCP
resolve rozlišuje mezi lokálním a vzdáleným doručením; může se orientovat podle transport_table

Konfigurace Postfixu

O konfiguraci postfixu rozhodují převážně dva soubory master.cf a main.cf (obvykle umístěné v /etc/postfix).

formát master.cf

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
      smtp      inet      n       -       -       -       -       smtpd
název sloupcevýznam
servicenázev služby
typetransport type, inet, fifo, unix
privateomezení přístupu pouze pro Postfix
unprivnízká oprávnění
chrootzměna kořenového adresáře
wakeupjak často kontrolovat
maxprocmax. počet procesů
command + argspříkaz, -o parametry, -v upovídanost

důležité volby main.cf

soubor se dá editovat ručně pomocí textového editoru nebo pomocí příkazu postconf -e "volba = hodnota". S volbou -d dostaneme defaultní nastavení a s volbou -n nastaveni, které je změneno oproti defaultnímu nastavení. Systém Postfix je v podstatě schopen ihned fungovat s defaultním nastavenim, pokud nastavíme alespoň doménu, kterou spravujeme

Postfix používá několik způsobů pro ukládání hodnot. Mohou být odděleny mezerou, čárkou, novým řadkem, ... nebo mohou být uloženy ve vyhledávacích tabulkách. Podporované typy zjistíme pomoci postconf -m, tabulku v požadovaném formátu vytvoříme pomocí postmap typ_tabulky:/cesta/k/tabulce/tabulka. V případě aliasů se používá postalias, příp. newaliases

název volbyvýznam, hodnota
myhostnamenázev stroje, FQDN, gethostbyname
mydomaindoména, příp. vynechá první část myhostname
myoriginstandardně myhostname, dá se nastavit mydomain
mydestinationkteré domény přijímáme
mynetworkskteré stroje, sítě jsou autorizované
queue_directoryzapíná chroot
local_recipient_mapsdefinuje, které uživatele systém má (zná)
relay_domainspro které domény děláme backup MX

Open Relay - je systém, který dovoluje odesílání pošty pro kteroukoliv doménu

Jak se Postfixu prokážeme?

SASL je metoda, která zpřístupňuje externí ověřovací mechanismy. Jejím účelem je ověření klientů při snaze pracovat se serverem (zdrojem).

Některé volby SASL
volbavýznam,hodnota
smtpd_sasl_auth_enablepovoluje používání SASL (SMTP AUTH)
broken_sasl_auth_clientspodpora pro klienty, co neumí poznat SMTP AUTH
smtpd_sasl_security_optionsmůžeme vypnout např. mechanismus ANONYMOUS pomocí volby noanonymous

Postfix komunikuje šifrovaně

Postfix umužnuje používat šifrovanou komunikaci jak pro spojení mezi servery, tak při spojení mezi klientem a serverem. (ve smyslu smtp a smtpd). Používá certifikáty podepsané certifikační autoritou. Pomáhá zabezpečit hesla v plain textu i komunikaci samotnou.

Některé volby SSL
volbavýznam,hodnota
smtpd_tls_auth_onlyvyžaduje komukaci TLS
smtp_use_tlsTLS pro klienta
smtpd_use_tlsTLS pro server
smtpd_tls_*fileumístění souborů s cert.

Jak se umí Postfix vypořádat se nevyžádanou poštou

 ukazkova komunikace SMTP

 server: 220 smtp.example.com ESMTP Postfix  -- smtpd_client_restrictions
 klient: HELO mail.ora.com
 server: 250 smtp.exmaple.com                -- smtpd_helo_restrictions
 klient: MAIL FROM: 
 server: 250 OK                              -- smtpd_sender_restrictions
 klient: RCPT TO: 
 server: 250 OK                              -- smtpd_recipient_restrictions
 klient: DATA
 server: 354 End data with . -- smtpd_data_restrictions
 klient: To: Kyle Dent
         From: 
         Subject: SMTP Example               -- header_checks

         This is a message body.
         It continues until a dot
         is typed on a line by itself.
         .                                   -- body_checks
Některé zajímavé volby
volbavýznam,hodnota
permit_mynetworkspovažuje hosty uvedéne v mynetworks za oprávněné
reject_rbl_listdefinuje server s RBL listem
reject_uknown_clientzakáže klienty bez PTR
smtpd_helo_requiredpožaduje záhájení komunikace příkazem HELO
reject_unknown_hostnamezakáže klienty, kteří nemají A nebo MX záznam
reject_non_fqdn_hostnamezakáže klienty bez FQDN
permit_mx_backuppřijme poštu, pokud je náš mailserver uveden v DNS pro tuto doménu

Literatura