Elektronická pošta

Jan Horáček, xhorace4@fi.muni.cz

Obsah

Model

Zjednodušený model elektronické pošty (zdroj):

2 základní třídy protokolů

  1. Protokol pro přenos pošty (E/SMTP).
  2. Protokol pro čtení pošty (POP3, IMAP).

Architektura elektronické pošty [PV077]

  1. MUA: Mail User Agent.

    Aplikace koncového uživatele (často přímo na jeho stroji), která umožňuje číst a posílat zprávy.

    Příklady: mutt, thunderbird, elm, exmh.

  2. MTA: Mail Transfer Agent.

    Program zajišťující přenos zpráv po síti. Běží na serveru, spravuje ji správce. Uživatel k MTA přistupuje skrze protokol E/SMTP ze svého MUA. Komunikuje s dalšími MTA pomocí E/SMTP.

    Příklady: postfix, sendmail, exim.

  3. MDA: Mail Delivery Agent.

    Program zajišťující doručení do schránky. Typicky běží na serveru. Pracuje v součinnosti s MTA, který běží na stejném serveru. Pokud MTA vyhodnotí, že zpráva je pro uživatele na lokálním serveru, předá ji MDA. MDA se postará o doručení uživateli, typicky pomocí protokolu POP3 nebo IMAP.

    Příklady: mail, deliver, dovecot, procmail (obsolete).

Formát zpráv [PV077]

zpráva je složena

  1. obálky,
  2. dat.

Obálka

Obálku tvoří

  1. obálkový odesílatel (MAIL FROM),
  2. obálkový příjemce (MAIL TO).

Obálku generuje MUA, z kterého se zasílá zpráva. Obálka je směrována přes (potenciálně více) MTA až k MDA. MDA buď email doručí nebo generuje chybovou zprávu, kterou zasílá zpět obálkovému odesílateli. MDA se do obsahu zprávy nedívá.

Data

Obsah zprávy tvoří:

  1. hlavička,
  2. tělo zprávy.

Hlavičky mohou obsahovat pouze ascii znaky → kódování: From: =?UTF-8?Q?Veronika_Burgerov=C3=A1?= <484947@mail.muni.cz>. Různé způsoby kódování [UAE].

Příklad dat odeslaných MUA:

To: hiddenmail@gmail.com
Subject: Test
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

Test Message.

Stejná zpráva na straně příjemce (zkráceno):

Delivered-To: hiddenmail@gmail.com
Received: by 2002:a4f:f142:0:0:0:0:0 with SMTP id y2csp1939743ivn;
        Sat, 14 Nov 2020 03:58:38 -0800 (PST)
Return-Path: <root@enygma.cz>
Received: from mail.enygma.cz (enygma.cz. [185.8.236.134])
        by mx.google.com with ESMTPS id q11si10505147wrm.30.2020.11.14.03.58.38
        for <hiddenmail@gmail.com>
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Sat, 14 Nov 2020 03:58:38 -0800 (PST)
Received: by mail.enygma.cz (Postfix, from userid 0)
    id A9A593F9CA; Sat, 14 Nov 2020 12:57:46 +0100 (CET)
To: me@apophis.cz
Subject: Test
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-Id: <20201114115837.A9A593F9CA@mail.enygma.cz>
Date: Sat, 14 Nov 2020 12:57:46 +0100 (CET)
From: root <root@enygma.cz>

Test Message.

Vybrané hlavičky:

MIME (Multipurpose Internet Mail Extensions) [MIME]

Umožňuje:

MIME definuje hlavičku Content-Type, kde mohou být různé věci:

Content-Disposition:

Komunikační protokoly

E/SMTP

Příklad:

$ telnet localhost 25
> Connected to localhost.
> Escape character is '^]'.
> 220 mail.enygma.cz ESMTP Postfix (Debian/GNU)
< HELO enygma.cz
> 250 mail.enygma.cz
< MAIL FROM: apophis@enygma.cz
> 250 2.1.0 Ok
< RCPT TO: me@apophis.cz
> 250 2.1.5 Ok
< DATA
> 354 End data with <CR><LF>.<CR><LF>
< From: apophis@enygma.cz
< To: me@apophis.cz
< Subject: Test mail
< 
< This is test message.
< .
> 250 2.0.0 Ok: queued as 8AC963F625
< QUIT
> 221 2.0.0 Bye

