Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Servidor de email: Postfix + Courier IMAP + RoundCube e usuários virtuais (Debian e derivados)
Linux user
isoares
29/09/2010
Configuração detalhada de um servidor de e-mails que utiliza autenticação por usuários virtuais não cadastrados no sistema Linux, mas sim no banco de dados PostgreSQL, com o webmail RoundCube para acesso dos usuários via internet.
Por: Isaias J. A. Soares (http://lattes.cnpq.br/9504289735203731)
[ Hits: 27564 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

Instalação do Postfix

Este artigo foi escrito durante o processo de configuração, portanto inclui alertas para erros que cometi (muitos comuns a iniciantes) e que me fizeram perder um tempão tentando descobrir o que era. Não sou um expert no assunto, ainda assim, estou postando aqui para que outros possam fazer disso uma tarefa mais branda, pois encontrei muitos 'buracos' e 'detalhes sem explicação' nos artigos que li. Este tutorial visa uma cobertura completa do básico no assunto.

1. Pré-requisitos

Para executar esse tutorial, deve-se ter um Debian (ou derivado) de 32bits, e os pacotes do apache, php, e postgresql 8.3 instalados e configurados. A questão de ser Debian 32 foi que encontrei um erro no courier-imap que não consegui contornar na versão 64 bits, e como já tinha feito o processo numa máquina-cobaia com Debian 5.0/32bits, optei por usar também essa distribuição para o servidor.

Obs.: Para instalação de pacotes eu uso aptitude (melhor verificação de dependências), mas o apt-get pode ser usado no lugar dele.

2. Instalação do Postfix

O Morimoto escreveu um excelente guia em:
Para a configuração inicial do Postfix é interessante dar uma olhada nessa referência. Bem, dito isso, vamos instalar os pacotes:

# aptitude install postfix postfix-ldap postfix-pgsql

Importante: a configuração, se não for feita na instalação, deve ser feita com o comando:

# dpkg-reconfigure postfix

Como opções, deve-se escolher:

General type of configuration?

-> Internet site (para um servidor 'real' de e-mails)

Conta de usuário admin:

-> fulano

mail name? (Nome do servidor de e-mails)

-> meudominio.com.br ou nome_do_meu_servidor

Destinatários para os quais aceitar emails: (Essencial se o servidor abrigar domínios virtuais) -> dominio1.com.br, domínio2.org, domínio3.net

Force synchronous update on mail queue?

-> Não

Qualquer dúvida, consultar os passos indicados no artigo do Morimoto para instalação e configuração iniciais do Postfix.

Finalizada a instalação, vamos fazer alguns testes.

É bom fazermos uma checagem geral com o comando:

# postfix check

Se houverem problemas aparecerão aqui, do contrário, não aparecerá nada.

Envio e recebimento por telnet (instale o telnet se não tiver com 'aptitude install telnet'):

2.a) Envio para serviço de email local:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 urano.meudominio.com.br ESMTP Postfix (Debian/GNU)
mail from: usuario@meudominio.com.br
250 2.1.0 Ok
rcpt to: usuario@meudominio.com.br
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
teste de envio de email de urano.
.

250 2.0.0 Ok: queued as B5966E0EE
quit
221 2.0.0 Bye
Connection closed by foreign host.

Obs.: Pode-se instalar e usar o mutt para ler (aptitude install mutt / mutt).

2.b) Envio para serviço de email externo:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 urano.meudominio.com.br ESMTP Postfix (Debian/GNU)
mail from: usuario@meudominio.com.br
250 2.1.0 Ok
rcpt to: email_de_teste@yahoo.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
teste de envio de email de urano.
.

250 2.0.0 Ok: queued as B5966E0EE
quit
221 2.0.0 Bye
Connection closed by foreign host.

O Postfix deve funcionar normalmente nas configurações padrão. Se estiver ok, vamos em frente. Se não, o problema tem que ser corrigido antes de prosseguir. Dica: dê uma olhada nos logs de sistema ('cat /var/log/syslog') e de email ('cat /var/log/mail.err ou mail.*') para ter algumas pistas dos problemas.

Próxima página >>




Páginas do artigo

Outros artigos deste autor
Nenhum artigo encontrado.

Leitura recomendada

