Domingo, 19 de Agosto de 2007

Servidor caseiro - XV

O software de IMAP que utilizo é o Courier-imap.

O courier-imap lida (e foi criado com essa finalidade) com o formato Maildir de caixas de correio originário do qmail. Para além disso, acrescenta uma série de features como quotas por software.
Suporta um grande número de possibilidades de formatos de autenticação, desde RDBMS (MySQL, PostgreSQL) a PAM, LDAP, etc.
O que utilizei aqui é o vchkpw por causa do vpopmail.

Permite ainda a criação de shared folders entre grupos de contas e tem suporte a IMAP sobre SSL.

O Courier-imap, a certo ponto do seu desenvolvimento, foi dividido entre dois ficheiros de código, o courier-authlib que contém as bibliotecas de autenticação e um servidor de autenticação e o courier-imap que é o servidor de IMAP propriamente dito.

O courier-authlib tem um bug que faz abortar a compilação em GCC ≥ 4 se se escolher o authvchkpw como método de autenticação, mas como sou *cough* boa pessoa *cough*, deixo aqui um pequeno patch que escrevi para resolver o problema (os tracinhos não contam :P):

-----------------------------------------------------------------
--- courier-authlib-0.59.3/authvchkpw.c 2007-08-19 07:23:30.000000000 +0200
+++ courier-authlib-0.59.3b/authvchkpw.c        2007-08-19 07:23:30.908980669 +0000
@@ -55,16 +55,19 @@
        return (*i->callback_func)(a, i->callback_arg);
 }

 #if HAVE_HMACLIB

 #include        "libhmac/hmac.h"
 #include        "cramlib.h"

+static int auth_vchkpw_login(const char *service, char *authdata,
+        int (*callback_func)(struct authinfo *, void *), void *callback_arg);
+

 static int auth_vchkpw_cram(const char *service,
                            const char *authtype, char *authdata,
                            int (*callback_func)(struct authinfo *, void *),
                            void *callback_arg)
 {
         struct  cram_callback_info      cci;
-----------------------------------------------------------------

Crio um ficheiro chamado por exemplo vchkpw-courier-auth.patch e executo:

# patch -p1 < vchkpw-courier-auth.patch
patching file authvchkpw.c
Hunk #1 succeeded at 55 with fuzz 1.

Os dois ficheiros de código do Courier-imap instalam-se do mesmo modo:

# cd /home/vpopmail/courier-authlib-0.59.3
# export CPPFLAGS="-I/usr/local/ssl/include"
# export LDFLAGS="-L/usr/local/ssl/lib"

#./configure --without-ipv6 --enable-unicode --enable-workarounds-for-imap-client-bugs --without-authpwd --without-authpam --without-authuserdb --without-authcram --with-authvchkpw --without-authldap --without-authmysql --without-authpgsql --without-authdaemon --without-authcustom --without-authshadow --with-redhat
# make
# su root
# make install-strip
# make install-configure

Repetir para courier-imap-4.1.3

Copio os ficheiros de arranque do IMAP e do IMAP/SSL para /etc/init.d

# cd /usr/lib/courier-imap/libexec
# cp imapd.rc /etc/init.d/imapd
# cp imapd-ssl.rc /etc/init.d/imapd-ssl

Como o chkconfig não reconhece estes ficheiros ctl como válidos, tenho que fazer o trabalho à mão para que os dois serviços arranquem automaticamente quando o servidor for ligado (se tiver interface gráfica, tem que repetir a operação para o directório /etc/rc5.d):

# cd /etc/rc3.d
# ln -s ../init.d/imapd S99imapd
# ln -s ../init.d/imapd-ssl S99imapd-ssl

Tenho que copiar o certificado que criei antes para o POP3/SSL para o sítio certo no Courier-imap (o mesmo certificado serve):

# cp /usr/local/ssl/bin/imapd.pem /usr/lib/courier-imap/share/

Agora, antes de mais, é necessário correr o authdaemon do Courier-imap (o servidor authdaemon necessita de estar permanentemente a correr. Para que ele arranque quando se inicia o servidor, colocar no ficheiro /etc/rc.local a linha /usr/local/sbin/authdaemond start):

# /usr/local/sbin/authdaemond start

É altura de ter uma conversa com o IMAP e o IMAP/SSL para verificar se está tudo ok:

IMAP:

# telnet planetgeek.dynip.sapo.pt 143
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.
O login teste@planetgeek.dynip.sapo.pt segredo
O OK LOGIN Ok.
O LOGOUT
* BYE Courier-IMAP server shutting down
O OK LOGOUT completed
Connection closed by foreign host.


IMAP/SSL:

# openssl s_client -connect planetgeek.dynip.sapo.pt:993
CONNECTED(00000003)
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
verify return:1
---
Certificate chain
 0 s:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
   i:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDzjCCAzegAwIBAgIJAJa6WcKI1VROMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
VQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNV
BAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5
bmlwLnNhcG8ucHQwHhcNMDcwODE4MjMwOTQwWhcNMDgwODE3MjMwOTQwWjCBoTEL
MAkGA1UEBhMCcHQxDzANBgNVBAgTBkF2ZWlybzEPMA0GA1UEBxMGSWxoYXZvMQ0w
CwYDVQQKEwRIb21lMQ4wDAYDVQQLEwVEZXZlbDEhMB8GA1UEAxMYcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MS4wLAYJKoZIhvcNAQkBFh9nYW1pdG9AcGxhbmV0Z2Vl
ay5keW5pcC5zYXBvLnB0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1y9db
W0wJZScNQV0fCisBLRakDJWTioXgb5Kzr333ZsF/X8N5ktPEpVQ/3weRbT9RqYMQ
zHWTHyDBhQDQ5L4yoNeitmAXCfO129wDtw7qLlOm6THaktzHRLuWnS5bLWBBdnSn
ELyIQ/xCANGTcRvjKmIrA3WkvbAgkeMg0SjCFQIDAQABo4IBCjCCAQYwHQYDVR0O
BBYEFJVvEdEfiVb36m31qTJIpIPLlwQjMIHWBgNVHSMEgc4wgcuAFJVvEdEfiVb3
6m31qTJIpIPLlwQjoYGnpIGkMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZl
aXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURl
dmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG
9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHSCCQCWulnCiNVU
TjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIiPOkLa6QPkk2VHmIas
jobvnczZNrA63ygoiSFbBDBtsq+UZOcaKBG1L9z1B2n1in5RcQ0ueWnKaymBw8XY
kANdRLqXy5Y0+/M9htFAiLWQGjbjqnNPrsZ531UBV+Hz+zda2FYZsyddiQEizKK2
d4KZwVEG3jpXFZ2GVRPBcGya
-----END CERTIFICATE-----
subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
issuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.pt
---
No client certificate CA names sent
---
SSL handshake has read 1140 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 984513454D9DB81F0324D7983AF78C69649A82819FB007033E43B25DAE55C778
    Session-ID-ctx:
    Master-Key: 82B0478015DB6B5BFB4F8F2F1D750BEC5CDE11A7154CD80157EFAEBB557FCDCE0B4CC03B25C7427F1B9940ACF85615B1
    Key-Arg   : None
    Krb5 Principal: None
    Start Time: 1187523291
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.
O login teste@planetgeek.dynip.sapo.pt segredo
O OK LOGIN Ok.
O LOGOUT
* BYE Courier-IMAP server shutting down
O OK LOGOUT completed
closed


Kwel :)
tags:
publicado por gamito às 12:43
link do post | comentar
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.

