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:1000Usuário postfix:
UID: 108, GID:108Base dn do OpenLDAP:
dc=example,dc=tldConta de administrador do OpenLDAP:
cn=admin,dc=example,dc=tldDN de pesquisa do vMailpanel:
o=hosting,dc=example,dc=tldUma conta somente leitura para a árvore o=hosting,dc=example,dc=tld:
cn=vmail,o=hosting,dc=example,dc=tldVocê 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/shareObtenha a versão mais recente do vMailpanel:
git clone https://git.com/wolmfan68/vMailpanelOK, agora podemos começar.
Passo 2: Instalar e configurar OpenLDAP
Instale o OpenLDAP e ldap-utils:
apt -y install slapd ldap-utils php-ldapReconfigure o slapd para ter certeza de que reflete sua configuração desejada
dpkg-reconfigure slapdVocê terá que responder algumas perguntas:
Omitir configuração do servidor OpenLDAP? NãoNome de domínio DNS: example.tld ==> coloque seu nome de domínio aquiNome da organização: example.tld ==> coloque sua organização aquiSenha do administrador: secret ==> coloque sua senhaConfirmar senha: secret Backend do banco de dados a ser usado: MDBVocê deseja que o banco de dados seja removido quando o slapd for purgado? SimMover banco de dados antigo? SimMude para o diretório /etc/ldap/schema:
cd /etc/ldap/schemaCopie 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.ldifAgora 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.ldifConteúdo de base.ldif
dn: o=hosting,dc=example,dc=tldobjectClass: organizationobjectClass: topo: hosting description: Organização de Hospedagem# Conta somente leituradn: cn=vmail,o=hosting,dc=example,dc=tldobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: vmailuserPassword: {MD5}M267sheb6qc0Ck8WIPOvQA==description: Conta somente leituraCarregue o dn base no banco de dados com o seguinte comando:
ldapmodify -a -D cn=admin,dc=example,dc=tld -W -f base.ldifAgora 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.ldifldapmodify -Y EXTERNAL -H ldapi:/// -f acl-new.ldifVocê pode verificar os novos acl’s com o seguinte comando:
slapcat -n 0Isso 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 vmailPor 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/vmailExecute o seguinte comando para instalar o Postfix e outros aplicativos necessários:
apt install postfix postfix-ldapVocê 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 1024chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csropenssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crtopenssl rsa -in smtpd.key -out smtpd.key.unencryptedmv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650Nota: 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.bcknano /etc/postfix/main.cfE 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.cfE 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.cfE 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.cfE 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.cfE 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.cfE 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-ldapIsso 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/dovecotAgora configuramos os diferentes arquivos de configuração do dovecot.
nano dovecot-ldap.conf.extE 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.dvi 10-auth.confE 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.confE 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 gnarwlAgora 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.bckAgora criamos o novo arquivo conf:
vi /etc/gnarwl.confE 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 3Torne 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/transportInsira o seguinte:
.autoreply gnarwl:Agora precisamos criar o transport.db
postmap /etc/postfix/transportIsso 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/vMailpanelAgora configuraremos o phamm para uso real.
cp config.inc.example.php config.inc.phpnano config.inc.phpAltere 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.shAltere o seguinte em cleaner.sh
BINDDN=Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.