Comentários
[1] Comentário enviado por doomk em 06/10/2010 - 16:30h:

Excelente Artigo.

Achei bem interessante a integração dele com o Postgree, até então só tinha visto para o MySQL.

Foi para o favoritos.


Forte abraço.

[2] Comentário enviado por isoares em 07/10/2010 - 15:13h:

Oi, doomk!

Obrigado. Esse artigo surgiu da minha dificuldade em instalar essa combinação de softwares. Na primeira tentativa, fiquei umas tres semanas, sem conseguir. Dava de cara com uma série de problemas, oriundos da minha falta de experiência no assunto e de conhecimento sobre esses esquemas de autenticação que citei. Resolvi então, durante a última tentativa, documentar tudo, pra virar artigo. Assim, outros e eu mesmo poderíamos consultar posteriormente.

A escolha do Postgres foi devida ao fato de que o utilizo como meu servidor padrão - desde sempre - de banco de dados. O Mysql pode ser mais rápido para determinadas tarefas, mas o Postgres é de longe mais completo. Claro, o foco de cada um deles é diferente.

Quando eu estudava na UFPR, um rapaz fez um estudo para o uso do Postgres para se montar um Datawarehouse (um banco de dados que armazena bancos de dados, como é feito no sistema bancário). A comparação do Postgres com os demais softwares, mesmo proprietários, me impressionou. Por isso, desde então, o adotei como servidor padrão.

Realmente, eu achei muita coisa envolvendo essa combinação com o Mysql no lugar do postgres, tive que dar uma boa garimpada para achar algo útil, mas, valeu a pena. Fico feliz que tenha gostado.

É possível que, futuramente, eu poste algumas melhorias, quando as tiver implementado.

Um forte abraço!

Isaias.

[3] Comentário enviado por renanrodrigues em 30/10/2010 - 04:02h:

Muito obrigado estava procurando um artigo desse você tirou minha duvida movendo para favoritos obrigado.

[4] Comentário enviado por doomk em 09/11/2010 - 15:27h:

Muito Legal.

Acabei de concluir a configuração de um servidor de e-mail baseando em seu tutorial, funcionou que uma beleza.

E mais, juntei também com o tutorial do nosso grande amigo douglashx, que nos mostrou como fazer um cluster, baseando nas soluções Heartbeat + DRBD8 + OCFS2 + MONIT + LVS.

http://www.vivaolinux.com.br/artigo/Alta-disponibilidade-com-Debian-Lenny-+-Heartbeat-+-DRBD8-+-OCFS...

Enfim, após bater um pouco de cabeça, está configurado um servidor de e-mail Postfix + Postgree + Roundcube + Heartbeat + Drbd8 + Ocfs2.

Muito bom.

Obrigado mais uma vez pela sua dedicação na elaboração deste valioso tutorial.

[5] Comentário enviado por geraldoquites em 06/12/2010 - 11:23h:

Bom dia "isoares" vou fazer a minha instalação geral usando o seu artigo. Estou usando o OpenSuse 11.3. Depois te dou retorno sobre as sequencias. Grande abraço, Geraldo.

[6] Comentário enviado por isoares em 06/12/2010 - 22:33h:

Olá doomk!

Obrigado, procurei fazer o mais detalhado possível. A configuração que vc montou deve ter ficado ótima, sem comentários, hehehe!

Fico muito grato e mesmo incentivado a escrever novos tutoriais, com esse feedback da comunidade!

Um forte abraço!

Isaias.

[7] Comentário enviado por isoares em 06/12/2010 - 22:36h:

Oi, Geraldo (geraldoquites)!

Bem, como você pode ver, esse tutorial foi elaborado para debian e derivados, mas creio que funcionará bem para outras distros também. Você vai ter, claro, que adaptar alguns passos, mas o esquema de configuração deve ser muito similar (se não idêntico), então, deve dar certo. Creio que o tutorial está detalhado o bastante para te permitir essa liberdade, com a plena compreensão dos passos que são necessários (configurações, autenticações, enfim). Fico aguardando pelo resultado! Boa sorte!

Um forte abraço!

Isaias.

[8] Comentário enviado por striteiro em 31/12/2010 - 09:39h:

