E-mail je služba elektronickej pošty, ktorá rieši problém zdĺhavého procesu doručovania pošty fyzickej výmenou za (takmer) nekonečné množstvo letákov v poštovej schránke.
High-level prehľad
Email stack sa skladá z: - 4 typov software - protokolu pre posielanie správ - protokolu pre príjmanie správ

Zdroj: Computer Science Blog @ HdM Stuttgart
Ako email funguje
4 agenti
- MUA (Mail User
Agent) / mail client
- kompozícia správ
- odosielanie správ
- prezeranie schránky
- MSA (Mail Submission
Agent) / komponenta mail serveru
- príjma poštu od MUA
- podáva ju MTA
- MTA (Mail Transfer
Agent) / komponenta mail serveru
- zistenie destinácie z email adresy adresáta
- MTA si medzi sebou posielajú správy
- MDA (Mail Delivery
Agent) / správca poštovej schránky
- príjma správy od MTA
- uladá ich lokálne
- -umožňuje pracovať so schránkami
E-mailová adresa
- reťazec v tvare:
user@domain.name.tld
- nutný DNS request
- alebo
user@[10.0.0.110]
, kde[x.y.z.w]
je tzv. doménový literál- dnes sa príliš neodporúča použiť
- mnohé mailservery takúto adresu zamietnu
SMTP
- protokol pre odosielanie elektronickej pošty
- pracuje nad TCP
- komunikácia medzi:
- MUA -> MSA
- MTA -> MTA
- prvá sa posiela obálka
MAIL FROM: <user@example.com>
RCPT TO: <dest@domain.net>
- toto sa môže líšiť od hlavičiek e-mailu!
TCP Port | Význam |
---|---|
25 | SMTP |
2525 | SMTP (backup port, neoficiálny) |
587 | SMTPS (oficiálny) |
465 | SMTPS (neoficiálny) |
SMTPS
- šiforvaná verzia
- používa TLS
- šifrovanie
- digitálne podpisy
- integrita
- SMTPS môžeme používať aj na porte 25 ak na začiatku komunikácie
pošleme mail serveru príkaz
STARTTLS
Je SMTPS skutočne secure?
- nie úplne
- správy sa v šifrovanej podobe posielajú len medzi
- MUA a MSA
- jednotlivými MTA
- samotný MTA manipuluje so správou vo forme plain textu!
- protokol nie je end-to-end šifrovaný
Príklad komunikácie
rabek@pofo:~$ telnet example.com 25
220 mx.example.com ESMTP smtp
Klient:
helo example.com
Server:
250 mx.example.com at your service
Klient:
mail from: <sender@example.com>
Server:
250 OK
Klient:
rcpt to: <rcver@domain.net>
Server:
250 OK
Klient:
data
Server:
354 Go ahead
Klient:
From: "sender@example.com" <sender@example.com>
Subject: This is just a test
Message-Id: <ABCDEFGH-1234-5678-ABCD-ABCDEFGHIJKLM@example.com>
To: <rcver@domain.net>
Content-Type: text/plain; charset=utf-8
Hello,
does it work?
---
Michal Fake
.
Server:
250 OK
Klient:
quit
Server:
221 Bye
Prílohy
- email bol pôvodne navrhnutý ako výhradne textový protokol
- ako teda posielame videá/obrázky/iné non-plaintext súbory?
- využíva sa Base64 kódovanie
- MIME
Content-type
text/plain
pre človekom čitateľný plaintextimage/png
pre PNG obrázkyaudio/mp3
pre MP3 zvukové súbory- kompletný zoznam
Mail client
2 typy:
- webové
- Gmail
- Yahoo! Mail
- Seznam.cz
- aplikácie
pine
,alpine
,mutt
(ncurses
based)- KMail, Thunderbird, Blue Mail (nie je FOSS!)
- Apple mail
POP3 vs IMAP
Protokoly POP3 (Post Office Protocol 3) a IMAP (Internet Message Access Protocol) sa používajú pre sťahovanie pošty z MDA do MUA (zo serveru do klienta). Oba protokoly majú svoje výhody aj nevýhody, nedá sa objektívne povedať, ktorý z nich je lepší.
POP3 | IMAP |
---|---|
Prístup z najviac jedného klienta | Prístup z viac klientov súbežne |
Offline prístup možný | Prezeranie pošty vyžaduje pripojenie na internet |
Ukladá poštu lokálne | Žiadne sťahovanie, len cache |
Stiahnuté správy sa zmažú z MDA | Prezeranie správ ich nemaže |
Šetrí diskový priestor serveru | Môže šetriť diskový priestor klienta |
Moja preferencia: IMAP + klient, ktorý ponecháva správy v cache, aby bola prístupná aj offline.
Mail server
- stroj, na ktorom je nakonfigurovaná a spustená emailová služba pre danú doménu
- agreguje MSA, MTA a MDA
- ak daný stroj pracuje iba ako MTA, nazývame ho aj relay
- väčšinou nenájdeme software, ktorý by implementoval všetkých 3
potrebných agentov zároveň
- je teda nutné vhodne párovať MTA (napr. Exim, Postfix, …) a MDA (napr. Dovecot, Procmail, Cyrus, …)
Ako ukladať email?
mbox
- zastaralá (legacy) metóda
- všetky správy v jedinom súbore
- súbežný prístup ku mailovej schránke vyžaduje synchronizančé zariadenia
- neexistuje štandard, len všeobecne známe konvencie ako ho implementovať
- komentuje ich RFC4155
- každý mail server si ho implementuje sám a môžu byť rozdiely
- všetky správy v inboxe sú v jednom jedinom textovom súbore
- nová správa začína riadkom
From
- problém: čo ak bude samotné telo e-mailu obsahovať riadok začínajúci
From
? - riešenie: mail server pridá na začiatok znak
>
, takže>From:
- nerobia to ale všetky mailservery
maildir
- správy sa ukladajú v súborovom systéme
- jeden súbor <=> jedna správa
- vytvorenie programom
maildirmake(1)
- 3 podadresáre:
tmp
pre správy, ktoré práve prichádzajú po siete (a iné dočasné súbory)new
pre správy, ktoré boli doručené, ale ešte neskontrolované mail klientomcur
pre správy, ktoré boli doručené a videné mail klientom
- databázy

