jul 21

Devido a escassez de tutoriais na internet ensinando a instalar o Postfix em MySQL e os que eu encontrei geralmente dão erros e acabam não funcionando direito, resolvi fazer este que depois de testado sucessivamente não apresentou nenhum erro. Lembrando que este tutorial foi desenvolvido em um Debian Sarge, não testei no Woody.

Vou levar em garantia que você ja tenha algum conhecimento em utilizar sistemas operacionais unix, pois senão teria de ficar explicando passo-a-passo, qualquer dúvida que tenha, basta utilizar os comentários.

Estou quebrando este arquivo para ser lido em uma página separada pois o mesmo está bem explicado e com isso ficou bem extenso, o que atrapalharia o layout principal.

1º Passo, instalando os pacotes necessários:

aptitude update
aptitude install postfix postfix-mysql postfix-doc mysql-server

Após a instalação, será questionado qual a utilização do postfix, escolha “Local Only” se for usar somente em sua rede, caso contrário, selecione “Internet”.

2º Passo, criando o banco de dados:
Dica: Se é a primeira vez que está instalando o MySQL, você poderá usá-lo sem senha, o que ocorre numa grande falha de segurança, pois assim qualquer usuário que tenha acesso neste servidor poderá acessá-lo com total privilégio, para setar a nova senha, vamos executar o comando abaixo:

mysqladmin -u root password sua-nova-senha

Agora vamos criar o banco de dados com o comando abaixo:

mysqladmin -u root -p create postfix

Agora vamos acessar o MySQL e criar o usuário postfix e dar permissões:

mysql -u root -p
grant select on postfix.* to postfix@localhost identified by 'senha-que-quiser';

Agora vamos recarregar os privilégios para surtir efeito no que fizemos:

flush privileges;

3º Passo, criando as tabelas:
Ainda no MySQL, vamos criar as tabelas que nosso servidor Postfix vai utilizar:

USE postfix;

Vamos criar a tabela para os domínios que vamos utilizar no postfix:

CREATE TABLE dominios (
dominio varchar(50) NOT NULL,
PRIMARY KEY (dominio)
) TYPE=MyISAM;

Agora vamos criar a tabela responsável pelos redirecionamentos de e-mail:

CREATE TABLE redirecionamentos (
alias varchar(80) NOT NULL,
destino TEXT NOT NULL,
PRIMARY KEY (alias)
) TYPE=MyISAM;

E por último vamos criar a tabela responsável pelas contas de usuário no nosso servidor:

CREATE TABLE usuarios (
email varchar(80) NOT NULL,
senha varchar(20) NOT NULL,
PRIMARY KEY (email)
) TYPE=MyISAM;

4º Passo, mostrando ao Postfix aonde pegar os dados no MySQL:
Por omissão, ao instalarmos o Postfix com suporte a MySQL, ele não vem configurado para utilizar o banco de dados, fazendo então o uso de arquivos de texto, assim como na sua instalação sem suporte a MySQL. É necessário criar 4 arquivos dentro do diretório de configuração (/etc/postfix). Mãos à massa!

virtual_dominios.cf:

user = postfix
password = senha-que-especificou-para-o-usuario-postfix
dbname = postfix
table = dominios
select_field = 'virtual'
where_field = dominio
hosts = 127.0.0.1

virtual_redirecionamentos.cf:

user = postfix
password = senha-que-especificou-para-o-usuario-postfix
dbname = postfix
table = redirecionamentos
select_field = destino
where_field = alias
hosts = 127.0.0.1

virtual_mailboxes.cf:

user = postfix
password = senha-que-especificou-para-o-usuario-postfix
dbname = postfix
table = usuarios
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
where_field = email
hosts = 127.0.0.1

virtual_mail2mail.cf:

user = postfix
password = senha-que-especificou-para-o-usuario-postfix
dbname = postfix
table = usuarios
select_field = email
where_field = email
hosts = 127.0.0.1

Tenha certeza que ninguém consiga ter acesso a esses arquivos, com exceção do usuário root, pois qualquer um com acesso em seu servidor conseguirá ver as senhas dos usuários em modo texto. Para maior segurança, vamos alterar o grupo dos arquivos e mudar as permissões dos mesmos:

chgrp postfix /etc/postfix/virtual_*.cf
chmod u=rw,g=r,o= /etc/postfix/virtual_*.cf

5º Passo, vamos criar um usuário para mapear e gerenciar todas as contas e e-mails enviados a partir do nosso servidor:

groupadd -g 8500 gmail
useradd -g gmail -u 8500 gmail -d /home/gmail -m