Bom dia, segui a risca o tutorial, instalei e configurei tudo como manda o artigo, porem quando tento logar via webmail, me retorna o seguinte erro: A ligacao com o servidor IMAP falhou!
Alguem tem uma luz ?

desde ja, agradeco!=D

[9] Comentário enviado por isoares em 05/01/2011 - 00:25h:

Olá, striteiro!

Bem, você deve ficar atento a todas as recomendações do artigo. Esse tipo de erro que você menciona é percebido quando se faz os testes de autenticação, via telnet. O artigo menciona ainda a verificação dos erros nos logs (/var/log/syslog). Várias coisas podem dar errado, poste as mensagens, logs e o que mais puder.

Um forte abraço!

Isaias.

[10] Comentário enviado por andredemetriods em 04/03/2011 - 09:31h:

Bom dia Amigo,

Cheguei até o passo:
Agora vamos criar o usuário postfix no postgre, com a mesma senha que colocamos no script:
# su - postgres
Quando dou este comando, o shell me retorna:
ID desconhecido : postgres
Tens idéia do que pode ter acontencido?

Att,

[11] Comentário enviado por isoares em 17/04/2011 - 20:16h:

Olá, andredemetriods!

O usuário postgres é geralmente criado quando se instala o posgtres (pois ele é o usuário administrador do banco de dados). Se você instalou o Postgres e não possui esse usuário, das duas uma, ou seu usuário administrador está com outro nome, ou precisa reconfigurar o postgres novamente. Isso poderia ser feito com o gerenciador de pacotes, com o comando 'dpkg-reconfigure postgresql'.

Qualquer coisa, estou à disposição!
Um forte abraço!

Isaias

[12] Comentário enviado por alexandrehrs em 11/07/2011 - 10:41h:

Na minha empresa uso o roudcube, porem presico remover o acesso webmail de alguns usuarios e não sei como fazer. Alguem pode me ajudar.

[13] Comentário enviado por isoares em 19/07/2011 - 09:49h:

Oi, Alexandre! (alexandrehrs)

Bem, imagino que você esteja falando de usuários reais, cadastrados na máquina onde roda o servidor de email. Para conseguir isso, terá de trabalhar no sistema de autenticação, pois é esse sistema que libera o acesso ao sistema de e-mail.

Veja, se vc tiver usuários virtuais, é fácil, é só removê-los do banco de dados. Nesse caso, creio que, talvez, se você tiver muita experiência em autenticação, consiga isso. Eu não saberia como realizar essa tarefa, enfim, apenas uma idéia acerca disso. Você teria de criar um script de autenticação que permitisse todos, menos os usuários indesejados, um por um.Mas ao mesmo tempo, isso bloquearia também o acesso remoto do usuário à máquina. O fato de que o usuário seja um usuário real na máquina complica bastante as coisas. Na minha opinião, é mais fácil manter o servidor de e-mail em uma máquina separada, na qual esses usuários não tenham acesso, enfim. Desse modo, vc pode configurar do modo que descrevi e ter controle total de quem vai utilizar o sistema.

Um forte abraço!

Isaias.

[14] Comentário enviado por aldopassos em 27/10/2011 - 10:04h:

Bom dia amigo, estou com um problema e queria ver se alguem pode me dar uma luz, estamos com um servidor instalado com debian e postifix rodando normalmente enviando e recebendo de todos os principais servidores de e-mail (TERRA, YAHOO, HOTMAIL) porém há um específico que não consegue nos enviar mensagens, este servidor eu sei que utiliza o EXCHANGE e sempre que nos enviam mensagens o e-mail volta deizendo que não foi possível realizar a entrega e no meu servidor ela nem aparece, nem sequer no mail.log...
Se puder me dar uma luz do que posso fazer para resoolver o problema... Muito obrigado por enquanto...


[15] Comentário enviado por rodrigo.a.sc em 18/11/2011 - 15:34h:

Tenho uma grande duvida sobre o PostFix.

Como eu verifico o tamanho da conta de alguem ?
Crio uma conta via linha de comando?
faço o backup e o restore de uma caixa postal ??
Restarto apenas um serviço, tipo pop, smtp pois pelo zmcontrol so consigo restartar tudo de uma so vez até onde eu sei.