Čo je to MX
v DNS?
- skratka pre Mail eXchanger
MX
záznam ukazuje na mail server v danej doméne- atribúty:
- priorita (nižšie číslo má prednosť)
- doménové meno
MX
záznamov môže byť pre jednu DNS zónu viacero- vyskúšajte:
host -t MX gmail.com
- ak má viacero
MX
záznamov rovnakú prioritu a neexistuje žiadne iné kritérium na základe ktorého by sme si mohli vybrať jeden konkrétny RFC 5321, Sekcia 5.1 vyžaduje, aby SMTP server zoradil tieto ekvivalentné záznamy v náhodnom poradí - dôvod: minimalizácia záťaže
- vyskúšajte:
MX
záznam vracia iba doménové meno, je nutné vykonať ešte DNS request- jeden mail server môže mať viacero
A/AAAA
záznamov - DNS resolver musí zoznam IP adries usporiadať podľa klesajúcej preferencie
- jeden mail server môže mať viacero
Príklad BIND zóny s
MX
záznamom
; base zone file for example.com
$TTL 2d ; default TTL for zone
$ORIGIN example.com. ; base domain-name
; Start of Authority RR defining the key characteristics of the zone (domain)
@ IN SOA ns1.example.com. hostmaster.example.com. (
2003080800 ; serial number
12h ; refresh
15m ; update retry
3w ; expiry
2h ; minimum
)
; name server RR for the domain
IN NS ns1.example.com.
; mail server RRs for the zone (domain)
IN MX 10 mail.example.com.
; the second mail servers is external to the zone (domain)
IN MX 20 mail.example.net.
; domain hosts includes NS and MX records defined above
; plus any others required
; for instance a user query for the A RR of joe.example.com will
; return the IPv4 address 192.168.254.6 from this zone file
ns1 IN A 192.168.254.2
mail IN A 192.168.254.4
Zdroj: Dokumentácia BIND9
Stalwart mail server
Tento mail server ma zaujal tým, že je sa jedná o all-in-one mail server, teda implementuje SMTP, POP3, IMAP, správu mailboxu, a iné funkcie zároveň. Jedná sa o free open source projekt, ktorého vývoj začal v novembri 2021 a vyvíja ho londýnska firma Stalwart Labs. Kód projektu je verejný na GitHub a je napísaný v jazyku Rust.
Konfigurácia
- jazyk TOML.
- podpora dynamických hodnôt - výrazov v konfiguračnom súbore, ktoré sa budú re-evaluovať počas behu serveru
- flexibilná adaptívna konfigurácia
- filozofia safe defaults
- konfiguračné možnosti, ktoré vynecháme budú predvyplnené tak, aby bolo optimalizované zabezpečenie
Príklad konfigurácie
Príklad minimálneho konfiguračného súboru
config.toml
:
[server.listener."smtp"]
bind = ["[::]:25"]
protocol = "smtp"
[server.listener."submissions"]
bind = ["[::]:465"]
protocol = "smtp"
tls.implicit = true
[server.listener."imaptls"]
bind = ["[::]:993"]
protocol = "imap"
tls.implicit = true
[storage]
data = "rocksdb"
fts = "rocksdb"
blob = "rocksdb"
lookup = "rocksdb"
directory = "internal"
[store."rocksdb"]
type = "rocksdb"
path = "%{env:STALWART_PATH}%/data"
compression = "lz4"
[directory."internal"]
type = "internal"
store = "rocksdb"
[tracer."stdout"]
type = "stdout"
level = "info"
ansi = false
enable = true
[authentication.fallback-admin]
user = "admin"
secret = "%{env:ADMIN_SECRET}%"
Spam
Spam označuje všetky správy, ktoré sú
nevyžiadané/obťažujúce/nebezpečnné.
Obsahom spamu môže byť malwave, podvody (za účelom získania peňazí,
atď…), vtieravé reklamy, fiktívne obchodné ponuky, …
Techniky boja proti spamu
- blacklisting
- databáza domén, z ktorých prichádza spam
- spam blacklist lookup
- greylisting
- ak dostanem mail zo serveru, ktorý nepoznám, zamietnem mail
- pošlem error code 4xx
- môžem napríklad predstierať, že som preťažený
- čakám určitý čas
- ak sa jednalo o reálnu správu, MTA pokus zopakuje
- spam filtre
- rozlišovanie spamu od normálnej pošty hľadaním podozrivých patternov
- napr.
SpamAssassin
,dSpam
sa oba používajú na FI
- legitimizácia
- SPF (Sender Policy Framework)
- DKIM (DomainKeys Identified Mail)
SPF
- DNS záznam typu
TXT
- zoznam všetkých serverov z danej domény, ktoré smú odosielať maily
Vyskúšajte: host -t TXT fi.muni.cz
Príklad:
v=spf1 ip4:192.0.2.0 ip4:192.0.2.1 include:examplesender.email -all
DKIM
- DNS záznam typu
TXT
- súkromným kľúčom mail servery z danej domény podpisujú maily
- DKIM záznam obsahuje verejný kľúč, ktorým môžeme podpis overiť
- obsahuje aj verziu DKIM a TTL
Príklad:
big-email._domainkey.example.com TXT v=DKIM1; p=76E629F05F70
9EF665853333
EEC3F5ADE69A
2362BECE4065
8267AB2FC3CB
6CBE 6000