Vale à pena lembrar que o MySQL precisa estar instalado, com suas libs completas.
A primeira coisa que vamos fazer é aplicar o patch para o Postfix pra gerenciar as quotas, faça o seguinte:
Descompacte o source em um diretório de sua preferência (eu uso o /opt/sources):
# cd /opt/sources
# tar -xvzf postfix-2.1.0.tar.gz
Descompacte o arquivo dentro do diretório do Postfix
# cd postfix-2.1.0
# tar -xvzf postfix-2.1.0.patch.gz
Após terminar aplique o patch assim:
# patch -p0 < postfix-2.1.0.patch
Agora vamos para a instalação do Postfix:
Crie um usuário chamado postfix e um grupo chamado postdrop.
# groupadd -g 1010 postdrop
# useradd -s /bin/false -d /var/server/postfix -u 1010 -g postdrop postfix
Crie o diretório /var/server/postfix, você pode usar qualquer diretório para armazenar os Maildirs.
# mkdir -p /var/server/postfix
# chown postfix.postdrop -R /var/server/postfix
Renomeie o binário do sendmail para sendmail.old:
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
Se seu sistema possui um link simbólico em/usr/lib:
# mv /usr/lib/sendmail /usr/lib/sendmail.old
Após terminar entre no diretório que foi criado, e digite o seguinte comando.
# cd postfix-2.1.0
# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql' 'AUXLIBS=/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib'
OBS: isso é uma linha única. Outra coisa é que a minha instalação do mysql esta sob o /usr, se você instalou o mysql no /usr/local, altere os paths corretamente com sua instalação.
Depois de terminado rode o comando make, se você já possui uma instalação do Postfix rode o make update, se não rode o make install.
# make update
ou
# make install
A instalação te fará algumas perguntas, como localização de algumas pastas, responda todas as perguntas para a instalação ser finalizada.
Vamos verificar se o Postfix foi compilado pra usar o MYSQL, faça o seguinte:
# postconf -m
static
cidr
pcre
nis
regexp
environ
mysql
proxy
btree
unix
hash
Se tem o mysql listado, está tudo correto.
Crie arquivos com os seguintes nomes dentro de /etc/postfix:
mysql_virtual_alias_maps.cf
# Insira dentro do arquivo o que está abaixo
user = postfix
password= senha
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost
mysql_virtual_mailbox_limit_maps.cf
# Insira dentro do arquivo o que está abaixo
user = postfix
password = senha
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost
mysql_virtual_mailbox_maps.cf
# Insira dentro do arquivo o que está abaixo
user = postfix
password= senha
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost
Depois destes arquivos prontos, vamos criar nosso script para criação de usuários e tabelas do MYSQL. Lembram-se quando eu falei que iria usar as tabelas e usuários do postfixadmin? As tabelas que seguem nesse script são do postfixadmin, personalize se você deseja isso. Olhe no script e onde você encontrar password("postfix") ou password("postfixadmin"), altere para sua senha, ex.: password("sua senha"). Salve esse arquivo com um nome que você desejar, ex.: postfix.db. Esse script esta dentro da pasta do postfixadmin, caso queira aproveitá-lo.
DICA: O mysql por padrão vem com a senha em branco para o usuário root, se você não alterou essa senha, altere agora, rode o comando da seguinte forma:
# mysqladmin -u root -p password "sua senha"
Ele vai pedir uma senha, não digite nada apenas dê enter, após isso ter sido feito, para entrar no mysql agora como root será necessário você digitar sua senha, entre no mysql da seguinte forma:
# mysql -p
Quando for solicitado a senha digite sua senha.
Agora vamos criar nossas tabelas e usuários no MYSQL.
# mysql -p < postfix.db
Enter password:
Em enter password digite a senha do root que você alterou.
Script mysql com usuários e tabelas.
USE mysql;
# Postfix user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('sua senha'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
# Postfix Admin user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('sua senha'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;
GRANT USAGE ON postfix.* TO postfixadmin@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfixadmin@localhost;
CREATE DATABASE postfix;
USE postfix;
#
# Table structure for table admin
#
CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';
#
# Table structure for table alias
#
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (address),
KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';
#
# Table structure for table domain
#
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
aliases int(10) NOT NULL default '-1',
mailboxes int(10) NOT NULL default '-1',
maxquota int(10) NOT NULL default '-1',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (domain),
KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';
#
# Table structure for table domain_admins
#
CREATE TABLE domain_admins (
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';
#
# Table structure for table log
#
CREATE TABLE log (
timestamp datetime NOT NULL default '0000-00-00 00:00:00',
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
action varchar(255) NOT NULL default '',
data varchar(255) NOT NULL default '',
KEY timestamp (timestamp)
) TYPE=MyISAM COMMENT='Postfix Admin - Log';
#
# Table structure for table mailbox
#
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
quota int(10) NOT NULL default '-1',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';
#
# Table structure for table vacation
#
CREATE TABLE vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (email),
KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';
Por enquanto não iremos configurar os arquivos principais do Postfix, são eles: main.cf e master.cf. Iremos instalar agora o POP-BEFORE-SMTP.