Servidor de e-mail completo
Este artigo é uma revisão do artigo do Marco Máximo, também publicado aqui no VOL, que faz algumas atualizações e algumas correções, dentre elas: uso do SASL2 para autenticação, Uebimiau como webmail, tema do outlook express para o webmail, ferramentas de monitoria e análise do uso do servidor de e-mail.
Parte 3: Configurações e primeiros testes
3. Configurações
3.1. Definir a senha do usuário root do MySQL:
# mysqladmin -u root password 'suasenha'
3.2. Ativar o log do MySQL:
# vi /etc/mysql/my.cnf
Descomentar a linha:
3.1. Definir a senha do usuário root do MySQL:
# mysqladmin -u root password 'suasenha'
3.2. Ativar o log do MySQL:
# vi /etc/mysql/my.cnf
Descomentar a linha:
log = /var/log/mysql.log
Reiniciar o serviço do MySQL:
# /etc/init.d/mysql restart
3.3. Adicionar um usuário e grupo para o maildrop no sistema:
# adduser maildrop
OBS: Defina uma senha qualquer para o usuário, ele não será utilizado.
3.4. Criar o banco do postfix no MySQL:
OBS: Substitua no arquivo abaixo "xxxxx" por sua senha.
OBS2: Substitua no arquivo abaixo as linhas:
uid int(10) unsigned default '108',
gid int(10) unsigned default '108',
Trocando 108 pela ID do usuário e grupo maildrop criados no passo anterior.
OBS3: Você pode inserir estes dados entrando no mysql, com "mysql -u root -p" (informe a senha do usuário root, cadastrada no passo 3.1) e colando as informações abaixo, ou:
Salve o script abaixo num arquivo texto e depois o insira no mysql, digitando "mysql -u root -p < ARQUIVOCRIADO.TXT", a senha a ser informada é a cadastrada no passo 3.1.
# INICIO DO postfix_mysql.db =================
#
# Postfix / MySQL
#
# Cria o usuário e senha do Postfix e Maildrop para
# acesso ao banco
USE mysql
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('xxxxx'));
INSERT INTO user (Host, User, Password) VALUES ('localhost','maildrop',password('xxxxx'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','maildrop','Y');
FLUSH PRIVILEGES;
#
# Cria o banco postfix
CREATE DATABASE postfix;
#
# Cria a estrutura da tabela alias
USE postfix;
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (address)
) TYPE=MyISAM COMMENT='Virtual Aliases - mysql_virtual_alias_maps';
#
# Cria a estrutura da tabela domain
USE postfix;
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
transport varchar(255) NOT NULL default 'maildrop',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (domain)
) TYPE=MyISAM COMMENT='Virtual Domains - mysql_virtual_domains_maps';
#
# Cria a estrutura da tabela mailbox
USE postfix;
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
home char(255) default '/postfix/',
maildir varchar(255) NOT NULL default '',
quota varchar(255) NOT NULL default '10000000S',
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
passwd_expire enum('N','Y') default 'Y',
uid int(10) unsigned default 'seuUID',
gid int(10) unsigned default 'seuGID',
PRIMARY KEY (username)
) TYPE=MyISAM COMMENT='Virtual Mailboxes - mysql_virtual_mailbox_maps';
#
# Cria o usuário de administração do PostfixAdmin
USE mysql
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('xxxxx'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
#
# Cria a tabela de administração do PostfixAdmin
#
USE postfix;
CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username)
) TYPE=MyISAM COMMENT='Virtual Admins - Store Virtual Domain Admins';
#
# Postfix / MySQL
#
# Cria o usuário e senha do Postfix e Maildrop para
# acesso ao banco
USE mysql
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('xxxxx'));
INSERT INTO user (Host, User, Password) VALUES ('localhost','maildrop',password('xxxxx'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','maildrop','Y');
FLUSH PRIVILEGES;
#
# Cria o banco postfix
CREATE DATABASE postfix;
#
# Cria a estrutura da tabela alias
USE postfix;
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (address)
) TYPE=MyISAM COMMENT='Virtual Aliases - mysql_virtual_alias_maps';
#
# Cria a estrutura da tabela domain
USE postfix;
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
transport varchar(255) NOT NULL default 'maildrop',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (domain)
) TYPE=MyISAM COMMENT='Virtual Domains - mysql_virtual_domains_maps';
#
# Cria a estrutura da tabela mailbox
USE postfix;
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
home char(255) default '/postfix/',
maildir varchar(255) NOT NULL default '',
quota varchar(255) NOT NULL default '10000000S',
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
passwd_expire enum('N','Y') default 'Y',
uid int(10) unsigned default 'seuUID',
gid int(10) unsigned default 'seuGID',
PRIMARY KEY (username)
) TYPE=MyISAM COMMENT='Virtual Mailboxes - mysql_virtual_mailbox_maps';
#
# Cria o usuário de administração do PostfixAdmin
USE mysql
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('xxxxx'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
#
# Cria a tabela de administração do PostfixAdmin
#
USE postfix;
CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username)
) TYPE=MyISAM COMMENT='Virtual Admins - Store Virtual Domain Admins';
O banco e as tabelas, bem como o usuário do postfix serão criados. Vamos testar o acesso do usuário postfix:
# mysql -D postfix -u postfix -psenha_do_postfix
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 7 to server version: 5.0.22-Debian_3-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> show tables;
+-------------------+ | Tables_in_postfix | +-------------------+ | admin | | alias | | domain | | mailbox | +-------------------+4 rows in set (0.00 sec)
mysql> desc alias;
+-------------+--------------+------+-----+---------------------+ | Field | Type | Null | Key | Default | +-------------+--------------+------+-----+---------------------+ | address | varchar(255) | NO | PRI | NULL | | goto | text | NO | | NULL | | domain | varchar(255) | NO | | NULL | | create_date | datetime | NO | | 0000-00-00 00:00:00 | | change_date | datetime | NO | | 0000-00-00 00:00:00 | | active | tinyint(4) | NO | | 1 | +-------------+--------------+------+-----+---------------------+6 rows in set (0.00 sec)
Na tabela "alias" é onde serão criados os redirecionamentos de e-mail.
- address: É o endereço do novo redirecionamento (ALIAS);
- goto: É o destinatário(s) do redirecionamento.
address => goto
postmaster@dominio.com.br > usuario@dominio.com.br
postmaster@dominio2.com.br => usuario@dominio2.com.br, usuario1@dominio1.com.br
mysql> desc domain;
+-------------+--------------+------+-----+---------------------+ | Field | Type | Null | Key | Default | +-------------+--------------+------+-----+---------------------+ | domain | varchar(255) | | PRI | | | description | varchar(255) | | | | | transport | varchar(128) | | | maildrop | | create_date | datetime | | | 0000-00-00 00:00:00 | | change_date | datetime | | | 0000-00-00 00:00:00 | | active | tinyint(4) | | | 1 | +-------------+--------------+------+-----+---------------------+Descrição: Essa tabela é aonde você cria e indica o domínio.
- transport: Nesse campo, você indica se o transporte será "local", para usuários do sistema ou "maildrop", para usuários virtuais. O padrão é "maildrop".
+---------------+------------------+------+-----+---------------------+
| Field | Type | Null | Key | Default |
+---------------+------------------+------+-----+---------------------+
| username | varchar(255) | | PRI | |
| password | varchar(255) | | | |
| name | varchar(255) | | | |
| home | varchar(255) | YES | | /postfix/ |
| maildir | varchar(255) | | | |
| quota | varchar(255) | | |10000000S |
| domain | varchar(255) | | | |
| create_date | datetime | | | 0000-00-00 00:00:00 |
| change_date | datetime | | | 0000-00-00 00:00:00 |
| active | tinyint(4) | | | 1 |
| uid | int(10) unsigned | YES | | seuUID |
| gid | int(10) unsigned | YES | | seuGID |
| passwd_expire | enum('N','Y') | YES | | Y |
+---------------+------------------+------+-----+---------------------+
Descrição: É a principal tabela, onde serão criados os usuários e suas configurações como senha, diretório, cota de disco, etc.
- username: É o login do usuário. Exemplo: 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.
- name: O nome completo do usuário.
- home: É o diretório aonde será criado as caixas postais dos usuários. Normalmente é usado o /home, mas no meu caso usarei o diretório /postfix/.
Usar um outro diretório no lugar do /home/ é recomendável, pois o dono desse diretório deve ser o usuário maildrop. Isso pode causar um problema caso você já tenha usuários criados nesse diretório. - maildir: É o Maildir do usuário, aonde os email serão armazenados.
- quota: É a cota de disco do usuário, o default é 10MB. Note o "S" no final do valor, ele é necessário para o MAILDROP criar o arquivo "maildirsize" no diretório do usuário. Esse arquivo contém um cálculo da cota atual do usuário.
- domain: Domínio de qual faz parte o usuário.
- active: Esse campo serve para habilitar(1) ou desabilitar(0) a conta do usuário, é usado pelo courier-imap para permitir o login do usuário. Serve também para maltratar um pouco dos seus desafetos dentro da empresa :-)
- uid: virtual uid (use o do usuário maildrop).
- gid: virtual gid (use o do usuário maildrop).
- passwd_expire: Esse campo é utilizado por alguns programas para forçar a mudança de senha por parte do usuário.
+-------------+--------------+------+-----+---------------------+ | Field | Type | Null | Key | Default | +-------------+--------------+------+-----+---------------------+ | username | varchar(255) | | PRI | | | password | varchar(255) | | | | | domain | varchar(255) | | | | | create_date | datetime | | | 0000-00-00 00:00:00 | | change_date | datetime | | | 0000-00-00 00:00:00 | | active | tinyint(4) | | | 1 | +-------------+--------------+------+-----+---------------------+Descrição: Essa tabela é usada pelo PostfixAdmin para criar os administradores que irão ser responsáveis pela administração das contas dos respectivos domínios.
O nosso banco de email está criado. 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.
Em tempo, desculpe pela demora na publicação, este não merecia esperar tanto :) ... mas em contrapartida, já estamos quase com a fila de espera em dia.
Um abraço