zmcontrol status
zmcontrol stop
zmcontrol start

so sei até ai.

Se alguem puder me dar um bizu ai eu fico grato!

[16] Comentário enviado por isoares em 29/11/2011 - 19:54h:

Oi, aldopassos!

Então, difícil de dizer. Não entendo quando você diz que 'o servidor usa exchange', pois o uso do exchange, pelo que sei, utiliza um provedor de email para acesso. Pode ser um problema de configuração na máquina que está te enviando o email, pois, como você mesmo disse, nem aparece nos logs, ou seja, do meu ponto de vista, seu servidor parece estar ok, o indivíduo que está te enviando a mensagem é que tem que checar suas configurações, imagino.

Um forte abraço!

Isaias.

[17] Comentário enviado por isoares em 29/11/2011 - 21:12h:

Oi, rodrigo.a.sc!

O 'tamanho da conta' é o tamanho do diretório que contém as mensagens do usuário.
Tenho um script para criar contas. Com ele dá para criar uma conta via linha de comando.
Eu criei uma mailbox 'template', que é um modelo do que eu queria (adicionei pasta de enviados
e tudo o que queria no roundcube), e a copio para a nova pasta do usuário. Tem um comando para
criar mailbox, que eu não cito aqui, mas que pode ser encontrado via google. Segue o script:

criar_usuario_virtual.sh:
---------------------------------------------------------------------------------------------------------------------
#!/bin/bash
# Script para criacao de usuarios virtuais para acesso ao webmail

#echo "[$1][$2]"

senha=""
if [[ ($1 != "") && ($2 != "") ]]; then
senha=$2
fi
if [[ "$1" == "" ]]; then
echo ""
echo "Sintaxe: ./criar_usuario_virtual.sh <login> <senha>"
echo ""
exit 1
fi

if [[ $senha == "" ]]; then
chave=`authpasswd`
else
chave=`echo "$senha"|authpasswd`
fi