6º Passo, agora precisamos editar o arquivo main.cf para que possamos especificar onde estão os arquivos que criamos e para que o Postfix possa trabalhar utilizando o seu servidor MySQL. Você poderá utilizar o editor de textos preferido.
Seu arquivo main.cf ja estará com a maioria das configurações feitas, só precisamos inserir e alterar alguns ítens que são essenciais para o redirecionamento de e-mails quando a conexão vem de fora do seu servidor. Mãos à obra!

Em myhostname (caso seu servidor não tenha detectado automaticamente) é necessário inserir o hostname FQDN do servidor, ou seja, um nome de domínio que aponte para o seu servidor. Caso isso não seja feito, os e-mails enviados a partir do seu servidor poderá cair nas caixas de spam dos servidores.

myhostname = mail.seuservidor.com.br

Em mydomain vamos especificar o domínio principal que nosso servidor vai utilizar:

mydomain = seuservidor.com.br

Em mydestination vamos especificar os domínios que este servidor vai gerenciar. Separe os domínios por vírgula e não liste aqui os domínios que vai utilizar para redirecionamentos de e-mail que não seja o domínio principal. As opções abaixo normalmente já estão especificadas, só é necessário a inclusão do $mydomain por último:

mydestination = mail.seuservidor.com.br, localhost.seuservidor.com.br, localhost, $mydomain