Příkazy:

POP3

IMAP

Lokální ukládání zpráv [OR] [PV077]

Několik možností:

  1. mbox

    xhorace4@aisa:~ $ cat /var/spool/mail/xhorace4
    From someone@gmail.com  Fri Jan  4 17:06:43 2019
    Return-Path: <someone@gmail.com>
    X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on anxur.fi.muni.cz
    ...
    From ...
    From ...
  2. Maildir

  3. MMDF folder

  4. MH-folder

Mail Excange (MX) záznamy

Kam směrovat poštu pro xhorace@fi.muni.cz? Tam, kam vede MX záznam fi.muni.cz

$ dig gmail.com MX
gmail.com.              376     IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              376     IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              376     IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              376     IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              376     IN      MX      10 alt1.gmail-smtp-in.l.google.com.

Více možných serverů – servery se kontaktují vzestupně.

Pozor: gmail-smtp-in.l.google.com nemůže být CNAME!

Doménový koš

…je schránka, do které chodí zprávy pro adresy před zavináčem, které nejsou definovány.

SPAM & zabezpečení

Jak vzniká SPAM?

  1. Open-relay servery.

    To jsou servery, které umožňují doručení zprávy komukoliv bez autentizace klienta. Open-relay server je považován za chybu konfigurace serveru. SPAMboti skenují internet a hledají open-relay servery.

  2. Ukradené přístupové údaje uživatele.

    I když server přijímá zprávy k odeslání pouze od autentizovaných uživatelů, může těmto uživatelům být odcizen login.

  3. Local-relay

    Každý server musí přijímat zprávy pro své uživatele od kohokoliv. To je základní princip SMTP. Proto, pokud se připojíme k relay.muni.cz, můžeme odeslat SPAM na jakoukoliv adresu @muni.cz bez nutnosti autentizace.

Jak se bránit SPAMu

Všechny mechanismy níže, ač se může zdát, že mají zásadní vady, se dnes používají.

  1. Blacklisting https://www.dnsbl.info/

    Databáze open-relat serverů a serverů, které rozesílají SPAM. Mailserver lze nakonfigurovat tak, aby nepřijímal zprávy od blacklistovaných serverů.

  2. Graylisting [GRAY]

    Mailserver odmítne každý příchozí mail od serveru, který nezná. Pokud se jedná o legitimní zprávu z legitimního serveru, serve se pokusí po nějaké době zprávu odeslat znovu. Po nějakém čase je taková zpráva akceptována (typicky minuty).

  3. SPF – Sender Policy Framework

    Mechanismus umožňující e-mail z konkrétní adresy odeslat jen konkrétním počítačům.

    Velký problém: přeposílání pošty.

  4. DKIM – Domain Keys Identified Mail

    Nesvazuje adresy s konkrétními serveru, místo toho používá mechanismus elektronického podepisování.

  5. ARC – Authenticated Received Chain [ARC]

    Umožňuje přidat hlavičku říkající něco jako “já server X jsem přijal tuto zprávu a ověřil, že DKIM i SPF jsou platné”.

  6. DMARC

    Definuje, co má dělat klient, pokud přijme zprávu od sereru a ta neprojde nějakou validací. Uloženo v DNS záznamech.

Úplný příklad příchozí zprávy ze začátku referátu:

Delivered-To: hiddenmail@gmail.com
Received: by 2002:a4f:f142:0:0:0:0:0 with SMTP id y2csp1980638ivn;
        Sat, 14 Nov 2020 05:15:00 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; t=1605359700; cv=none;
        d=google.com; s=arc-20160816;
        b=o4ZbLokjmNmhjkCoyVSC1okhFHAZqhzk/dRpqWFnSPTaXH4nxWWJWjD5cbnIyN4F3R
         YDvtWk8ScKtPJSdLGxPsIR4re0bZkOSsME52SiRbEUBBvy5DLkuL2PO59iHTG4GqgqH+
         NgOsnZmmccpee9P83wYLzGoaKgNZNgdy0ObfEPlfEVYOSzCazMHPc6XElyrMP90/QiFd
         Bspp3LHb+WzDCGf1yZ88pSIZu57kGhEg8o/BOECM4ywsvDakml5M6eYUIxRwxtmxrVzM
         cDuva9w834xbyCpd19Ca/aUUDUd63HOizZ3GsgkvNAGZZW0lpcxCPVdegD1UeaGIX2ah
         po1w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=date:message-id:subject:to:from:dkim-signature;
        bh=C9sWUzGjD5jaBF94rxd7v23cmWPEnAKJgzeQ51cJxXk=;
        b=F0o5yumr8+zfaXaVI/M5y0HNMQKekEqb7FrAAmHU61qwQvrb8wWJAD/6wIzvpmrbZu
         q1+t6HV0VXDHvOjwP2LBdVx66jN0rUkpstN2C6QC9LnP+BMQg93Gr1QyS+FeBGMZsQLM
         oU4J0J6JlWYVyHkN5k4R0SNe1DKo4TsfBtuuF+zMmrjPd1DTFDYFP7LBgRRRd40FuoAs
         6rdFqYYVHuAAv/dTVlhsOgae/MGqT06JuhoktbvZD3hq3kl4775Myv/8XrZOK7jJPxqC
         DKKRO1FjKwXFjXliybPoOm+GtzlDaEz4voGBqvs2k5vPINe6QKg4fGw5IaOzXYoB5ymn
         1Blw==
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=pass header.i=@enygma.cz header.s=mail header.b=UE8iA5WA;
       spf=pass (google.com: domain of apophis@enygma.cz designates 185.8.236.134 as permitted sender) smtp.mailfrom=apophis@enygma.cz
Return-Path: <apophis@enygma.cz>
Received: from mail.enygma.cz (enygma.cz. [185.8.236.134])
        by mx.google.com with ESMTPS id n14si12263514wre.323.2020.11.14.05.14.59
        for <hiddenmail@gmail.com>
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Sat, 14 Nov 2020 05:15:00 -0800 (PST)
Received-SPF: pass (google.com: domain of apophis@enygma.cz designates 185.8.236.134 as permitted sender) client-ip=185.8.236.134;
Authentication-Results: mx.google.com;
       dkim=pass header.i=@enygma.cz header.s=mail header.b=UE8iA5WA;
       spf=pass (google.com: domain of apophis@enygma.cz designates 185.8.236.134 as permitted sender) smtp.mailfrom=apophis@enygma.cz
Received: from enygma.cz (localhost [127.0.0.1])
    by mail.enygma.cz (Postfix) with SMTP id 8AC963F625
    for <me@apophis.cz>; Sat, 14 Nov 2020 14:14:37 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=enygma.cz; s=mail;
    t=1605359699; bh=C9sWUzGjD5jaBF94rxd7v23cmWPEnAKJgzeQ51cJxXk=;
    h=From:To:Subject:Date:From;
    b=UE8iA5WAnxFNqW9frSIvdmT1+LqnjYeQAmkJn2vOMrBUg760vkMOdjuxY9I7Y2dQt
     pEDNhdyqavCEH9NB7w6QKGV23jbnGB6R4f9lsTs934oPMovQccgFtZy6XC8PElPpAm
     BpPpJZDWB5ogieAmD2k6XR1SD5s0InDN2vhNE0kM=
From: apophis@enygma.cz
To: me@apophis.cz
Subject: Test mail
Message-Id: <20201114131440.8AC963F625@mail.enygma.cz>
Date: Sat, 14 Nov 2020 14:14:37 +0100 (CET)

This is test message.

Všechny předchozí techniky neřešily problém (3) local-relay. Tento problém bohužel nelze řešit jinak, než naučit se rozpoznávat SPAM na základě obsahu zprávy. Dnes různé techniky – např. Spam Assasin.

Spam Assasin = antispamový filter

MTA servery

Nejpožívanější [MCU]:

  1. Exim (57 %)
  2. Postfix (36 %)
  3. Sendmail (4 %)
  4. MailEnable (2 %)

Konfigurace serveru Postfix [PCNF]

Užitečné nástroje:

Logy:

Best practices

Zdroje