chave=${chave//$/\\$}
login="$1"

echo "Tentando inserir usuario: [$login], chave: [$chave]">> /diretorio_mail_usuarios_virtuais/virtual.log

rsync -ar /diretorio_mail_usuarios_virtuais/template /diretorio_mail_usuarios_virtuais/$login

if [[ ! -d "/diretorio_mail_usuarios_virtuais/vusers/$login" ]]; then #Verifica se o diretório foi criado
echo "ERRO: Nao foi possivel criar o diretorio. Abortando.">> /diretorio_mail_usuarios_virtuais/virtual.log
exit 1
fi

chown -R postfix:postfix /diretorio_mail_usuarios_virtuais/$login

sql=`printf "INSERT INTO mailbox (username, password, name, maildir, quota, domain, created, modified, active) VALUES ('$login@seudominio.com', '$chave', ' ', '$login/', '0', ' ', current_timestamp, current_timestamp, '1');" `

comando=`printf "psql -d mail -c \"$sql\""`

result=`su -l usuario_autorizado_a_inserir_no_postgres -s /bin/bash -c "$comando"`

if [[ $result != "INSERT 0 1" ]]; then
echo "Falha na insercao do usuario no Postgres. Abortando.">>/diretorio_mail_usuarios_virtuais/virtual.log
exit 1
else
echo "Usuario [$login] inserido com sucesso."
echo "Usuario adicionado com sucesso: $login $senha $chave">>/root/virtuais.txt # grava um log
echo ""
fi
---------------------------------------------------------------------------------------------------------------------

E também tem um script para remover a conta (não apaga as mensagens, só remove do banco de dados. Claro,
pode ser modificado para fazer o que você desejar também:

apagar_usuario_virtual.sh:
---------------------------------------------------------------------------------------------------------------------
#!/bin/bash
# Script para apagar usuarios virtuais do acesso ao webmail

senha=""
if [[ ($1 != "") && ($2 != "") ]]; then
senha=$2
fi
if [[ "$1" == "" ]]; then
echo ""
echo "Sintaxe: ./apagar_usuario_virtual.sh <login>"
echo ""
exit 1
fi

login="$1"

echo "Tentando remover usuario: [$login]">> /diretorio_mail_usuarios_virtuais/virtual.log

sql=`printf "DELETE FROM mailbox WHERE maildir='$login/'"`

comando=`printf "psql -d mail -c \"$sql\""`

result=`su -l usuario_autorizado_a_inserir_no_postgres -s /bin/bash -c "$comando"`

if [[ $result != "DELETE 0 1" ]]; then
echo "Falha na insercao do usuario no Postgres. Abortando.">>/diretorio_mail_usuarios_virtuais/virtual.log
exit 1
else
echo "Usuario [$login] removido com sucesso."
echo "Usuario removido com sucesso: $login $senha $chave">>/root/virtuais.txt # grava um log
echo ""
fi
---------------------------------------------------------------------------------------------------------------------

Dá para fazer o backup e restore normalmente, como em qualquer diretório, se necessário.

Quanto aos serviços, é sempre bom reestartar tudo, para assegurar que as modificações estão valendo.

Ah, detalhes: os scripts são executados como root.

E é necessário configurar a conta de algum usuário para dar a ele acesso ao postgres, de inserção e remoção no banco de usuários virtuais.

Qualquer dúvida, estamos aí, é só perguntar.

Isaias.

[18] Comentário enviado por isoares em 26/12/2011 - 19:59h:

Só esclarecendo: no contexto do artigo, um 'usuário virtual' é um usuário que está cadastrado no sistema de email, mas não tem uma 'conta real' na máquina, isto é, não tem uma área 'home', nem senha, nem poderia logar via ssh, por exemplo. Esse método aumenta bastante a segurança do servidor, uma vez que há menos brechas de segurança a serem exploradas. Os dados do usuário virtual são armazenados num banco de dados, e o sistema de autenticação realiza a consulta no banco, no caso, o Postgre, e então valida o acesso.

Um forte abraço a todos!

Isaias.

[19] Comentário enviado por JZG em 09/02/2012 - 10:30h:

Bom dia,

estou tendo de instalar o servidor de email baseado em seu tutorial. Porém quando tento logar com 'useradmin' pelo comando #su useradmin é retornada a seguinte mensagem:
"unknown id: useradmin"

O usuário existe, quando fui cria-lo novamente me é enviada que "não é possivel executar a ação por que o usuário já existe".

O que pode ser?

[20] Comentário enviado por isoares em 10/02/2012 - 20:06h:

Oi, JZG!

Não entendi bem a sua pergunta, poderia ser mais específico? Bem, o tutorial trata de usuários virtuais, então, esses usuários são criados no banco de dados (outro dia postei um script que faz isso). Esse sistema é justamente para evitar que usuários do email sejam usuários reais na máquina, criando pos&#347;iveis brechas de segurança.

Qualquer dúvida, posta novamente, que estamos aí..

Isaias.

[21] Comentário enviado por melorymonie em 21/03/2012 - 17:11h:

Estou criando (tentando, pelo menos) um servidor de e-mail seguindo o seu tutorial, mas quando cheguei na parte de testar a conexão do imap me ocorreu o seguinte problema:
telnet 0 143
Trying 0.0.0.0...
Connected to 0.
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-2010 Double Precision, Inc. See COPYING for distribution information.
0 login user@teste.br teste
* BYE [ALERT] Fatal error: No such file or directory: No such file or directory
Connection closed by foreign host

olhando no log ele encontra o usuário no banco de dados, tudo certinho, mas no final do log encontrei o seguinte erro:
Mar 21 16:47:26 webmail2 imapd: chdir user/: No such file or directory
Mar 21 16:47:26 webmail2 imapd: user@teste.br: No such file or directory

Ai eu te pergunto, quando tenho que criar os maildirmake:
# maildirmake /home/postfix/Maildir/user
# maildirmake /home/postfix/Maildir/admin
# chown -R postfix:postfix /home/postfix

O meu usuário postfix tem que ter uma área de home?
Ou devo criar os diretórios em /var/users?

***************************************************
Segunda questão:
Quando testo o segundo telnet, me ocorre o seguinte erro:
telnet teste.br 110
telnet: could not resolve teste.br/110: Name or service not known

Você saberia me dizer porque isso ocorre?
Estou utilizando uma máquina virtual para realizar os testes, não tendo um IP real para isso, pode ter alguma coisa haver?

Obrigado e parabéns pelo post.




Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.