PV090: E-mail

Michal Rábek, <xrabek1@fi.muni.cz>

Email

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

picture

Zdroj: Computer Science Blog @ HdM Stuttgart

Ako email funguje

4 agenti

E-mailová adresa

SMTP

TCP Port Význam
25 SMTP
2525 SMTP (backup port, neoficiálny)
587 SMTPS (oficiálny)
465 SMTPS (neoficiálny)

SMTPS

Je SMTPS skutočne secure?

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

Mail client

2 typy:

  1. webové
  1. aplikácie

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

Ako ukladať email?

maildir

Čo je to MX v DNS?

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

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

SPF

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

Príklad:

big-email._domainkey.example.com    TXT v=DKIM1; p=76E629F05F70
     9EF665853333
     EEC3F5ADE69A
     2362BECE4065
     8267AB2FC3CB
     6CBE    6000

Zdroje: