Página Inicial > Linux, Tutoriais > Instalando Postfix com MySQL (Debian) – Parte 01

Instalando Postfix com MySQL (Debian) – Parte 01

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.

Categories: Linux, Tutoriais Tags: , ,
  • rgb0
    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?
  • @ 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.
  • Marco Aurélio
    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.
  • @Marco Aurélio
    Obrigado!

    Sim, era um erro de digitação, estarei corrigindo agora.
    Mais uma vez, obrigado.
  • 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.
  • 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.
  • Maggi
    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/Pos...
    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
blog comments powered by Disqus