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.patchpatching file authvchkpw.cHunk #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-configureRepetir 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-sslComo 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-sslTenho 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 143Trying 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 segredoO OK LOGIN Ok.O LOGOUT* BYE Courier-IMAP server shutting downO OK LOGOUT completedConnection closed by foreign host.
IMAP/SSL:
# openssl s_client -connect planetgeek.dynip.sapo.pt:993CONNECTED(00000003)depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.ptverify error:num=18:self signed certificateverify return:1depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.ptverify 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-----MIIDzjCCAzegAwIBAgIJAJa6WcKI1VROMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQwHhcNMDcwODE4MjMwOTQwWhcNMDgwODE3MjMwOTQwWjCBoTELMAkGA1UEBhMCcHQxDzANBgNVBAgTBkF2ZWlybzEPMA0GA1UEBxMGSWxoYXZvMQ0wCwYDVQQKEwRIb21lMQ4wDAYDVQQLEwVEZXZlbDEhMB8GA1UEAxMYcGxhbmV0Z2Vlay5keW5pcC5zYXBvLnB0MS4wLAYJKoZIhvcNAQkBFh9nYW1pdG9AcGxhbmV0Z2Vlay5keW5pcC5zYXBvLnB0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1y9dbW0wJZScNQV0fCisBLRakDJWTioXgb5Kzr333ZsF/X8N5ktPEpVQ/3weRbT9RqYMQzHWTHyDBhQDQ5L4yoNeitmAXCfO129wDtw7qLlOm6THaktzHRLuWnS5bLWBBdnSnELyIQ/xCANGTcRvjKmIrA3WkvbAgkeMg0SjCFQIDAQABo4IBCjCCAQYwHQYDVR0OBBYEFJVvEdEfiVb36m31qTJIpIPLlwQjMIHWBgNVHSMEgc4wgcuAFJVvEdEfiVb36m31qTJIpIPLlwQjoYGnpIGkMIGhMQswCQYDVQQGEwJwdDEPMA0GA1UECBMGQXZlaXJvMQ8wDQYDVQQHEwZJbGhhdm8xDTALBgNVBAoTBEhvbWUxDjAMBgNVBAsTBURldmVsMSEwHwYDVQQDExhwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHQxLjAsBgkqhkiG9w0BCQEWH2dhbWl0b0BwbGFuZXRnZWVrLmR5bmlwLnNhcG8ucHSCCQCWulnCiNVUTjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIiPOkLa6QPkk2VHmIasjobvnczZNrA63ygoiSFbBDBtsq+UZOcaKBG1L9z1B2n1in5RcQ0ueWnKaymBw8XYkANdRLqXy5Y0+/M9htFAiLWQGjbjqnNPrsZ531UBV+Hz+zda2FYZsyddiQEizKK2d4KZwVEG3jpXFZ2GVRPBcGya-----END CERTIFICATE-----subject=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=gamito@planetgeek.dynip.sapo.ptissuer=/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-SHAServer public key is 1024 bitCompression: NONEExpansion: NONESSL-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 segredoO OK LOGIN Ok.O LOGOUT* BYE Courier-IMAP server shutting downO OK LOGOUT completedclosedKwel :)
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.