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
- komunikuje s MUA
- -umožňuje pracovať so schránkami
E-mailová adresa
- reťazec v tvare:
user@domain.name.tld
- 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!
Príklad komunikácie
rabek@pofo:~$ telnet gmail-smtp-in.l.google.com 25
Trying 142.250.102.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP a640c23a62f3a-a9e565f355esi558983666b.477 - gsmtp
Klient:
helo gmail.com
Server:
250 mx.google.com at your service
Klient:
mail from: <rabek33@gmail.com>
Server:
250 2.1.0 OK a640c23a62f3a-a9e565f355esi558983666b.477 - gsmtp
Klient:
rcpt to: <rabek33@gmail.com>
Klient:
250 2.1.5 OK a640c23a62f3a-a9e565f355esi558983666b.477 - gsmtp
Klient:
data
354 Go ahead a640c23a62f3a-a9e565f355esi558983666b.477 - gsmtp
From: "michal@fake.com" <michal@fake.com>
Subject: This is just a test
Message-Id: <ABCDEFGH-1234-5678-ABCD-ABCDEFGHIJKLM@gmail.com>
To: <rabek33@gmail.com>
Content-Type: text/plain; charset=utf-8
Hello,
does it work?
---
Michal Fake
.
quit
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}%"