Domingo, 19 de Agosto de 2007
Leixões 1 - Benfica 1
Caros Lampiões,
Qual a probabilidade de um Nigeriano que veio do campeonato de Malta, marcar um golo na sua estreia contra um clube recém promovido a clube com mais sócios no mundo?
Deve ser como encontrar um trevo na tromba d'um elefante.
Ai o meu cálculo combinatório que já lá vai há tantos anos, senão calculava mesmo as probabilidades de tal acontecer, mas assim ao por alto, diria que com o Engº do Tenta e as condições acima descritas, devem ser elevadas :P
Abraços Leoninos
Servidor caseiro - XVIII
Como preparação para instalar e configurar o SpamAssassin e o qmail-scanner, tenho que primeiro instalar o maildrop e o t-nef.
O maildrop requer a biblioteca de desenvolvimento do pcre, pelo que tenho que a instalar:
# yum install pcre-develAgora o maildrop:
# ./configure && make && make install && ldconfige depois o t-nef (este software remove aqueles
attachments estúpidos do Outlook e Outlook Express):
# ./configure && make && make installKind Regards...
Servidor caseiro - XVII
O anti-vírus que utilizo para servidores de e-mail UNIX há muitos anos é o f-prot.
Não é software livre (nem
as in speach nem
as in beer), mas nunca me deixou passar um único vírus que fosse em servidores de produção.
Para utilização pessoal é gratuito.
É muito fácil de instalar, mas primeiro é preciso instalar três módulos PERL, cujas dependências ficam aqui assinaladas por identação:
libwww-perl Compress::Zlib Compress::Raw::Zlib IO::Compress::Base IO::Compress::Base::Common IO::Compress::GzipHTML::Parser HTML::Tagset
Para instalar o f-prot, copia-se a tarball para /usr/local e descomprime-se. Depois, executam-se os comandos:
# cd /usr/local/# ln -fs /usr/local/f-prot/f-prot.sh bin/f-prot# ln -fs /usr/local/f-prot/man_pages/ man/man8# chmod +x /usr/local/f-prot/f-prot*# ./check-updates.pl**************************************** F-Prot Antivirus Updater ****************************************There's a new version of:"Document/Office/Macro viruses" signatures on the web.Starting to download...Download completed.There's a new version of:"Application/Script viruses and Trojans" signatures on the web.Starting to download...Download completed.Preparing to install Application/Script viruses and Trojans signatures.Application/Script viruses and Trojans signatures have successfully been installed.Preparing to install Document/Office/Macro viruses signatures.Document/Office/Macro viruses signatures have successfully been installed.*********************************** Update completed successfully. ***********************************Finalmente, coloca-se uma linha no crontab, para que todos os dias às 00:00 horas, seja executado o comando que faz o download das definições dos vírus.
00 * * * * root /usr/local/f-prot/tools/check-updates.plQuickie :)
Servidor caseiro - XVI
Agora que o servidor de e-mail está quase instalado (falta o anti-vírus, o SpamAssassin, o
webmail e as
interfaces gráficas de gestão), alguns pontos a considerar:
- Não posso utilizar o SMTP porque o meu IP público do SAPO ADSL está blacklisted no spamhaus (pelo menos) e deste modo as mensagens nem entram nos servidores de destino, são rejeitadas logo à partida;
- Como o servidor está a obter IP dinâmico do meu router, sempre que é (re)inicializado, o sistema coloca o IP do DNS do mesmo no ficheiro /etc/resolv.conf
Para que quando o servidor arranque, seja utilizada a cache de DNS que instalei, coloco no ficheiro /etc/rc.local, a linha
echo "nameserver 127.0.0.1" > /etc/resolv.conf
Deste modo, como os comandos contidos neste ficheiro são os últimos a serem executados quando o sistema arranca, fico sempre no ficheiro /etc/resolv.conf com o IP da minha cache de DNS;
- Para problemas com as run files do qmail, um bom método de "debugar" é executar o comando:
# ps auxwww | grep readproctitle
Vão aparecer todas as descrições dos problemas.
Claro que os logs do qmail também são uma ajuda inestimável;
- Existe um script em PERL, chamado qmHandle que é excelente para gerir a queue do qmail. Saca daqui;
- Convém instalar o qmess822 do DJB para substituir o qmail-inject. Isto evita os problemas gerados por clientes de e-mail mal comportados como o (in)famous Outlook;
- Ficaram muitas coisas por explicar, onde está o software, truques, minas e alçapões, etc., mas explicar tudo levaria dias.
Se alguém estiver a seguir esta série de artigos (coisa que duvido), coloque as questões em comentários aos artigos que terei muito gosto em ajudar no que puder.
Entering lunch mode...
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 :)
Servidor caseiro - XIV
Virtualizar utilizadores é sempre uma
good thing (TM).
O vpopmail é um software que permite a virtualização de utilizadores para o qmail e é muito fácil de instalar.
- Instalação do vpopmail
# ./configure --enable-qmaildir=/var/qmail --enable-qmail-newu=/var/qmail/bin/qmail-newu --enable-qmail-inject=/var/qmail/bin/qmail-inject --enable-qmail-newmrh=/var/qmail/bin/qmail-newmrh --enable-vpopuser=vpopmail --enable-vpopgroup=vchkpw --enable-roaming-users=n --enable-tcprules-prog=/usr/local/bin/tcprules --enable-tcpserver-file=/var/qmail/control/tcp.smtp --enable-logging=v --enable-md5-passwords=y --enable-log-name=vpopmail --enable-auth-module=cdb --enable-qmail-ext=y --enable-ip-alias-domains=n --enable-passwd=n --enable-learn-passwords=y --enable-auth-logging=y
# make
# make install-strip
Criar um domínio e um utilizador:
# ./vadddomain planetgeek.dynip.sapo.pt
Please enter password for postmaster:
enter password again:
# ./vadduser teste@planetgeek.dynip.sapo.pt
Please enter password for user:
enter password again:
Já não é necessário existir o utilizador de sistema "teste" para que possa enviar e receber e-mail.
Em lugar disso, dentro do directório /home/vpopmail, foi criado um planetgeek.dynip.sapo.pt (relativo ao domínio) e dentro desse um "teste" com a Maildir.
A
run file do qmail-popup, teve que ser alterada, pois já não é o checkpassword que faz a autenticação, mas o vchkpw.
Assim, a
run file do qmail-popup, passa a:
#!/bin/shexec env - PATH="/usr/local/bin:/home/vpopmail/bin:/var/qmail/bin" \ tcpserver -v -l 0 -R 0 pop3 \ qmail-popup planetgeek.dynip.sapo.pt \ vchkpw \ qmail-pop3d Maildir \
2>&1Também tive que alterar uma linha no stunnel.conf, para que o POP3/SSL possa funcionar neste novo esquema, deste modo, a linha
execargs = qmail-popup 0 /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildirpassa a
execargs = qmail-popup 0 /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d MaildirVou verificar se o POP3 e o POP3/SSL continuam a funcionar neste novo esquema.
- Envio de mensagem de teste
# telnet planetgeek.dynip.sapo.pt 25
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
220 planetgeek.dynip.sapo.pt ESMTP
EHLO planetgeek.dynip.sapo.pt
250-planetgeek.dynip.sapo.pt
250-PIPELINING
250 8BITMIME
MAIL FROM: root@planetgeek.dynip.sapo.pt
250 ok
RCPT TO: teste@planetgeek.dynip.sapo.pt
250 ok
DATA
354 go ahead
Teste do vpopmail
.
250 ok 1187510342 qp 2362
QUIT
221 planetgeek.dynip.sapo.pt
Connection closed by foreign host.
Fiquei com a mensagem em /home/vpopmail/domains/planetgeek.dynip.s
apo.pt/teste/Maildir/new/:
# cd /home/vpopmail/domains/planetgeek.dynip.sapo.pt/teste/Maildir/new/# lltotal 4-rw------- 1 vpopmail vchkpw 293 Aug 19 08:59 1187510343.2366.planetgeek.dynip.sapo.pt,S=293# cat 1187510343.2366.planetgeek.dynip.sapo.pt\,S\=293Return-Path: <root@planetgeek.dynip.sapo.pt>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101) by 0 with SMTP; 19 Aug 2007 07:58:53 -0000Teste do vpopmailConclui-se que a mensagem chegou ao sítio certo.
Vou testar agora os
daemons (note-se que o
login tem que conter agora também a parte do domínio, ou seja o endereço de e-mail completo):
- POP3
# telnet planetgeek.dynip.sapo.pt 110
Trying 192.168.0.101...
Connected to planetgeek.dynip.sapo.pt (192.168.0.101).
Escape character is '^]'.
+OK <2384.1187510433@planetgeek.dynip.sapo.pt>
user teste@planetgeek.dynip.sapo.pt
+OK
pass segredo
+OK
stat
+OK 1 293
list
+OK
1 293
.
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 19 Aug 2007 07:58:53 -0000
Teste do vpopmail
.
quit
+OK
Connection closed by foreign host.
- POP3/SSL
# openssl s_client -connect planetgeek.dynip.sapo.pt:995
CONNECTED(00000003)
depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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=teste@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=teste@planetgeek.dynip.sapo.pt
i:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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=teste@planetgeek.dynip.sapo.pt
issuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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: AD21D1919EBA3E621AE33FE42E6F585EC5D82DFC4AC8B5E1EA23F9AB70708A5F
Session-ID-ctx:
Master-Key: 0FEB364425D36C8DB10EE32D0EF8FABDC2CC4F6281DF63BC46352C53987CE59CDC8E42CAA95FDA0458204B8CC8C8BEBE
Key-Arg : None
Start Time: 1187510526
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
+OK <2398.1187510526@0>
user teste@planetgeek.dynip.sapo.pt
+OK
pass segredo
+OK
stat
+OK 1 293
retr 1
+OK
Return-Path: <root@planetgeek.dynip.sapo.pt>
Delivered-To: teste@planetgeek.dynip.sapo.pt
Received: (qmail 2362 invoked by uid 0); 19 Aug 2007 07:58:53 -0000
Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101)
by 0 with SMTP; 19 Aug 2007 07:58:53 -0000
Teste do vpopmail
.
quit
+OK
closed
All is well...
Servidor caseiro - XIII
O qmail funciona com
run files. Aqui ficam as que estou a usar (discutíveis, claro):
- qmail-send:
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
- qmail-smtpd
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin" \
softlimit -m 5000000 tcpserver -v -P -R -H -l 0 \
-x /var/qmail/control/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp \
qmail-smtpd \
2>&1
- qmail-popup
#!/bin/sh
exec env - PATH="/usr/local/bin:/var/qmail/bin" \
tcpserver -v -l 0 -R 0 pop3 \
qmail-popup planetgeek.dynip.sapo.pt \
checkpassword \
qmail-pop3d Maildir \
2>&1
- qmail-popups
#!/bin/sh
exec env - PATH="/usr/local/bin:/usr/local/sbin" \
tcpserver -v -R -H -l 0 0 995 \
stunnel /usr/local/etc/stunnel/stunnel.conf \
2>&1
- logs
As run files dos logs são todas iguais, só muda o nome do serviço, fica aqui a do qmail-send como exemplo:
#!/bin/sh
env - PATH="/usr/local/bin" \
setuidgid qmaill multilog t s2500000 /var/log/qmail/qmail-send \
2>&1
Bye for today...
Servidor caseiro - XII
POP3
over SSL, importante isto, as pessoas deviam habituar-se a utilizarem comunicações seguras nos seus e-mails, embora a maioria das vezes os responsáveis sejam os administradores de sistemas que ou não estão sensibilizados para a questão ou são incompetentes.
Há vários modos de implementar POP3/SSL em qmail, as mais das vezes, recorrendo a
patches.
Eu prefiro utilizar o stunnel.
O stunnel é um software que permite cifrar ligações TCP/IP sobre SSL sem ser necessário mexer no código dos
daemons, nest caso o qmail-popup.
Na prática, o que vai acontecer é o estabelecimento de um túnel SSL entre o cliente de correio electrónico e o servidor. Dentro deste túnel SSL, vão passar os comandos normais do POP3 que o stunnel encaminha para o qmail-popup. Assim, a comunicação que passa na rede é segura.
Primeiro, é necessário criar uma chave SSL para o servidor:
# ./openssl req -new -x509 -days 365 -nodes -out imapd.pem -keyout imapd.pem || cleanup# ./openssl gendh >> imapd.pem || cleanout# ./openssl x509 -subject -dates -fingerprint -noout -in imapd.pem || cleanupDe seguida, instalar e configurar o stunnel (na instalação, são-me pedidos os dados para a criação de um certificado, mas é irrelevante, pois vai ser substituído pelo criado acima):
# ./configure --with-ssl=/usr/local/ssl# make# make install# cp /usr/local/ssl/bin/imapd.pem /usr/local/etc/stunnel/stunnel.pem# cd /usr/local/etc/stunnel/# cp stunnel.conf-sample stunnel.confO ficheiro stunnel.conf deve ficar exactamente assim:
; Sample stunnel configuration file by Michal Trojnara 2002-2006; Some options used here may not be adequate for your particular configuration; Please make sure you understand them (especially the effect of chroot jail); Certificate/key is needed in server mode and optional in client modecert = /usr/local/etc/stunnel/stunnel.pem;key = /usr/local/etc/stunnel/mail.pem; Protocol version (all, SSLv2, SSLv3, TLSv1)sslVersion = all; Some security enhancements for UNIX systems - comment them out on Win32#chroot = /usr/local/var/lib/stunnel/#setuid = nobody#setgid = nobody; PID is created inside chroot jailpid = /tmp/stunnel.pid; Some performance tuningssocket = l:TCP_NODELAY=1socket = r:TCP_NODELAY=1;compression = rle; Workaround for Eudora bug;options = DONT_INSERT_EMPTY_FRAGMENTS; Authentication stuff;verify = 2; Don't forget to c_rehash CApath; CApath is located inside chroot jail;CApath = /certs; It's often easier to use CAfile;CAfile = /usr/local/etc/stunnel/certs.pem; Don't forget to c_rehash CRLpath; CRLpath is located inside chroot jail;CRLpath = /crls; Alternatively you can use CRLfile;CRLfile = /usr/local/etc/stunnel/crls.pem; Some debugging stuff useful for troubleshootingdebug = 7output = stunnel.logexec = /var/qmail/bin/qmail-popupexecargs = qmail-popup 0 /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildirtransparent = yeslocal = 192.168.0.101; Use it for client modeclient = no; Service-level configuration#[pop3s]#accept = 995#connect = 110#[imaps]#accept = 993#connect = 143#[ssmtp]#accept = 465#connect = 25;[https]#;accept = 443#;connect = 80#;TIMEOUTclose = 0; vim:ft=dosiniÉ necessário criar uma
run file nova para o POP3/SSL:
#!/bin/shenv - PATH="/usr/local/bin" \ setuidgid qmaill multilog t s2500000 /var/log/qmail/qmail-popups \ 2>&1Envio um e-mail primeiro:
# telnet planetgeek.dynip.sapo.pt 25Trying 192.168.0.101...Connected to planetgeek.dynip.sapo.pt (192.168.0.101).Escape character is '^]'.220 planetgeek.dynip.sapo.pt ESMTPEHLO planetgeek.dynip.sapo.pt250-planetgeek.dynip.sapo.pt250-PIPELINING250 8BITMIMEMAIL FROM: root@planetgeek.dynip.sapo.pt250 okRCPT TO: teste@planetgeek.dynip.sapo.pt250 okDATA354 go aheadTeste do POP3/SSL.250 ok 1187479718 qp 8456QUIT221 planetgeek.dynip.sapo.ptConnection closed by foreign host.Agora testo com o openssl (a porta do POP3/SSL é a 995):
# /usr/local/ssl/bin/openssl s_client -connect planetgeek.dynip.sapo.pt:995CONNECTED(00000003)depth=0 /C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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=teste@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=teste@planetgeek.dynip.sapo.pt i:/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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=teste@planetgeek.dynip.sapo.ptissuer=/C=pt/ST=Aveiro/L=Ilhavo/O=Home/OU=Devel/CN=planetgeek.dynip.sapo.pt/emailAddress=teste@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: 7466A4FF1DCCEB905D40DDD0DE27F5162B82192ADE6A35B4309AB6A920F81EC5 Session-ID-ctx: Master-Key: 2F48EBCFC4134C96571D61598A38AF35B31A6A1C14419484E57F924B16FD8C75B33685A9B3D35957188F2451F823DEF7 Key-Arg : None Start Time: 1187480851 Timeout : 300 (sec) Verify return code: 18 (self signed certificate)---+OK <8539.1187480851@0>user teste+OKpass segredo+OKstat+OK 1 293list+OK1 293.retr 1+OKReturn-Path: <root@planetgeek.dynip.sapo.pt>Delivered-To: teste@planetgeek.dynip.sapo.ptReceived: (qmail 8456 invoked by uid 0); 18 Aug 2007 23:28:22 -0000Received: from unknown (HELO planetgeek.dynip.sapo.pt) (192.168.0.101) by 0 with SMTP; 18 Aug 2007 23:28:22 -0000Teste do POP3/SSL.dele 1+OKquit+OKclosedFunga :)
Until next...
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.