Instalando o Postfix

17 Dezembro 2017 Dom

2 visitantes e 0 Usuários online

  Indique Download Forums Links Polita de Privacidade
Iniciando o Courier e o POP

PC-SOS :: Internet :: Servidor de email com SMTP, POP, IMAP, quota e MySQL
PC-SOS
Notícias
Anúncios
Estatística
FAQ
Usuários
Usuários Online
Conteúdo
1-Política de Privacidade
Artigos
Celular
Flash
Linux
Discos Rígidos
Hardware
Internet
Modem
MSOffice
MSOffice - Excel
Multimedia
Photoshop
Programação
Rede
Segurança
Sistema Operacional
Software
Software p/ PenDrive
Termos & Siglas
WEB
Windows
Xoops
Área de Usuário

Usuário:
Senha:
Lembrar!
Esqueci minha senha
Registrar

Pesquisa Avançada

Patrocinadores

 


Teste de Velocidade

Desenvolvido por

 

Instalando o Courier-imap

 

 

2.01.2009
Como configurar o Windows para aceitar 8GB de RAM
3.12.2008
Quando Pen Drive USB Não Aparece No Windows
15.02.2008
BBS, sistema que foi o antecessor da internet
26.11.2007
Firefox 3.0
5.10.2007
Hitachi trabalha em Blu-Ray de 100GB e 200GB
24.09.2007
Novo supercomputador entra em operação no Brasil
24.09.2007
IBM oferece software gratuito de edição de texto
19.09.2007
Processador com 80 NÚCLEOS
19.09.2007
IBM terá suíte de escritório gratuita
17.09.2007
Clone do Office online, e grátis

Configurando o MySQL

Servidor de email com SMTP, POP, IMAP, quota e MySQL
10.04.2005
Nesse tutorial vou mostrar como configurar um servidor de email Postfix para trabalhar com MySQL + COURIER-IMAP + SASL + DOMÍNIOS VIRTUAIS + QUOTA. Não sou nenhum expert em nenhum desses programas, sou apenas um cara esforçado :-), mas o fato de estar trabalhando diariamente com eles, fez com que eu adquirisse uma certa experiência. Esse tutorial é uma compilação de vários tutoriais, dicas, manuais e muita dor de cabeça que fui adquirindo até montar esse ambiente.

O meu problema começou quando me chamaram para trabalhar com servidores de email que suportasse vários domínios na mesma máquina, onde cada domínio representava uma empresa distinta, até ai eu sabia que o Postfix tinha esse tipo de suporte. Optei pelo Postfix devido a sua facilidade (experiências anteriores com Qmail :-) e compatibilidade com o "Sendmail". Seguindo os manuais, consegui criar essa ambiente para 2 domínios e outros que aparecessem.

Os meus problemas começaram quando, por exemplo, um diretor do dominio1 de nome José da Silva queria que o seu login fosse jose.silva, até aí tudo bem. Só que um outro diretor do dominio2, também de nome José da Silva queria que o seu login também fosse jose.silva. Ferrou!!! Pois eu não poderia criar dois logins iguais e nem dava para explicar que esse login já tinha sido reservado para o diretor de uma outra empresa. Olha a encrenca!!!

Pedi ajuda nas listas de discussão e me sugeriram usar MySQL ou um indicador no login; criando depois um alias para esse login. Bem, como eu não conhecia patavinas de MySQL, optei pela segunda dica :-). Então criei o jose.silva-dm2 e uma alias (jose.silva@dominio2.com.br = jose.silva-dm2). Perfeito, resolveu o problema, só que tinha de explicar para todo mundo por que o seu login tinha esse "-dm2" e o seu email, não. Sem falar nos relatórios de logs que não ficaram nada bonitos.

O negócio começou a ficar feio, quando fechamos com um cliente que o seu webmail mostrava o login da pessoa que estava logado no momento e lá estava o "-dm*".

Os meus problemas seriam resolvidos se eu pudesse criar o login já com o domínio, exemplo: jose.silva@dominio1.com.br. E não é que da!! O Linux aceita. Só que quando esse usuário envia uma mensagem pelo Postfix, o seu email sai como "jose.silva@dominio1.com.br@dominio1.com.br", bem! Não preciso dizer mais nada :-)

Alguns dias antes de pedir as contas da empresa :-), resolvi pesquisar sobre o Postfix com MySQL e o que lhes apresento agora, é o resultado da minha pesquisa. Há! Ainda continuo na empresa :-)


Muitas distribuições já trazem o MySQL, como eu estou usando o CL8, instalei os seguintes pacotes:
  • MySQL-client-3.23.46-3cl
  • MySQL-3.23.46-3cl
  • MySQL-devel-3.23.46-3cl
No Conectiva, um script chamado /usr/sbin/mysql_createdb cria a database mysql e configura a senha do usuário ROOT.

# /usr/sbin/mysql_createdb
This script will create the main mysql database 
where user passwords and general permissions are 
stored. It will also ask you to configure the root 
password so that a blank one does not get asigned.
Please, type the root password: 
Please, retype to confirm:
021231 18:08:56 /usr/sbin/mysqld: Shutdown Complete
Sem essa etapa você não conseguirá iniciar o MySQL. Depois da senha criada, é hora de iniciar o MySQL:

# cds
# ./mysql start


OBS: "cds" é um a ALIAS no Conectiva que te leva para o diretório /etc/init.d/.

Após iniciar o MySQL, criaremos agora as tabelas de usuários e suas configurações, a tabela de transporte e a tabela de aliases. Para ser mais prático, você pode usar o seguinte script chamado mail.db:

OBS: Troque os valores de uid e gid pelo número correspondente ao do seu usuário e grupo do Postfix. Você também pode alterar o valor default (10000000=10MB) da cota de disco:

# ==========MAIL.DB============
#
# Cria a database com o nome de mail
#

CREATE DATABASE mail;
use mail;

#
# Cria a tabela de aliases
#

CREATE TABLE aliases (
alias varchar(255) NOT NULL default '',
rcpt varchar(255) default NULL,
PRIMARY KEY (alias)
) TYPE=MyISAM;


# Cria a tabela transport
#

