POP3, IMAP, Postfix

Radovan Stancel, 60601@mail.muni.cz


Obsah


POP3

POP3 (Post Office Protocol verzie 3) je protokol urceny na prenos elektronickych sprav zo serveru na lokalny pocitac. Je specifikovany v norme RFC 1939. Standardne bezi na porte 110 (cez SSL na 995). Uzivatel si musi data stiahnut k sebe do pocitaca a az potom s nimi moze pracovat.

Komunikacia prebieha tymto sposobom: uzivatel sa prihlasi na server, ten mu posle privitanie, potom si uzivatel so serverom vymienaju prikaz/odpoved az do doby, kym sa sedenie neskonci alebo nespadne :)

Pri komunikacii sa pouzivaju 3-4 znakove prikazy, ktore mozu nasledovat max. 40 znakovym argumentom. Prikazy mozu byt nasledovne:


Ako odpoved moze server poslat +OK alebo -ERR. Toto su indikatory stavu a spolu s nimi sa posiela aj dodatocna informacia (nie vzdy). Prikazy su case-insensitive, odpoved je vzdy velkymi pismenami. Pri prihlaseni sa session dostava do stavu autentizacie. Po autentizacii uzivatela sa prejde do tranzakcnej faze, kde sa pracuje so schrankou, po odhlaseni sa prechadza do aktualizacnej faze.
Priklad komunikacie: (prevzate z RFC 1939)

      S: <wait for connection on TCP port 110>
      C: <open connection>
      S:    +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
      C:    APOP mrose c4c9334bac560ecc979e58001b3e22fb
      S:    +OK mrose's maildrop has 2 messages (320 octets)
      C:    STAT
      S:    +OK 2 320
      C:    LIST
      S:    +OK 2 messages (320 octets)
      S:    1 120
      S:    2 200
      S:    .
      C:    RETR 1
      S:    +OK 120 octets
      S:    <the POP3 server sends message 1>
      S:    .
      C:    DELE 1
      S:    +OK message 1 deleted
      C:    RETR 2
      S:    +OK 200 octets
      S:    <the POP3 server sends message 2>
      S:    .
      C:    DELE 2
      S:    +OK message 2 deleted
      C:    QUIT
      S:    +OK dewey POP3 server signing off (maildrop empty)
      C:  <close connection>
      S:  <wait for next connection>


IMAP

IMAP (INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1) umoznuje uzivatelovi pracu so svojou mailovou schrankou priamo na servri (narozdiel od POP3). Umoznuje vytvaranie, mazanie a premenovavanie schranok, vyhladavanie sprav, priradzovanie priznakov... Je specifikovany v norme RFC 3501. Standardne bezi na porte 143.

Komunikacia prebieha rovnako ako pri POP3. Syntax prikazov musi byt presne dodrzana, ak zadame napr. prikaz s nespravnym poctom medzier, server nam vrati chybu. Format prikazov je tag prikaz argumenty. Server odpoveda v tvare * odpoved. Odpoved moze byt aj na viacej riadkov. V pripade, ze server potrebuje dalsie data od uzivatela, posle + odpoved. Koniec odpovede servru obsahuje rovnaky tag ako prikaz.

Pocas prace uzivatela so servrom sa session moze nachadzat v niekolkych stavoch (prevzate z RFC 3501):


                   +----------------------+
                   |connection established|
                   +----------------------+
                              ||
                              \/
            +--------------------------------------+
            |          server greeting             |
            +--------------------------------------+
                      || (1)       || (2)        || (3)
                      \/           ||            ||
            +-----------------+    ||            ||
            |Not Authenticated|    ||            ||
            +-----------------+    ||            ||
             || (7)   || (4)       ||            ||
             ||       \/           \/            ||
             ||     +----------------+           ||
             ||     | Authenticated  |<=++       ||
             ||     +----------------+  ||       ||
             ||       || (7)   || (5)   || (6)   ||
             ||       ||       \/       ||       ||
             ||       ||    +--------+  ||       ||
             ||       ||    |Selected|==++       ||
             ||       ||    +--------+           ||
             ||       ||       || (7)            ||
             \/       \/       \/                \/
            +--------------------------------------+
            |               Logout                 |
            +--------------------------------------+
                              ||
                              \/
                +-------------------------------+
                |both sides close the connection|
                +-------------------------------+

         (1) connection without pre-authentication (OK greeting)
         (2) pre-authenticated connection (PREAUTH greeting)
         (3) rejected connection (BYE greeting)
         (4) successful LOGIN or AUTHENTICATE command
         (5) successful SELECT or EXAMINE command
         (6) CLOSE command, or failed SELECT or EXAMINE command
         (7) LOGOUT command, server shutdown, or connection closed


Mozne prikazy:

Tychto prikazov je podstatne viac. Podrobne su popisane v RFC 3501. Mozne odpovede servru su OK, BAD a NO (login failure - len pri autentifikacia uzivatela)

Priklad komunikacie:

S:   * OK IMAP4rev1 Service Ready
C:   a001 login mrc secret
S:   a001 OK LOGIN completed
C:   a002 select inbox
S:   * 18 EXISTS
S:   * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S:   * 2 RECENT
S:   * OK [UNSEEN 17] Message 17 is the first unseen message
S:   * OK [UIDVALIDITY 3857529045] UIDs valid
S:   a002 OK [READ-WRITE] SELECT completed
C:   a003 fetch 12 full
S:   * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
      RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
      "IMAP4rev1 WG mtg summary and minutes"
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      ((NIL NIL "imap" "cac.washington.edu"))
      ((NIL NIL "minutes" "CNRI.Reston.VA.US")
      ("John Klensin" NIL "KLENSIN" "MIT.EDU")) NIL NIL
      "<B27397-0100000@cac.washington.edu>")
       BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028
       92))
S:    a003 OK FETCH completed
C:    a004 fetch 12 body[header]
S:    * 12 FETCH (BODY[HEADER] {342}
S:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S:    From: Terry Gray <gray@cac.washington.edu>
S:    Subject: IMAP4rev1 WG mtg summary and minutes
S:    To: imap@cac.washington.edu
S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>
S:    Message-Id: <B27397-0100000@cac.washington.edu>
S:    MIME-Version: 1.0
S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S:    )
S:    a004 OK FETCH completed
C:    a005 store 12 +flags \deleted
S:    * 12 FETCH (FLAGS (\Seen \Deleted))
S:    a005 OK +FLAGS completed
C:    a006 logout
S:    * BYE IMAP4rev1 server terminating connection
S:    a006 OK LOGOUT completed


Postfix

Postfix je MTA a je to alternativa k sendmailu. Da sa stiahnut na adrese www.postfix.org. Jeho konfiguracne subory su ulozene v adresari /etc/postfix.

Najdolezitejsi subor je main.cf. Format suboru je: na kazdom riadku jedna volba: parameter = hodnota alebo parameter = $parameter. Najdolezitejsie parametre:

myhostname - meno pocítaca, napr. speo.lab.fi.muni.cz
mydomain - meno lokalnej domeny, napr. lab.fi.muni.cz
myorigin - nazov domeny, ktoru budu mat spravy odoslane z nasho stroja, napr. $mydomain
mydestination - domeny, pre ktore je tento server cielovy (urcuje, ktore spravy sa dorucia lokalne), napr. $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain
mynetworks alebo mynetworks_style - nastavuje doveryhodnych klientov, ktorym umozni dorucovat postu cez tento stroj, napr. mynetworks = 10.0.40.2, 127.0.0.1, alebo mynetworks_style = host (alebo subnet, class)
relay_domains - urcuje pre ktore domeny umozni preposielanie sprav pocitacom, ktore nie su v $myneteworks, napr. relay_domains = $mydestination
inet_interfaces - urcuje na ktorych rozhrniach ma pocuvat, napr. inet_interfaces = all

Dalsie zaujimave subory:

Pri nastavovani musime este spravne nastavit aby nas server nebol open-relay tzn. aby z neho neslo posielat spravy z odkialkolvek kamkolvek.

Aliasy: nastavuju sa v /etc/postfix/aliases a sluzia k preposielaniu spravy inemu adresatovi, resp. skupine adresatov.
Priklad:
mailer-daemon: postmaster
god: root
pracovnici: :include:/etc/postfix/zoznam_pracovnikov #(v tomto subore bude na kazdom riadku jedno meno)

Domenovy kos
Domenovy kos je "sluzba" postoveho servra. Ten posle vsetky spravy svojej domeny s neplatnym nazvom schranky do tzv. domenoveho kosa. Ak si ho chceme vytvorit, tak si najprv vytvorime uzivatela, ktoremu sa tieto maily budu posielat.

useradd -g nogroup -d /no/home -s /bin/false mailbin

potom povieme postfixu aby vsetky spravy, ktore nemaju platneho prijemcu posielal nasmu novemu uzivatelovi

luser_relay = mailbin@$domain

ak chceme aby sa nam vsetky maily ktore dostaneme, posielali do jednej schranky tak v subore /etc/postfix/virtual nastavime

*@nasa.domena.cz uzivatel

toto sa pouziva vo firmach, kde najskor prijmu na server vsetky maily, a odtial ich distribuuju po internej sieti.
Pri domenovom kosi nam vsak hrozi ze sa z neho za chvilu stane ulozisko pre spamy...


Pouzita literatura

Archiv referatov
RFC 1939 - POP3
RFC 3501 - IMAP
postfix.org