• email
  • facebook
  • linkedin
  • google+
  • pinteres

Dovecot POP3 és IMAP

Ez a leírás elavult, újabb változata megtalálható ezen a linken, amely Ubuntu 12.04-es telepítést mutat be.

A lassan felálló rendszer kialakításánál IMAP és POP3 szervernek a Dovecotot választottam, egyrészt mert nagyon jókat olvastam róla, másrészt a Courier IMAP-pal sajnos problémák voltak: a Courier fam-ot használ a maildir-ek változásainak követésére, és a virtuális usereknél gondot okoz a /tmp/fam-- socket létrehozása. A fejezet végén ennek ellenére leírom, hogyan kellene a Couriert beállítani, hátha valaki nem használ IMAP-ot, vagy csak az szimpatikusabb.

1.   Dovecot POP3 és IMAP

Telepített csomagok:

  • dovecot-pop3d dovecot-imapd
    • velük: dovecot-common libmysqlclient15off mysql-common

A beállítások a /etc/dovecot/dovecot.conf fájlban -- csak azokat jegyzem itt le, amelyek változtak az alapbeállításhoz képest:

 protocols = imap pop3 pop3s
 ssl_cert_file = /etc/dovecot/dovecot.pem
 ssl_key_file = /etc/dovecot/dovecot.key
 ssl_ca_file = /etc/dovecot/nir.crt
 disable_plaintext_auth = no
 login_chroot = yes
 default_mail_env = maildir:/data/mail/virtual/%u
 pop3_uidl_format = %v-%u

 auth default {
 mechanisms = plain
 }

 #Fontos: ezt ki kell kommentezni, mivel nem lesz pam autentikáció, és be is kavarna
 #passdb pam {
 #   ...
 #}

 passdb sql {
 args = /etc/dovecot/dovecot-sql.conf
 }

 userdb sql {
 args = /etc/dovecot/dovecot-sql.conf
}

A fenti beállításokkal a sima és SSL POP3 portokon illetve IMAP porton fog figyelni a Dovecot. IMAP SSL nem kell, mert a sima porton fogunk TLS-t engedni.

Adatbázis beállítások: Itt is a már létező mail adatbázisunkat szeretnénk használni, hogy ugyanazokkal a belépési adatokkal tudjon bárki POP3-azni is, mint levelet küldeni. Az adatbázis elérés beállításai a /etc/dovecot/dovecot-sql.conf fájlban:

driver = pgsql
connect = host = localhost dbname = mail user = *DOVECOTUSER* password = *DOVECOTPASS*
default_pass_scheme = CRYPT
password_query = SELECT password FROM users WHERE email = '%u' AND active = TRUE and (imap_allowed = true or '%Ls' = 'pop3')
user_query = SELECT '/data/mail/' || homedir || '/' || maildir AS mail, uid AS uid, gid AS gid FROM users WHERE email = '%u' AND active = TRUE

A user_query utolsó feltétele segítségével adhatjuk meg, hogy a bejelntekzéskor a felhasználó csak akkor csatlakozhasson IMAP protokollon, ha erre ngedélye van, a POP3-at viszont mindig engedjük.

A követező lépés a Dovecot TLS/SSL tanúsítvány generálása és beállítása -- itt a már említett céges kulcsot és tanúsítványt használjuk majd az aláírás során:

$ cd /opt/CA
$ openssl genrsa -out dovecot.key 2048
$ openssl req -new -key dovecot.key -out dovecot.csr
    ...
    Organizational Unit Name (eg, section) [Software Development Team]:NiR Web Services
    Common Name (eg, YOUR name) []:mail.nir.hu
    Email Address []:postmaster@nir.hu
    ...

$ openssl x509 -req -in dovecot.csr -out dovecot.crt -sha1 -CA nir.crt -CAkey nir.key -CAcreateserial -days 365

$ cat dovecot.key dovecot.crt > dovecot.pem
$ openssl gendh >> dovecot.pem

$ chmod 600 *

$ cp nir.crt dovecot.pem dovecot.key /etc/dovecot/
$ /etc/init.d/dovecot restart

Tesztelés (a POP3 SSL portra): openssl s_client -crlf -connect localhost:995 majd bejelentkezünk, és kiadhatjuk a list, retr stb. parancsokat.

2.   Courier POP3 és IMAP

A füstbe ment B terv.

Telepíténdő csomagok:

  • courier-pop courier-pop-ssl courier-imap courier-imap-ssl courier-base courier-ssl courier-authdaemon courier-authpostgresql
    • velük: gamin libgamin0 libglib2.0-0

A POP3 és IMAP SSL beállítása:

Figyelem: Itt végül ugyanaz (mail.nir.hu) lett a két tanúsítvány és így bennük a domain neve is, de a két protokollra lehet esetleg külön tanúsítványt is csinálni.

$ openssl genrsa -out courier.key 2048
$ openssl req -new -key courier.key -out courier.csr
    ...
    Organizational Unit Name (eg, section) [Software Development Team]:NiR Web Services
    Common Name (eg, YOUR name) []:mail.nir.hu
    Email Address []:postmaster@nir.hu
    ...

$ openssl x509 -req -in courier.csr -out courier.crt -sha1 -CA nir.crt -CAkey nir.key -CAcreateserial -days 365

$ cat courier.key courier.crt > courier.pem
$ openssl gendh >> courier.pem

$ cp courier.pem /etc/courier/imapd.pem
$ cp courier.pem /etc/courier/pop3d.pem
$ chmod 0600 /etc/courier/imapd.pem
$ chmod 0600 /etc/courier/pop3d.pem
$ /etc/init.d/courier-imap-ssl stop
$ /etc/init.d/courier-imap-ssl start
$ /etc/init.d/courier-pop-ssl stop
$ /etc/init.d/courier-pop-ssl start

Teszteljük a POP3 és az IMAP SSL portokat:

$ openssl s_client -crlf -connect localhost:995
$ openssl s_client -crlf -connect localhost:993

A virtuális user autentikációhoz a /etc/courier/authdaemonrc fájlba a pam autentikáció helyére beírjuk, hogy authpgsql:

authmodulelist="authpgsql"

Az authpam érték is maradhatna (authmodulelist="authpgsql authpam") de ez elég erőforrás-igényes és fölösleges is, ha csak virtuális usereknek van POP3.

Ezek után a /etc/courier/authpgsqlrc fájlban beállítjuk az adatbázis elérését és a mapping adatokat:

PGSQL_HOST              localhost
PGSQL_USERNAME          *COURIERUSER*
PGSQL_PASSWORD          *COURIERPASS*
PGSQL_DATABASE          mail
PGSQL_USER_TABLE        users
PGSQL_CRYPT_PWFIELD     password
PGSQL_UID_FIELD         uid
PGSQL_GID_FIELD         gid
PGSQL_LOGIN_FIELD       email
PGSQL_HOME_FIELD        homedir
PGSQL_NAME_FIELD        fullname
PGSQL_MAILDIR_FIELD     maildir

A démonok újraindítása után tesztelhetjük a működést:

$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
user *USER*
+OK Password required.
pass *PASS*
+OK logged in.
stat
+OK 2 1275
list
+OK POP3 clients that break here, they violate STD53.
1 638
2 637
.
retr 1
+OK 638 octets follow.
Return-Path: <foo@test.net>
X-Original-To: user@test.net
Delivered-To: user@test.net
Received: from 192.168.1.100 (unknown [192.168.1.100])

Az ötödik részben a Clamav vírus- és a Dspam spamszűrő beállításaival foglalkozunk.