Mais sobre mim

pesquisar

Janeiro 2008

Dom
Seg
Ter
Qua
Qui
Sex
Sab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Posts recentes

Portagens

Há 20 anos atrás... *sigh...

Vou criar a minha própria...

Finalmente

SAPO codebits

Sporting

Caixa Mágica e Mandriva

A1 Aveiro - Lisboa

Browser mamão

gFTP

PlayStation 3 e Sony

Mas quem é o gajo ?

Negócios do Open Source

Não estão fartos disto ?

Naughty, naughty

PHP chrooted

Joomla

Novo Projecto

MySQL :: It's the ctl, st...

MySQL :: Just a little ti...

MySQL chrooted

BASH, stdout e stderr

4 kb stack ou 8kb stack

A funny guy...

Truques, Minas e Alçapões...

Truques, Minas e Alçapões...

Logs do mrtg

Salmos, 23

Servidor caseiro - XXVII

Servidor caseiro - XXVI

Servidor caseiro - XXV

Números de telemóvel aban...

Servidor caseiro - XXIV

Humm...

Servidor caseiro - XXIII

Servidor caseiro - XXII

Servidor caseiro - XXI

Servidor caseiro - XX

Servidor caseiro - XIX

Ubuntu : O Enigma

Leixões 1 - Benfica 1

Servidor caseiro - XVIII

Servidor caseiro - XVII

Servidor caseiro - XVI

Servidor caseiro - XV

Servidor caseiro - XIV

Servidor caseiro - XIII

Servidor caseiro - XII

Servidor caseiro - XI

Servidor caseiro - X

Arquivos

Contacto

gamito@gmail.com

No Planeta Geek

tags

todas as tags

subscrever feeds