Servidor POP/IMAP com Cyrus
A implementação padrão, de referência, do protocolo IMAP é baseada no servidor Cyrus. O servidor Cyrus usa um método próprio de armazenamento de mensagens. Cada mensagem é armazenada em um arquivo. Os cabeçalhos das mensagens e o estado das mensagens (lido, por exemplo) são armazenados em uma base de dados.
Todas as mensagens são indexadas para melhor performance. O servidor Cyrus-IMAP é tido como umas das implementações mais rápidas e é apropriado para manuseio de grande volume de usuários e mensagens.
O Cyrus-IMAP usa o autenticador externo Cyrus-SASL, baseado na SASL (Camadas de Autenticação e Segurança Simples). O serviço “saslauthd” é responsável por atender aos pedidos de autenticação.
A tarefa de configurar a camada de autenticação para uso do OpenLDAP possibilita usos futuros da infraestrutura, como a implementação de SMTP autenticado.
Instalando e configurando suporte a SASL
Uma vez que vamos utilizar o Cyrus com autenticação SASL é fundamental instalar e configurar esse serviço antes.
1. Instale o “sasluthd” com o seguinte comando:
aptitude install sasl2-bin
2. Edite o arquivo /etc/default/saslauthd
3. Altere a opção START para “yes”
4. Altere a opção MECHANISMS para “ldap”
5. Reinicie o “saslauthd” com o seguinte comando:
/etc/init.d/saslauthd restart
6. Crie o arquivo “/etc/saslauthd.conf” com o seguinte conteúdo:
ldap_servers: ldap://ldap__.kyapanel.com.br ldap_port: 389 ldap_version: 3 ldap_referrals: no ldap_auth_method: bind ldap_search_base: dc=kyapanel,dc=com,dc=br ldap_filter: uid=%u
Explicando
linha 1 – Define o “host” do servidor LDAP onde será feita a pesquisa
linha 2 – Define a porta de conexão com o servidor LDAP
linha 3 – Define a versão do protocolo que será utilizada
linha 4 – Define se o cliente poderá ou não seguir referências lógicas
linha 5 – Define o método de autenticação (bind | custom | fastbind)*
linha 6 – Define o “galho” onde a pesquisa será realizada
linha 7 – Define o filtro de pesquisa
A opção desconhecida na lista acima é a “ldap_auth_method”. Vamos entender as três opções:
bind – Esta é a opção padrão e ela é utilizada para perguntar diretamente à base LDAP se o par usuário + senha coincidem;
custom – Esta opção usa o atributo “userPassowrd” para validar o par usuário + senha. Ele suporta os “hashes”: crypt, md5, smd5, sha e ssha. Além de texto plano.
fastbind – É igual à opção “bind” mas utiliza o DN completo para validação.
7. Utilize o comando “testsaslauthd” para testar o SASL. Abaixo um exemplo:
testsaslauthd -u fulano1 -p fulano1
Perceba que a opção “-u” define o usuário e a opção “-p” define a senha do usuário. O resultado do comando é auto-explicativo e indicará se a conexão entre o SASL e o LDAP foi o não realizada com sucesso.
Instalando o Cyrus
Para instalar o Cyrus execute o seguinte comando:
aptitude install cyrus21-pop3d cyrus21-imapd cyrus21-admin
Configurando o Cyrus
1. Edite o arquivo de configuração do Cyrus, /etc/imapd.conf
2. Descomente a opção “admins”
3. Descomente a opção “sasl_mech_list”
4. Descomente e defina a opção “sasl_pwcheck_method” para “saslauthd”
5. Reinicie o Cyrus utilizando o seguinte comando:
/etc/init.d/cyrus21 restart
Configurando o Postfix para usar LMTP
Para que o Postfix possa entregar as mensagens ao Cyrus é necessário configurá-lo.
1. Edite o arquivo de configuração /etc/postfix/main.cf e adicione o conteúdo abaixo:
mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp
2. É necessário “desenjaular” o seviço “lmtp”, que por padrão vem enjaulado no Postfix. Para fazer isso edite o arquivo /etc/postfix/master.cf e procure pela opção “lmtp”. Altere a configuração para que fique assim:
lmtp unix - - n - - lmtp
Perceba que a alteração está na troca do caracter “-” pelo caracter “n”.
3. Será necessário criar o grupo “lmtp”, adicioná-lo ao grupo postfix e depois ajustar às permissões do arquivo de “SOCKET” do Cyrus. Para isso execute:
dpkg-statoverride --remove /var/run/cyrus/socket dpkg-statoverride --add cyrus postfix 750 /var/run/cyrus/socket
4. Reinicie o Cyrus e o Postfix com o comando:
/etc/init.d/cyrus21 restart /etc/init.d/postfix restart
Criando contas no Cyrus
Antes de poder criar as contas no Cyrus será necessário criar o usuário “cyrus” na base LDAP. Esse é o usuário administrativo do Cyrus.
1. Crie um arquivo chamado “cyrus.ldif” com o seguinte conteúdo:
dn: cn=cyrus,dc=kyapanel,dc=com,dc=br cn: cyrus objectClass: organizationalRole objectClass: posixAccount objectClass: simpleSecurityObject uid: cyrus uidNumber: 1010 gidNumber: 1010 homeDirectory: /home/cyrus userPassword: 123456 description: Cyrus Admin user
2. Adicione o conteúdo do arquivo “ldif” com o comando:
ldapadd -h ldap__.kyapanel.com.br -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f cyrus.ldif
3. Para adicionar as contas no Cyrus utilize os comandos abaixo:
cyradm --user cyrus ldap__.kyapanel.com.br IMAP Password: ldap__.kyapanel.com.br> cm user.fulano1 ldap__.kyapanel.com.br> cm user.fulano1.SENT ldap__.kyapanel.com.br> cm user.fulano1.TRASH ldap__.kyapanel.com.br> cm user.fulano1.SPAM ldap__.kyapanel.com.br> quit
Testes de funcionamento
Para saber se tudo está funcionando como deveria vamos enviar uma mensagem ao usuário fulano1@kyapanel.com.br e ver se a mensagem está acessível pelo protocolo POP.
1. Abra um terminal e monitore o arquivo de “log” do Postfix:
tail -f /var/log/mail.log
2. Abra um segundo terminal e envie uma mensagem para o usuário fulano1@kyapanel.com.br:
echo "Teste final" | mail -s "Teste final" fulano1@kyapanel.com.br
Procure pela mensagem de sucesso, ou seja, “status=sent”
3. No mesmo terminal utilize o comando “telnet” para se conectar na porta 110 que é a porta utilizada pelo protocolo POP3:
telnet ldap__.kyapanel.com.br 110 user fulano1 pass fulano1 list retr 1 quit
Licença
Copyright 2007 Anahuac de Paula Gil e Francisco Kem Iti Saito
Permite-se distribuição, publicação e cópia literal da íntegra deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.
Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.