CREATE TABLE transport (
domain char(128) NOT NULL default '',
transport char(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

#
# Cria a tabela virtua_users
#

CREATE TABLE virtual_users (
unique_id int(32) unsigned NOT NULL auto_increment,
id char(128) NOT NULL default '',
password char(128) default NULL,
uid int(10) unsigned default '104',
gid int(10) unsigned default '104',
home char(255) default NULL,
maildir char(255) default NULL,
date_add date default NULL,
time_add time default NULL,
domain char(128) default NULL,
nome char(255) default NULL,
imapok tinyint(3) unsigned default '1',
quota char(255) default '10000000',
PRIMARY KEY (id),
KEY unique_id (unique_id)
) TYPE=MyISAM;

Salve esse script como mail.db e execute o seguinte comando:

$ mysql -u root -p < mail.db

Isso irá criar todas as tabelas bem como a base de dados "mail". Vamos agora criar o usuário que o Postfix irá usar para acessar o MySQL.

Logando no MySQL


Para conectar ao SGBD MySQL, basta executar a linha de comando abaixo:
(Note que o prompt "Password" é mostrado, e claro será necessário informar a senha do banco de dados previamente criada no script de inicialização do MySQL.

$ mysql -u root mysql -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 4 to server version: 3.23.46-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>
Adicionando o usuário "postfix":

mysql> INSERT INTO user (host, user, password) VALUES ('localhost','postfix','');
Query OK, 1 row affected (0.00 sec)

mysql> UPDATE user set password=PASSWORD('senha') WHERE user='postfix';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT select, insert, update ON mail.* TO postfix;
Query OK, 0 rows affected (0.00 sec)

Beleza! Após ter criado o usuário, saia do MySQL e logue com o usuário que você criou para testar se esta tudo certo.

# mysql -D mail -u postfix -p
mysql> show tables;
+----------------+
| Tables_in_mail |
+----------------+
| aliases        |
| transport      |
| virtual_users  |
+----------------+
mysql> desc aliases;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| alias | varchar(255) |      | PRI |         |       |
| rcpt  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
Descrição: Essa tabela é onde serão criados os meus aliases ou redirecionamentos.
  • alias: É o meu alias de email
  • rcpt: É o destinatário do email
Exemplo:
+--------------------------+-------------------------+
| alias                    | rcpt                    |
+--------------------------+-------------------------+
|postmaster@dominio.com.br | marco@dominio.com.br    |
+--------------------------+-------------------------+
|postmaster@dominio2.com.br| marcelo@dominio1.com.br |
+--------------------------+-------------------------+
mysql> desc transport;
+-----------+-----------+------+-----+---------+-------+
| Field     | Type      | Null | Key | Default | Extra |
+-----------+-----------+------+-----+---------+-------+
| domain    | char(128) |      | PRI |         |       |
| transport | char(128) |      |     |         |       |
+-----------+-----------+------+-----+---------+-------+
Descrição: essa tabela é onde você cria e indica se o domínio é virtual ou local.
  • domain: seu domínio
  • transport: tipo do transporte que o postfix irá usar para entregar a mensagem. Pode ser virtual ou local.
Exemplo:
+---------------+-----------+
| domain        | transport |
+---------------+-----------+
|dominio.com.br | virtual:  |
|dominio2.com.br| local:    |
|dominio3.com.br| virtual:  |
+---------------+-----------+
mysql> desc virtual_users;
+-----------+---------------------+------+-----+----------+----------------+
| Field     | Type                | Null | Key | Default  | Extra          |
+-----------+---------------------+------+-----+----------+----------------+
| unique_id | int(32) unsigned    |      | MUL | NULL     | auto_increment |
| id        | char(128)           |      | PRI |          |                |
| password  | char(128)           | YES  |     | NULL     |                |
| uid       | int(10) unsigned    | YES  |     | 104      |                |
| gid       | int(10) unsigned    | YES  |     | 104      |                |
| home      | char(255)           | YES  |     | NULL     |                |
| maildir   | char(255)           | YES  |     | NULL     |                |
| date_add  | date                | YES  |     | NULL     |                |
| time_add  | time                | YES  |     | NULL     |                |
| domain    | char(128)           | YES  |     | NULL     |                |
| nome      | char(255)           | YES  |     | NULL     |                |
| imapok    | tinyint(3) unsigned | YES  |     | 1        |                |
| quota     | char(255)           | YES  |     | 10000000 |                |
+-----------+---------------------+------+-----+----------+----------------+
Descrição: É a tabela onde serão criados os usuários e suas configurações como senha, diretório, cota de disco etc.
  • unique_id: indica o número do usuário na tabela.
  • id: é o login do usuário, pode ser marco.maximo.dominio.com.br ou marco.maximo@dominio.com.br.
  • password: é a senha do usuário, você pode usar dois tipos de senhas, crypt() ou clear text. Esse último é interessante caso você vá usar alguma autenticação que use Cram-MD5. Eu uso o crypt, acho mais ético :-)
  • uid: virtual uid (use o do usuário postfix).
  • gid: virtual gid (use o do usuário postfix).
  • home: é o diretório onde será criado as contas dos usuários.
  • maildir: é o Maildir do usuário, onde os emails serão armazenados.
  • date_add: data da criação do usuário.
  • time_add: hora da criação do usuário.
  • domain: domínio de qual faz parte o usuário.
  • name: o nome completo do usuário.
  • imapok: esse campo serve para habilitar(1) ou desabilitar(0) a conta do usuário, é usado pelo courier-imap para permitir o logon do usuário. Serve também para judiar um pouco dos seus desafetos dentro da empresa :-)
  • quota: é a cota de disco do usuário, o default é 10MB.

Criando um usuário na tabela


mysql> INSERT INTO virtual_users ( id,home,password,maildir,date_add, time_add,domain,nome) VALUES ('marco.maximo@dominio.com.br', '/home/',encrypt('senha'),'dominio.com.br/marco.maximo/Maildir/', '2002-12-18','05:18:24','dominio.com.br','Marco A. S. Máximo');

mysql> select unique_id, uid, gid, quota from virtual_users where id='marco.maximo@dominio.com.br';
+-----------+----------------------------+-----+-----+----------+
| unique_id | id                         | uid | gid | quota    |
+-----------+----------------------------+-----+-----+----------+
| 568       | marco.maximo@dominio.com.br| 104 | 104 | 10000000 |
+-----------+----------------------------+-----+-----+----------+
OBS: Os campos uid, gid, cota estão com um valor padrão e o campo unique_id é auto incremental.

Como viram, agora posso criar o nome do usuário já com o seu domínio, podendo assim adicionar vários usuários de diferentes domínios na mesma tabela. O que temos que fazer é "ensinar" ao Postfix a conectar-se no MySQL e pegar os dados que ele precisa sobre o usuário, mas antes vamos configurar o Courier-IMAP.


Como vamos usar o Postfix com suporte a Maildir ao estilo Qmail, então o Courier-Imap é o programa que permite o acesso por IMAP a esse tipo de caixa postal. Ele também vai ser responsável por validar os logins dos usuários e permitir que os mesmos baixem as suas mensagens por POP3, tudo isso, lendo informações da tabela "virtual_users" no MySQL.

Baixe o Courier no site:
Após o download descompacte em um diretório para a compilação:

# tar -jxvf courier-imap-1.6.2.tar.bz2 -C /usr/local/src/

Para compilar o courier você precisa estar como usuário comum, se você descompactou como root, mude as permissões do diretório para seu usuário, no meu caso "marco":

# chown -R marco:marco courier-imap-1.6.2/

Como usuário normal execute:

$ cd /usr/local/src/courier-imap-1.6.2/
$ ./configure --without-ipv6 --enable-workarounds-for-imap-client-bugs
  • A opção --without-ipv6 desabilita o suporte ao IPV6, caso você não o use.
  • A opção --enable-workarounds-for-imap-client-bugs habilita o suporte a alguns bugs conhecidos de alguns clientes de email ao protocolo IMAP (Netscape Communicator 4.7 não funciona sem essa opção).
Caso ocorra algum erro, pode ser a falta dos pacotes gdbm e gdbm-devel, usados para a autenticação com bibliotecas GDBM com o módulo authuserdb.

Esse processo demora um pouco e pode dar a impressão que o programa entrou em loop, não se preocupe, isso é normal. Após o configure terminar devemos agora compilá-lo:

$ make

Após a compilação, logue-se como ROOT e instale o courier-imap:

$ su
#./make install


Ele será instalado no diretório /usr/lib/courier-imap. Vá para o diretório /usr/lib/courier-imap/etc e crie os arquivos de configuração do courier a partir dos arquivos de exemplos ( *.dist):

# cp imapd.dist imapd
# cp imapd-ssl.dist imapd-ssl
# cp pop3d.dist pop3d
# cp pop3d-ssl.dist pop3d-ssl
# cp authmysqlrc.dist authmysqlrc
# cp authdaemonrc.dist authdaemonrc


Isso criará os seguintes arquivos de configuração do courier: imapd, pop3d, authmysqlrc, authdaemonrc, imapd-ssl, pop3d-ssl. Esses dois últimos para conexões seguras.

DICA: Acho interessante manter os arquivos *.dist, isso irá ajudar caso você queira lembrar das configurações default do courier.

As configurações default dos arquivos (imapd e pop3d), ao meu ver, já são boas. Altere caso você sinta necessidade.

Conecte-se no MySQL e crie um usuário para o Courier poder acessar a base de dados "mail".

# mysql -D mysql -p
mysql> INSERT INTO user(host,user,password) VALUES ('localhost','courier','');
Query OK, 1 row affected (0.00 sec)

mysql> UPDATE user SET password=password('senha') WHERE user='courier';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT select,insert,update on mail.* TO courier;
Query OK, 0 rows affected (0.01 sec)

mysql> exit

Com o usuário "courier" criado no MySQL, edite o arquivo:

/usr/lib/courier-imap/etc/authmysqlrc

Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações. Exemplo:

MYSQL_SERVER localhost
MYSQL_USERNAME courier
MYSQL_PASSWORD senha
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE virtual_users
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD nome
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE imapok=1

OBS: Você também pode editar o arquivo /usr/lib/courier-imap/etc/authdaemonrc e habilitar apenas os módulos de autenticação que você gostaria de usar.


Vamos agora iniciar o COURIER e o POP e fazer alguns testes de conexão.

Os arquivos que iniciam o serviço do courier e o pop são:
  • /usr/lib/courier-imap/libexec/imapd.rc
  • /usr/lib/courier-imap/libexec/pop3d.rc
Achei cômodo criar 2 links simbólicos para eles, com o nome de courier-imap e pop3, dentro do diretórios onde estão os meus scripts de inicialização:

# cd /etc/init.d/
# ln -s /usr/lib/courier-imap/libexec/imapd.rc courier-imap
# ln -s /usr/lib/courier-imap/libexec/pop3d.rc pop3


Para iniciá-los a partir desse diretório é só digitar:

# ./courier-imap start
# ./pop3 start


Quando você inicia o courier, ele ira ler o arquivo /usr/lib/courier-imap/libexec/authlib/authdaemond. Esse arquivo irá checar qual o modo de autenticação você irá usar dependendo dos pacotes que você tem instalado, caso você pretenda usar um outro modo de autenticação (plain, ldap, postgres), altere as configurações desse arquivo. Como vamos usar MySQL, não será necessário alterar esse arquivo.

Para saber ser os serviços imap e pop iniciaram sem problema, vamos rodar os seguintes comandos:

# ps ax | grep courier
3387 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.mysql start
3388 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond
3389 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond
3390 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond
3395 0:00 /usr/lib/courier-imap/libexec/couriertcpd -addres
3396 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond
3397 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond
3399 0:00 /usr/lib/courier-imap/libexec/courierlogger imapd
3409 0:00 /usr/lib/courier-imap/libexec/couriertcpd -addres
3411 0:00 /usr/lib/courier-imap/libexec/courierlogger pop3d

Deve aparecer algo como isso. As linhas indicam que os serviços imap e pop3 subiram usando a autenticação pelo MySQL.

Vamos checar se as portas dos serviços estão abertas e respondendo:

# netstat -a | less
Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado
tcp 0 0 *:pop-3 *:* OUÇA
tcp 0 0 *:imap2 *:* OUÇA

Teste do IMAP


# telnet 0 143
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.
See COPYING for distribution information.
0 logout

Teste do POP3


# telnet 0 110
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
+OK Hello there.
quit

Se aparecer isso, então esta OK. Vamos agora instalar/configurar o Postfix.


Vamos instalar o Postfix com suporte a Maildir+ Quota de Disco + SASL + MySQL, na maioria das distribuições isso não vem habilitado por padrão, sendo necessário uma nova compilação. O Postfix também não tem suporte a quota de disco com o formato Maildir, sendo necessário a instalação de uma patch para tal.

Baixe o Postfix de:
OBS: Atualmente o Postfix já esta na versão 2.0, lançada recentemente, mas o esse patch foi feito para a versão 1.1.11. Caso você não queira usá-lo, uma outra forma de você ter suporte a quota de disco para usuários virtuais é usando o aplicativo /usr/lib/courier-imap/bin/deliverquota, que vem junto com o courier-imap. Ele pode ser usado na linha "mailbox_command" no arquivo "main.cf" do Postfix, esse é um exemplo de sua sintaxe:

mailbox_command=/usr/lib/courier-imap/bin/deliverquota -w 90 ~/Maildir
ou
mailbox_command=/usr/lib/courier-imap/bin/deliverquota -w 90 10000000 ~/Maildir

Onde, "-w 90" serve para enviar um email para o usuário caso o seu espaço em disco ultrapasse 90%. "10000000" (+/- 10MB) é a cota em disco para todos os usuários e "~/Maildir" é o local da caixa postal do usuário.

Instalando:

# tar -zxvf postfix-1.1.11.tar.gz -C /usr/local/src/
# cd /usr/local/src/postfix-1.1.11/


Instalando o PATCH para quota:

# gzip -cd /local_do_patch/postfix-1.1.11_quota_maildirsize.patch.gz | patch -p1 -E
patching file README_FILES/VIRTUAL_README
patching file src/global/mail_params.h
patching file src/util/file_limit.c
patching file src/virtual/mailbox.c
patching file src/virtual/maildir.c
patching file src/virtual/virtual.c
patching file src/virtual/virtual.h

Habilitando o suporte MySQL e SASL


São necessários os pacotes:
  • db*-devel
  • sasl-devel
  • ed
# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL
-I/usr/include/mysql -DUSE_SASL_AUTH
-I/usr/local/include' 'AUXLIBS=/usr/lib/libmysqlclient.so
-lm -L/usr/local/lib -lsasl'

# make


Caso não você não tenha o grupo "postdrop", crie:

# groupadd postdrop

Caso você já tenha o Postfix instalado e configurado, então faça só uma atualização:

# make upgrade

Caso contrário:

# make install

Se correr tudo certo, rode o comando "postconf -m", na saída deve aparecer o nome mysql.

Agora é hora de configurar o Postfix para trabalhar com o MySQL e SASL, não vou entrar em detalhes sobre configuração do Postfix, pois existem ótimos tutoriais a respeito, por exemplo em:
Crie os seguintes arquivos dentro do diretório do Postfix, normalmente em /etc/postfix/:

transport.cf
user = postfix
password = senha
dbname = mail
table = transport
select_field = transport
where_field = domain
hosts = localhost

gids.cf
user = postfix
password= senha
dbname = mail
table = virtual_users
select_field = gid
where_field = id
hosts = localhost

uids.cf
user = postfix
password= senha
dbname = mail
table = virtual_users
select_field = uid
where_field = id
hosts = localhost

mysql_virtual.cf
user = postfix
password= senha
dbname = mail
table = virtual_users
select_field = maildir
where_field = id
hosts = localhost

mysql.aliases.cf
user = postfix
password= senha
dbname = mail
table = aliases
select_field = rcpt
where_field = alias
hosts = localhost

mailboxsize-mysql.cf
user = postfix
password = senha
dbname = mail
table = virtual_users
select_field = quota
where_field = id
hosts = localhost

Edite o "master.cf" e coloque a seguinte linha:

virtual unix - n n - - virtual

Edite o "main.cf" e coloque as seguintes linhas:

home_mailbox=Maildir/
mydestination = $mydomain, $transport_maps

#======= MYSQL==============
transport_maps = mysql:/etc/postfix/transport.cf
virtual_gid_maps = mysql:/etc/postfix/gids.cf
virtual_mailbox_base = /home
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual.cf
virtual_maps = mysql:/etc/postfix/mysql.aliases.cf
virtual_uid_maps = mysql:/etc/postfix/uids.cf

#======= Quota ============
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps = mysql:/etc/postfix/mailboxsize-mysql.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000

#====== SASL ================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_relay_domains

Testando o Postfix com MySQL

Agora é hora de testar se o Postfix esta se comunicando com o MySQL.

# ./postfix start

Vamos criar um domínio virtual e um usuário para teste.

# mysql -D mail -p
mysql> INSERT INTO transport(domain,transport) VALUES ('dominio.com.br','virtual:'); mysql> select * from transport;
+----------------+-----------+
| domain         | transport |
+----------------+-----------+
| dominio.com.br | virtual:  |
+----------------+-----------+
Beleza!

Criando um usuário:

mysql> INSERT INTO virtual_users (id,password,home,maildir,date_add,time_add,domain,nome) VALUES ('marco.maximo@dominio.com.br','/home/',encrypt('senha'), 'dominio.com.br/marco.maximo/Maildir/','2002-12-18', '05:18:24','dominio.com.br','Marco A. S. Máximo');

mysql> select unique_id, uid, gid, quota from virtual_users where id='marco.maximo@dominio.com.br';
+-----------+----------------------------+-----+-----+----------+
| unique_id | id                         | uid | gid | quota    |
+-----------+----------------------------+-----+-----+----------+
| 568       | marco.maximo@dominio.com.br| 104 | 104 | 10000000 |
+-----------+----------------------------+-----+-----+----------+
Criando o HOME e o Maildir do usuário.

# mkdir -p /home/dominio.com.br/marco.maximo
# /usr/lib/courier-imap/bin/maildirmake
/home/dominio.com.br/marco.maximo/Maildir
# chmod -R 700 dominio.com.br/
# chown -R postfix:postfix dominio.com.br/


Dica: Isso parece muito trabalhoso, levando-se em consideração as facilidades do "adduser", porém você pode criar o seu próprio script de criação de usuário ou em shell script, PHP, etc. Fiz o meu em shell e já estou providenciando um em PHP.

Vamos enviar um email para teste:

# echo "Funcionou..." | mail -s "TESTE de EMAIL"
marco.maximo@dominio.com.br


Saída do Log:

postfix/pickup[11200]: C1A3FC87: uid=0 from=
postfix/cleanup[12609]: C1A3FC87: message-id=<20030101143500.
C1A3FC87@teste.dominio.com.br>
postfix/qmgr[10270]: C1A3FC87: from=,
size=324, nrcpt=1 (queue active)
postfix/virtual[12630]: C1A3FC87: to=,
relay=virtual, delay=0, status=sent (maildir)


Opa, acho que foi:

# ls /home/dominio.com.br/marco.maximo/Maildir/new/
1041431700.12630_0.pwemail1.localdomain,S=390

# cd /home/dominio.com.br/marco.maximo
# cat Maildir/new/1041431700.12630_0.pwemail1.localdomain,S=390

Return-Path:
Delivered-To: marco.maximo@dominio.com.br
Received: by teste.dominio.com.br (Postfix, from userid 0)
id C1A3FC87; Wed, 1 Jan 2003 12:35:00 -0200 (BRST)
To: marco.maximo@dominio.com.br
Subject: TESTE de EMAIL
Message-Id: <20030101143500.C1A3FC87@teste.dominio.com.br>
Date: Wed, 1 Jan 2003 12:35:00 -0200 (BRST)
From: root@dominio.com.br, (root)


Funcionou...


É foi :-)


Teste de autenticação do IMAP e POP

utor: Marco A. S. Máximo <marco.maximo at pwo.com.br>


# telnet 0 143
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.
See COPYING for distribution information.

0 login marco.maximo@dominio.com.br senha
0 OK LOGIN Ok.

0 select inbox
* FLAGS (Draft Answered Flagged Deleted Seen Recent)
* OK [PERMANENTFLAGS (Draft Answered Flagged Deleted
Seen)] Limited
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 1041451666] Ok
0 OK [READ-WRITE] Ok

0 logout
* BYE Courier-IMAP server shutting down
0 OK LOGOUT completed
Connection closed by foreign host.

Beleza, funcionou.

Teste de Autenticação do POP3


# telnet 0 110
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
+OK Hello there

user marco.maximo@dominio.com.br
+OK Password required.

pass senha
+OK logged in.

list
+OK POP3 clients that break here, they violate STD53.
1 401

A

PC-SOS
Hits: 1755
Internet >>
 Ruim  Bom 
Comentário de Usuário: Nosso usuário podem revisar conteúdos
 

   

     

Número de visitas deste fev/2005 - Número de consultas ao site:
  © Copyright 2005 PC SOS. All Rights Reserved. contato@robweb.com.br