Servidor de Email · 10 min read · Nov 12, 2025

Como Configurar o Servidor de Email ISP Com Usuários/Domínios Virtuais No Centos 5.0 Usando Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL - Página 2

Configuração:

SMTP-AUTH/TLS

Primeiro, configuramos SMTP-AUTH e TLS. Para isso, edite /usr/lib/sasl2/smtpd.conf com seu editor favorito.

vi /usr/lib/sasl2/smtpd.conf

e faça as alterações conforme indicado abaixo.

pwcheck_method: saslauthd
mech_list: plain login

Crie diretórios, depois a chave privada e, por último, o certificado.

mkdir -p /etc/postfix/ssl/mailserver  
cd /etc/postfix/ssl/mailserver  
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024  
chmod 600 smtpd.key  
openssl req -new -key smtpd.key -out smtpd.csr  
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt  
openssl rsa -in smtpd.key -out smtpd.key.unencrypted  
mv -f smtpd.key.unencrypted smtpd.key  
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

As chaves privadas e certificados foram criados. Mais tarde, informaremos ao postfix para usá-los.

MySQL:

Agora criaremos um banco de dados chamado mail, para isso emitiremos os comandos abaixo;

mysql -u root -p

Digite a senha e você estará no prompt do MySQL ( mysql>).

CREATE DATABASE mail;

Dê todas as permissões no mail para o usuário mail.

GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';  
FLUSH PRIVILEGES;  
quit

Defina a senha para o usuário mail. Isso será feito pela seguinte instrução.

mysqladmin -u mail password newpassword

Em seguida, criaremos as tabelas necessárias para nosso novo banco de dados (mail) que contém informações sobre domínios, usuários, aliases e caixas de correio.

mysql -u mail -p

Após digitar a senha, você estará no prompt do MySQL.

show databases;

Isso mostrará todos os bancos de dados, incluindo nosso banco de dados “mail”. Usaremos “mail”.

USE mail;
  1. Crie a tabela de domínio.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Domínios Virtuais';
  1. A segunda tabela mais importante é a caixa de correio, então crie a caixa de correio.
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 '0', 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(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Caixas de Correio Virtuais';
  1. Crie a tabela de 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(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Aliases Virtuais';

Criamos as tabelas necessárias, então saia do MySQL.

quit

Postfix MySQL:

O Postfix precisa saber onde e como pode procurar todas as informações relacionadas à caixa de correio. Para isso, criaremos os seguintes arquivos em /etc/postfix. Versões recentes do Postfix podem usar isso em vez das outras instruções, e nesse caso, basta comentar todas as linhas e descomentar a última.

  1. Crie o arquivo mysql_virtual_alias_maps.cf para encaminhar emails de um endereço de email para outro.
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
  1. Crie o arquivo mysql_virtual_domains_maps.cf, para o mapeamento de domínios virtuais. Os domínios virtuais são consultados usando as informações fornecidas neste arquivo.
vi /etc/postfix/mysql_virtual_domains_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
  1. Crie o arquivo mysql_virtual_mailbox_maps.cf. Que geralmente é o mapeamento de endereços de email para a localização da caixa de correio do usuário em seu disco rígido. Se você salvou emails recebidos no disco rígido usando o agente de entrega virtual embutido do Postfix, então ele seria consultado para descobrir o caminho da caixa de correio.
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
  1. Por último, crie o arquivo mysql_virtual_mailbox_limit_maps.cf que será usado para mapear o limite de cota das caixas de correio dos usuários.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
  1. Dê aos arquivos mysql_virtual as permissões e propriedade apropriadas.
chown root:postfix *.cf  
chmod 644 *.cf

Postfix:

Na seção de configuração do Postfix, editaremos o arquivo main.cf localizado no diretório de configuração do postfix ( /etc/postfix), para inserir algumas informações básicas necessárias para o Postfix.

mv /etc/postfix/main.cf /etc/postfix/main.cf.orig  
vi /etc/postfix/main.cf
############## Postfix###############
#Data Modificada 17 de Junho de 2008
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
  PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
  xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
#################### seção postfix termina aqui###############

Informações do usuário virtual do Postfix:

Novamente, editaremos o arquivo main.cf para adicionar suporte a usuários virtuais. O “virtual_minimum_uid” e “virtual_uid_maps” apontam para o id do usuário 150 no meu caso, que é um usuário que criei especificamente para lidar com email virtual. Ele usa o grupo padrão “mail” com o gid padrão 12. Então, primeiro crie o usuário emitindo o comando useradd ou adduser.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Caixa de correio Virtual" vmail  
chmod 770 /var/vmail/ (crie o diretório se não existir)  
chown vmail:mail /var/vmail  
vi /etc/postfix/main.cf
#######################Usuários e caixas de correio de Domínios Virtuais###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
############################## seção Virtual do main.cf termina##############

Autenticação SASL/TLS do Postfix:

Finalmente, editaremos novamente o arquivo main.cf para habilitar a autenticação SASL/TLS. Anteriormente, criamos alguns certificados, usaremos eles aqui para proteger o servidor de email.

vi /etc/postfix.main.cf
#################### Autenticação SASL/TLS###########################
######PARTE SASL#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######PARTE TLS###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
########################### A autenticação SASL/TLS termina aqui#############

Para minha conveniência, dividi o main.cf em três seções { Postfix, domínios-virtuais-usuários-e-caixas de correio, autenticação-SASL/TLS}. A autenticação SASL/TLS é ainda dividida em (PARTE-SASL e PARTE-TLS). Para mostrar a você cada seção e seus parâmetros, editei o mesmo arquivo três vezes. Agora copie o /etc/aliases e /etc/aliases.db para /etc/postfix/ e execute newaliases.

cp /etc/aliases* /etc/postfix/  
newaliases

Dovecot v1.x IMAP e POP:

Vamos configurar o Dovecot que fornece tanto um serviço POP3 quanto IMAP. O arquivo de configuração para o Dovecot é /etc/dovecot.conf. Faremos um backup do arquivo original para dovecot.conf.orig e alteraremos o arquivo em execução para nossas necessidades. Para lidar com usuários virtuais com dovecot, criaremos o arquivo /etc/dovecot-mysql.conf.

vi /etc/dovecot-mysql.conf
###### dovecot-mysql.conf deve parecer com isso ##########
# NOTA: '\' a divisão de linha é usada apenas para legibilidade, atualmente o Dovecot não a suporta
# O socket mysqld.sock pode estar em locais diferentes em diferentes sistemas
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# Alternativamente, você também pode se conectar ao localhost:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1'
#################### termina aqui ###################

Agora, passando para configurar dovecot.conf, para autenticar o usuário virtual usando o método mysql_auth. Tenha em mente que usuários normais do Linux não podem fazer login no servidor de email. Porque não habilitamos o método de autenticação Pam em nossa configuração do dovecot. Além disso, first_valid_uid e last_valid_uid estão definidos como 150, o que significa que apenas o usuário com uid 150 poderá fazer login. Os protocolos pop3 e pop3s estão disponíveis.

cp -p /etc/dovecot.conf /etc/dovecot.conf.orig  
vi /etc/dovecot.conf

(Apenas edite as seguintes linhas)

############## dovecot configurado para trabalhar com usuários virtuais ############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
#################################### termina aqui ######################

Depois disso, definiremos a propriedade e os direitos de acesso em /etc/dovecot-mysql.conf.

chmod 600 /etc/dovecot/*.conf  
chown vmail /etc/dovecot/*.conf

Instalação e Configuração do Roundcube:

Baseado nas NOTAS DE INSTALAÇÃO (Roundcube)

  1. Descompacte e coloque esta pasta em algum lugar dentro do seu diretório raiz de documentos ( /var/www/html/mail)
  2. Certifique-se de que os seguintes diretórios (e os arquivos dentro) sejam graváveis pelo servidor web
  • /temp
  • /logs
  1. Crie um novo banco de dados e um usuário de banco de dados para o RoundCube (veja CONFIGURAÇÃO DO BANCO DE DADOS)
  2. Aponte seu navegador para http://url-to-roundcube/installer/
  3. Siga as instruções do script de instalação (ou veja CONFIGURAÇÃO MANUAL)
  4. Após criar e testar a configuração, remova o diretório do instalador
  5. Pronto!

CONFIGURAÇÃO DO BANCO DE DADOS

  • MySQL 4.1.x/5.x

Para a versão do MySQL 4.1 e superior, é recomendado criar o banco de dados para o RoundCube com charset utf-8. Aqui está um exemplo do procedimento de inicialização:

mysql -u root -p
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';  
quit
mysql -u mail -p roundcubemail < SQL/mysql5.initial.sql

Nota: ‘password’ é a senha mestre para o usuário roundcube. É altamente recomendável que você substitua isso por uma senha mais segura. Por favor, tenha em mente: Você precisa especificar essa senha mais tarde em ‘config/db.inc.php’.

Seção HTTP:

Para começar a usar a interface web do servidor de email, editaremos o arquivo /etc/httpd/conf/httpd.conf.

vi /etc/httpd/conf/httpd.conf

E adicione as instruções abaixo a ele.

# Acesso ao email pela interface usando roundcube

  DocumentRoot /var/www/html/mail
  ServerName mail.example.co.tz

Salve a configuração e saia.

Criando usuários e domínios virtuais:

  1. Agora criaremos domínios virtuais e usuários virtuais em nosso banco de dados de email.
mysql -u mail -p
  1. Digite a senha e você estará no prompt mysql>.
USE mail;
  1. Primeiro crie um domínio virtual na tabela de domínio (example.co.tz) usando o comando abaixo.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Domínio virtual','10','10', '0','virtual', '0','1');
  1. Agora crie dois usuários virtuais na tabela de caixas de correio. Eu criei ( [email protected] & [email protected]) como nomes de usuário para kiiza e hoboka.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');  
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');  
quit

Agora que criamos usuários virtuais e um domínio virtual, queremos testar nosso servidor de email fazendo login e enviando email de uma conta de usuário para outra. Então, vamos iniciar os daemons Dovecot, Postfix, MySQL e servidor web. Também queremos que eles iniciem automaticamente na próxima reinicialização. Para isso, emitimos os seguintes comandos.

chkconfig -level 235 mysqld on  
chkconfig -level 235 saslauthd on  
chkconfig -level 235 postfix on  
chkconfig -level 235 dovecot on  
chkconfig -level 235 httpd on  
/etc/init.d/saslauthd start  
/etc/init.d/mysqld start  
/etc/init.d/postfix start  
/etc/init.d/dovecot start  
/etc/init.d/httpd start
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.