Em mynetworks você precisa especificar a quais endereços IPs (caso você tenha mais de um sem contar com o localhost) seu servidor Postfix vai ‘obedecer’ e aceitar o envio. Separe os endereços com vírgula (coloque seu IP externo somente se você desejar que sejam recebidos (e se utilizar redirecionamentos, repassados) de endereços externos:

mynetworks = 127.0.0.0/8, 192.168.0.0/24, 200.199.12.5

Vamos inserir a opção (caso não exista) inet_interfaces, fazendo com que o nosso servidor seja ouvido em todas as interfaces de rede:

inet_interfaces = all

Logo no final do arquivo, vamos adicionar essas linhas que são correspondentes aos arquivos que criamos para que o Postfix funcione em MySQL:

virtual_alias_domains = $virtual_alias_maps
virtual_alias_maps = mysql:/etc/postfix/virtual_redirecionamentos.cf mysql:/etc/postfix/virtual_mail2mail.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual_dominios.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual_mailboxes.cf
virtual_mailbox_base = /home/gmail
virtual_uid_maps = static:8500
virtual_gid_maps = static:8500

7º Passo, aplicando configurações e procurando erros:
Feito isso, vamos recarregar o Postfix para que faça efeito nas alterações e logo após checar se há algum erro. Caso nenhuma mensagem de erro apareça, seu servidor está devidamente configurado!

postfix reload
postfix check

Pronto, você configurou seu servidor Postfix para utilizar o MySQL. Note que até então somente usuários que estejam dentro da rede especificado em mynetworks poderão utilizar seu servidor para enviar e-mails. No tutorial 02, estarei ensinando a como fazer com que usuários fora das redes especificadas possam se autenticar por SMTP e estejam enviando e-mails também.

Related Posts with Thumbnails

View Comments “Instalando Postfix com MySQL (Debian) – Parte 01”

  1. Lincoln Lamas disse:

    Instalando Postfix com MySQL (Debian) – Parte 01 http://twurl.nl/1tc7yp

  2. Lincoln Lamas disse:

    Instalando Postfix com MySQL (Debian) – Parte 01 http://twurl.nl/1tc7yp

  3. rgb0 disse:

    Achei muito legal seu tutorial e estou tentando fazer igual, porem como fa;o para adicionar usuarios? E como configuro o meu pine ou Outlook express? Voc”e pode me ajudar?

  4. llamas disse:

    @ rgb0:

    Estou terminando a parte 2 do tutorial. Neste passo estarei abordando como fazer a instalação do servidor smtp para aceitar conexões externas autenticando o usuário e senha, para poder enviar e receber e-mails…

    Esta demora para publicar as outras partes dá-se a oferecer para os visitantes do blog um tutorial sem erros de configuração e de bom entendimento.

    Obrigado pelo comentário e pela sua compreensão.

  5. [...] de termos configurado o Postfix pra funcionar para os usuários dentro da mesma rede do servidor (clique aqui para ver este tutorial), agora vamos aprender a configurar o servidor Postfix para que os usuários fora dessa rede possam [...]

  6. Marco Aurélio disse:

    Otimo tutorial, principalmente para quem quer criar um servidor postfix rapidinho para ver como é o funcionamento.
    Apenas uma observação, encontrei um erro no seu arquivo de configuração main.cf na linha:
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf

    Deveria ser:
    virtual_mailbox_maps = mysql:/etc/postfix/virtual_mailboxes.cf
    Não?
    Enfim, testei dessa forma aqui e funcionou perfeitamente, creio que deve ter sido só um erro de digitação. Vou ler a segunda parte do artigo agora.

  7. llamas disse:

    @Marco Aurélio
    Obrigado!

    Sim, era um erro de digitação, estarei corrigindo agora.
    Mais uma vez, obrigado.

  8. Amado2vezes disse:

    Llamas estou tendo dificuldades em fazer este servidor de emails funcionar.

    o problema segundo os logs é que o postfix não está conseguindo autenticar o usuario com o mysql eu tento via imap

    telnet localhost 143
    a login tairone@dominio senha

    Me retorna erro na autenticação. O usuário postfix consegue acessar o banco mas os demais não consegue autenticar-se voce pode me ajudar?! valeu.

    • llamas disse:

      Refaça todos os passos.
      Experimente não copiar/colar e sim digitar tudo o que está escrito.
      99% dos erros enviados pelos leitores foi por culpa de copiar e colar.

      Ao que tudo indica, o problema está no comando que o postfix executa para ler os dados no banco de dados, porque ele se conecta com sucesso mas não consegue executar o comando que consulta no banco de dados a existencia do usuário/senha.

      Se não der certo refazer tudo escrevendo caractere por caractere sem copiar e colar, poste o código aqui que darei uma olhada e tentarei ajudar.

  9. Maggi disse:

    consegui fazer o mysql achar o user… mas agora as mensagens nao chega na caixa de entrada. eu criei um diretorio /home/gmail/pardalz.no-ip.info/ e dei maildirmake.courier /home/gmail/pardalz.no-ip.info/william, mas mesmo assim as mensagens nao chegam para mim.. muito estranho isso.. entao eu fiz um teste.. “$touch /home/gmail/pardalz.no-ip.info/william/new/email.txt” fui no client de email e ele baixou a mensagem… so que quando eu envio para mim mesmo.. ela eh removida… eu postei uma pergunta no viva o linux com o erro.
    olha: http://www.vivaolinux.com.br/topico/Postfix/PostFix-+-courier-me-dando-dor-de-cabeca/
    porem ainda nao recebi retorno.
    tem alguma coisa a ver eu usar debian lenny? tem algo que precisa mudar??
    muito obrigado por estar perdendo seu tempo aki comigo.. hehe abraço

  10. Geraldo Quites disse:

    Lamas, este seu comentário é fantástico, de excelente didática, parabéns. Eu tentei executá-lo, mas como a minha necessidade é outra, fiquei a desejar em algumas instruções.

    A minha necessidade é a seguinte: Montei um servidor linux da distro Suse 10.1 e a minha intenção é que meu servidor linux baixe todas as minhas mensagens de email que ficam num servidor externo. Eu instalei o postfix e já consigo baixar estar mensagens e todas ficam na pasta /var/mail/”usuario” e a cada 5 minutos ele faz uma leitura no servidor externo de email e vai baixando essas mensagens. Como faço para que o Outlook das minhas estações de trabalho reconheço o meu servidor linux para baixar essas mensagens que estão nesta pasta /var/mail/”usuário”? Toda vez que rodo o telnet na porta 110 ele sempre me dá essa mensagem:
    ciltda:~ # telnet 0 110
    Trying 0.0.0.0…
    Connected to 0.
    Escape character is '^]'.
    +OK POP3 localhost 2004.89 server ready
    user geraldo
    -ERR Unknown AUTHORIZATION state command

    Esse meu usuario “geraldo” já está cadastrado no mysql.

    Estou perdido e não estou conseguindo fazer ele funcionar.
    Se puder me ajudar ficarei grato.

    Abraços,

    Geraldo.

  11. llamasjf disse:

    Olá Geraldo!

    Dei uma pesquisada sobre este problema e ao que tudo indica o problema está na comunicação do Postfix com o MySQL. Você criou os arquivos necessários e digitou ao invés de copiar/colar?

    Tem um porém também, a distro que você utiliza é Suse, já a que eu testei é Debian, aí pode estar o problema. Dê uma olhada se todos os pacotes estão instalados e funcionando. De uma distro para outra pode ocorrer dos pacotes terem nomes diferentes.

    Obrigado pelo seu comentário!

Leave a Reply

blog comments powered by Disqus
preload preload preload