Servidor de E-mail · 11 min read · Sep 30, 2025

Hospedagem Virtual Postfix Com Backend LDAP E Com Dovecot Como Servidor IMAP/POP3 No Ubuntu Bionic Beaver 18.04 LTS

Este howto descreverá como configurar e configurar a hospedagem de e-mail virtual com um backend LDAP.

O software que usaremos neste howto: Postfix (MTA), Dovecot (IMAP / POP3), Gnarwl (férias), OpenLDAP (LDAP) e vMailpanel como a interface de gerenciamento.

Opcional são Proftpd FTP, Roundcube (webmail) e MariaDB (backend SQL para Roundcube).

Isso funcionou para mim, mas não posso garantir que essa configuração funcionará para você, então este howto vem sem nenhuma garantia.

Pressupostos

Este how-to pressupõe as seguintes configurações, se sua instalação diferir disso, substitua as entradas abaixo pela sua configuração real.

Caminho de entrega de e-mail (caixas de correio):

/home/vmail/

Usuário vmail:

UID:1000, GID:1000

Usuário postfix:

UID: 108, GID:108

Base dn do OpenLDAP:

dc=example,dc=tld

Conta de administrador do OpenLDAP:

cn=admin,dc=example,dc=tld

DN de pesquisa do vMailpanel:

o=hosting,dc=example,dc=tld

Uma conta somente leitura para a árvore o=hosting,dc=example,dc=tld:

cn=vmail,o=hosting,dc=example,dc=tld

Você está usando root como o usuário durante este guia.

Se você quiser, por exemplo, o=maildomains ou ou=domains, certifique-se de substituir o=hosting pelo que você deseja, especialmente no acl.ldif. Este arquivo acl é rigoroso, o phamm não funcionará corretamente se não estiver exatamente como deveria. Se você quiser um usuário somente leitura diferente do phamm, substitua cn=phamm por cn=wat-you em todos os lugares neste how to.

Este guia também pressupõe que você tenha instalado e configurado seu servidor Ubuntu de acordo com suas necessidades, há muitos bons guias no Howtoforge, por exemplo:

O Servidor Perfeito - Ubuntu 18.04 (Bionic Beaver) com Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1

Você pode parar após a instalação e configuração do Apache2.

Passo 1: Baixar vMailpanel

Baixe o pacote vMailpanel:

cd /usr/share

Obtenha a versão mais recente do vMailpanel:

git clone https://git.com/wolmfan68/vMailpanel

OK, agora podemos começar.

Passo 2: Instalar e configurar OpenLDAP

Instale o OpenLDAP e ldap-utils:

apt -y install slapd ldap-utils php-ldap

Reconfigure o slapd para ter certeza de que reflete sua configuração desejada

dpkg-reconfigure slapd

Você terá que responder algumas perguntas:

Omitir configuração do servidor OpenLDAP? Não
Nome de domínio DNS: example.tld ==> coloque seu nome de domínio aqui
Nome da organização: example.tld ==> coloque sua organização aqui
Senha do administrador: secret ==> coloque sua senha
Confirmar senha: secret 
Backend do banco de dados a ser usado: MDB
Você deseja que o banco de dados seja removido quando o slapd for purgado? Sim
Mover banco de dados antigo? Sim

Mude para o diretório /etc/ldap/schema:

cd /etc/ldap/schema

Copie o phamm.schema e perversia.net.schema do pacote phamm para o diretório schema:

cp /usr/share/vMailbox/schema/* /etc/ldap/schema.

Agora adicionamos os esquemas ao openldap.

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/phamm.ldif  
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ISPEnv2.ldif  
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/amavis.ldif  
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/pureftpd.ldif  
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/perversia.net.ldif

Agora criamos a entrada o=hosting e a conta vmail.

Modifique o texto abaixo de acordo com suas necessidades e desejos e gere uma senha para a conta vmail. O hash atualmente neste arquivo define a senha como somente leitura

Para criar o hash para a conta vmail, emita o seguinte comando:

slappasswd -h {MD5}

Digite a senha desejada duas vezes e copie o resultado no texto abaixo.

nano base.ldif

Conteúdo de base.ldif

dn: o=hosting,dc=example,dc=tld
objectClass: organization
objectClass: top
o: hosting description: Organização de Hospedagem
# Conta somente leitura
dn: cn=vmail,o=hosting,dc=example,dc=tld
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: vmail
userPassword: {MD5}M267sheb6qc0Ck8WIPOvQA==
description: Conta somente leitura

Carregue o dn base no banco de dados com o seguinte comando:

ldapmodify -a -D cn=admin,dc=example,dc=tld -W -f base.ldif

Agora precisamos modificar os acl’s para que o acesso correto seja dado a cada tipo de usuário.

ldapmodify -Y EXTERNAL -H ldapi:/// -f acl-remove.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f acl-new.ldif

Você pode verificar os novos acl’s com o seguinte comando:

slapcat -n 0

Isso conclui a configuração do OpenLDAP.

Passo 3: Instalar e Configurar Postfix

Antes disso, precisamos ter o usuário vmail e seu diretório home.

Crie o usuário e grupo vmail:

useradd vmail

Por padrão, o grupo vmail também é criado.

Verifique /etc/passwd para o uid e número do grupo reais.

Em seguida, crie o diretório vmail e defina a propriedade para o usuário e grupo vmail.

mkdir /home/vmail  
mkdir /home/vmail/domains  
chown -R vmail:vmail /home/vmail

Execute o seguinte comando para instalar o Postfix e outros aplicativos necessários:

apt install postfix postfix-ldap

Você será solicitado a responder a duas perguntas. Responda da seguinte forma:

Tipo geral de configuração de e-mail: <–Autônomo
Nome do sistema de e-mail: <– mail.example.tld

Não instalamos sasl, pois usaremos o Dovecot LDA e entregaremos.

Agora criamos os certificados para TLS:

mkdir /etc/postfix/ssl  
cd /etc/postfix/ssl/  
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

Nota: você pode copiar todos os arquivos do diretório examples/postfix para seu diretório etc/postfix e fazer as alterações de acordo. Por razões de completude, darei a configuração completa abaixo.

Agora vamos configurar o postfix:

cd /etc/postfix  
mv /etc/postfix/main.cf /etc/postfix/main.cf.bck
nano /etc/postfix/main.cf

E cole o seguinte nele. Por favor, note que esta configuração permite o envio (encaminhamento) de e-mails por usuários autenticados, e também o envio de e-mails locais (como por exemplo para root, postmaster, …) para os respectivos aliases se estiverem configurados.

smtpd_banner = $myhostname ESMTP $mail_name
biff = não

append_dot_mydomain = não

delay_warning_time = 4h

smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = sim
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

myhostname = mail.example.tld
alias_maps = hash:/etc/aliases,
alias_database = hash:/etc/aliases
myorigin = localhost
relayhost =
mynetworks = 127.0.0.0/8
dovecot_destination_recipient_limit = 1
mailbox_command = /usr/lib/deliver
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
#smtp_bind_address = seu endereço ip (opcional) ==> desmarque e altere o endereço ip para sua configuração.
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = sim
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = sim
smtpd_tls_auth_only = não

smtp_use_tls = sim
smtp_tls_note_starttls_offer = sim
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = sim
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

home_mailbox = Maildir/

smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_invalid_hostname
reject_non_fqdn_hostname
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_unauth_destination
reject_unauth_pipelining
reject_invalid_hostname
reject_unknown_sender_domain
reject_rbl_client list.dsbl.org
reject_rbl_client cbl.abuseat.org
reject_rhsbl_sender dsn.fc-ignorant.org

smtpd_data_restrictions =
reject_unauth_pipelining,
reject_multi_recipient_bounce,
permit

smtpd_helo_required = sim

maildrop_destination_concurrency_limit = 2
maildrop_destination_recipient_limit = 1
gnarwl_destination_concurrency_limit = 1
gnarwl_destination_recipient_limit = 1
transport_maps = hash:/etc/postfix/transport, ldap:/etc/postfix/ldap-transport.cf
mydestination = $transport_maps, localhost, localhost.localdomain, $myhostname, localhost.$mydomain, $mydomain

virtual_alias_maps =
ldap:/etc/postfix/ldap-aliases.cf,
ldap:/etc/postfix/ldap-virtualforward.cf,
ldap:/etc/postfix/ldap-accountsmap.cf

virtual_mailbox_base = /home/vmail
virtual_mailbox_maps =
ldap:/etc/postfix/ldap-accounts.cf
virtual_minimum_uid = 1000 ==> Altere isso para o uid real do usuário vmail
virtual_uid_maps = static:1000 ==> Altere isso para o uid real do usuário vmail
virtual_gid_maps = static:1000 ==> Altere isso para o uid real do usuário vmail

local_recipient_maps = $alias_maps

recipient_bcc_maps = ldap:/etc/postfix/ldap-vacation.cf

nano /etc/postfix/master.cf

E cole o seguinte nele (adicione o final):

dovecot   unix  -       n       n       -       -       pipe
         flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
gnarwl    unix  -       n       n       -       -       pipe
         flags=F  user=vmail argv=/usr/bin/gnarwl -a ${user}@${nexthop} -s ${sender}

Agora precisamos escrever os diferentes arquivos ldap-xxx.cf

nano ldap-accounts.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readmonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mailbox

nano ldap-accounstmap.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mail

nano ldap-aliases.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAlias)(mail=%s))(accountActive=TRUE))
result_attribute = maildrop

nano ldap-transport.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(vd=%s)(objectClass=VirtualDomain))(accountActive=TRUE)(delete=FALSE))
result_attribute = postfixTransport

nano ldap-vacation.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(vacationActive=TRUE)(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE))
result_attribute = mailAutoreply

nano ldap-virtualforward.cf

E cole o seguinte:

server_host = localhost
server_port = 389
version = 3
bind = sim
start_tls = não
bind_dn = cn=vmail,o=hosting,dc=example,dc=tld
bind_pw = readonly
search_base = o=hosting,dc=example,dc=tld
scope = sub
query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(vacationActive=FALSE)(forwardActive=TRUE)(accountActive=TRUE)(delete=FALSE))
result_attribute = maildrop

Isso conclui a configuração do postfix.

Passo 4: Instalar e Configurar Dovecot

apt install dovecot-imapd dovecot-pop3d dovecot-ldap

Isso instalará o dovecot e todos os arquivos necessários e também criará os certificados SSL padrão para IMAPs e POP3s.

Primeiro, mudamos para o diretório dovecot.

Nota: você pode copiar todos os arquivos do diretório examples/dovecot para seu diretório etc/dovecot e fazer as alterações de acordo. Por razões de completude, darei a configuração completa abaixo.

 cd /etc/dovecot

Agora configuramos os diferentes arquivos de configuração do dovecot.

nano dovecot-ldap.conf.ext

E faça as seguintes alterações:

hosts           = localhost:389
ldap_version    = 3
auth_bind       = sim
dn              = cn=vmail,o=hosting,dc=example,dc=tld
dnpass          = readonly
base            = o=hosting,dc=hosting,dc=tld
scope           = subtree
deref           = nunca

user_attrs = quota=quota=maildir:storage
user_attrs = quota=quota=maildir:storage=%$B
user_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
pass_attrs = mail,userPassword
pass_filter = (&(objectClass=VirtualMailAccount)(accountActive=TRUE)(mail=%u))
default_pass_scheme = MD5

cd conf.d
vi 10-auth.conf

E altere a seção Senha e Bancos de Dados de Usuários para isso:

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
#!include auth-sql.conf.ext
!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

vi 10-mail.conf 

E faça as seguintes alterações:

mail_location = maildir:/home/vmail/%d/%u

mail_uid = 1000 ==> altere para o valor real do uid do vmail

mail_gid = 1000 ==> altere isso para o valor real do gid do vmail

first_valid_uid = 1000 ==> altere para o valor real do uid do vmail

first_valid_gid = 1000 ==> altere isso para o valor real do gid do vmail

vi 10-master.conf 

E faça as seguintes alterações:

unix_listener auth-userdb {
mode = 0666
user = vmail
group = vmail
}

unix_listener /var/spool/postfix/private/auth {
mode = 0666
}

 vi 15-lda.conf

E faça as seguintes alterações:

postmaster_address = [email protected]

lda_mailbox_autocreate = sim

Isso conclui a configuração do Dovecot.

Passo 5: Instalar e Configurar gnarwl

Vamos instalar o gnarwl:

apt install gnarwl

Agora vamos configurar o gnarwl.

Primeiro, vamos fazer um backup do arquivo de configuração original e substituí-lo por um novo.

mv /etc/gnarwl.conf /etc/gnarwl.conf.bck

Agora criamos o novo arquivo conf:

vi /etc/gnarwl.conf

E insira o seguinte:

map_sender $sender
map_receiver $recepient
map_subject $subject
map_field $begin vacationStart
map_field $end vacationEnd
map_field $fullname cn
map_field $deputy vacationForward
map_field $reply mail
server localhost
port 389
scope sub
login cn=vmail,o=hosting,dc=example,dc=tld
password readonly
protocol 0
base dc=example,dc=tld
queryfilter (&(mailAutoreply=$recepient)(vacationActive=TRUE))
result vacationInfo
blockfiles /var/lib/gnarwl/block/
umask 0644
blockexpire 48
mta /usr/sbin/sendmail -F $recepient -t $sender
maxreceivers 64
maxheader 512
charset ISO8859-1
badheaders /var/lib/gnarwl/badheaders.db
blacklist /var/lib/gnarwl/blacklist.db
forceheader /var/lib/gnarwl/header.txt
forcefooter /var/lib/gnarwl/footer.txt
recvheader To Cc
loglevel 3

Torne o diretório gnarwl legível para o usuário vmail

chown -R vmail:vmail /var/lib/gnarwl/

Em seguida, precisamos adicionar o transporte gnarwl ao postfix

vi /etc/postfix/transport

Insira o seguinte:

.autoreply      gnarwl:

Agora precisamos criar o transport.db

postmap /etc/postfix/transport

Isso conclui a configuração do gnarwl.

Passo 6: Instalar e Configurar vMailpanel

Como baixamos o vMailpanel antes, podemos começar diretamente com a configuração da interface vMailpanel.

chown -R www-data:www-data /usr/share/phamm  
cd /usr/share/vMailpanel

Agora configuraremos o phamm para uso real.

cp config.inc.example.php config.inc.php
nano config.inc.php

Altere os parâmetros de conexão ldap para se adequar à sua configuração real.

// *============================*
// *=== Configurações do Servidor LDAP ===*
// *============================*

// O endereço do servidor (IP ou FQDN)
define ('LDAP_HOST_NAME','127.0.0.1');

// A versão do protocolo [2,3]
define ('LDAP_PROTOCOL_VERSION','3');

// A porta do servidor
define ('LDAP_PORT','389');

// O contêiner
define ('SUFFIX','dc=example,dc=tld');

// O dn de ligação do admin (pode ser rootdn)
define ('BINDDN','cn=admin,dc=example,dc=tld');

// O contêiner do Phamm
define ('LDAP_BASE','o=hosting,dc=example,dc=tld');

e mude

// Mensagem de boas-vindas
define ('SEND_WELCOME',1);
$welcome_msg = '../welcome_message.txt';
$welcome_subject = 'Bem-vindo!';
# $welcome_sender = 'postmaster@localhost';
$welcome_bcc = '[email protected]';

Isso enviará uma mensagem de boas-vindas e um bcc para sua conta de postmaster.

Ative o plugin fpt e person removendo o // na seção de plugins. Se desejado, você também pode ativar os plugins davical e/ou jabber, o esquema necessário para esses plugins está instalado.

No config.inc.php você encontrará:

define ('DELETE_ACCOUNT_IMMEDIATELY', false);  

Se você definir isso como verdadeiro, a exclusão de conta ou domínio terá efeito imediato. No entanto, a caixa de correio física não é excluída (ou o diretório do domínio). Para excluir a caixa de correio física, devemos usar o script cleaner.sh. Isso é descrito abaixo.

Você pode editar plugins/mail.xml para alterar os padrões para SMTP e cota, modificá-los de acordo com suas necessidades. O padrão é definido como 1GB de cota.

Você pode editar plugins/ftp.xml para alterar os padrões para o diretório base de ftp padrão e cota, modificá-los de acordo com suas necessidades.

Não se esqueça de criar os aliases e/ou caixas de correio para postmaster, webmaster, pois estes são usados pelos oficiais e ISPs para enviar e-mail em caso de … Não ter esses endereços pode resultar em ser colocado na lista negra.

Por padrão, os aliases [email protected] e [email protected] que são padrão para [email protected] são criados.

Agora o script cleaner:

cp tools/cleaner.sh /home/vmail/cleaner.sh

Altere o seguinte em cleaner.sh

BINDDN=
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.