Introdução
No Ubuntu 20.04, você pode usar ferramentas como Postfix, Dovecot, MySQL, e SpamAssassin para configurar um servidor de e-mail. O processo pode ser confuso para quem está tentando pela primeira vez. Este tutorial tem como objetivo simplificar o processo de configuração do servidor de e-mail para você com etapas detalhadas. Ao final deste tutorial, você saberá como adicionar domínios virtuais, usuários e aliases. Por fim, você tornará seu servidor virtual mais seguro contra hubs de spam.
Pré-requisitos
Antes de começar com a configuração do servidor de e-mail, há alguns pré-requisitos a serem observados. Primeiro, certifique-se de que seu servidor virtual privado tenha um domínio que esteja apontando para o seu servidor. Você também precisa instalar e configurar o MySQL. Além disso, você precisa ter um usuário com privilégios de root concedidos e instalar um certificado SSL. Finalmente, certifique-se de que seu FQDN esteja configurado e identificado.
Se você instalar seus pacotes como usuário root, terá todos os privilégios. É por isso que recomendamos:
|
1 |
sudo -i |
Insira a senha do seu usuário. Neste ponto, você verá o $ símbolo mudar para #. Em seguida, vamos explorar os diferentes aspectos da configuração um por um.
Passo 1: Instalando Pacotes
Começaremos aprendendo como instalar pacotes:
|
1 |
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql |
Quando a configuração do Postfix aparecer, selecione Internet Site:

Você será questionado sobre o System mail nome. Aqui, você pode usar o FQDN ou o domínio principal:

Passo 2: Criando um Banco de Dados MySQL, Domínios Virtuais, Usuários e Aliases
Em seguida, assim que todos os pacotes estiverem instalados, prosseguiremos com a configuração. Nosso objetivo é configurar três tabelas. Uma será para domínios, uma para usuários e outra para aliases. Elas serão hospedadas em um banco de dados MySQL que iremos criar.
Digamos que queremos nomear nosso banco de dados como servermail. Você é livre para usar o nome de sua escolha. Veja como vamos criá-lo:
|
1 |
mysqladmin -p create servermail |
Você deve fazer login como o usuário root do MySQL:
|
1 |
mysql -u root -p |
Em seguida, insira sua senha. Uma tentativa bem-sucedida mostrará isso como resultado:
|
1 |
mysql > |
Em seguida, criaremos um novo usuário especificamente para autenticação de e-mail. Conceda a permissão SELECT da seguinte forma:
|
1 |
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword'; |
Depois disso, recarregue seus privilégios do MySQL para aplicar as permissões com sucesso:
|
1 |
mysql > FLUSH PRIVILEGES; |
Em seguida, usaremos nosso banco de dados para criar as tabelas e inserir os dados:
|
1 |
mysql> USE servermail; |
Criaremos tabelas individuais para os domínios específicos que são reconhecidos como domínios autorizados:
|
1 2 3 4 5 |
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
O objetivo é introduzir os usuários na tabela. Portanto, adicionaremos o endereço de e-mail e a senha relevantes. Lembre-se de que você deve associar cada usuário a um domínio:
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Em seguida, criaremos uma tabela para todos os nossos aliases virtuais para especificar todos os e-mails que iremos encaminhar para o outro e-mail:
|
1 2 3 4 5 6 7 8 |
CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Ao final deste processo, você terá criado com sucesso três tabelas. Em seguida, temos que introduzir os dados.
-
Domínios Virtuais
Nesta seção, aprenderemos como introduzir domínios dentro da
virtual_domains tabela. Especificamente, focaremos em como introduzir o domínio primário (example.com) e o FQDN (hostname.example.com):
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'); |
-
E-mails Virtuais
Em seguida, insira o endereço de e-mail e as senhas associadas para cada um dos domínios. Certifique-se de que todas as informações sejam alteradas com suas informações específicas:
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com'); |
-
Aliases Virtuais
Agora você pode introduzir o endereço de e-mail para o qual irá encaminhar o outro endereço de e-mail. O primeiro é a origem, enquanto o segundo é o destino:
|
1 2 3 4 |
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com'); |
Depois, você pode sair do MySQL:
|
1 |
mysql > exit |
Passo 3: Configurando o Postfix
É importante configurar o Postfix para que ele possa gerenciar as conexões SMTP. Ele também deve ser capaz de enviar as mensagens para todos os usuários inseridos no banco de dados MySQL. Vamos começar fazendo uma cópia do arquivo padrão. Isso é para que você possa reverter facilmente para a configuração padrão se e quando necessário:
|
1 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig |
Agora abra o main.cf para modificá-lo:
|
1 |
nano /etc/postfix/main.cf |
Comece comentando os parâmetros TLS e, em seguida, anexe quaisquer outros parâmetros. Em nosso exemplo, estamos usando os certificados SSL gratuitos. Você pode, é claro, alterar a configuração de acordo com suas necessidades:
|
1 2 3 4 5 6 7 8 9 10 11 |
# TLS parameters #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes |
Em seguida, você anexará esses parâmetros abaixo das configurações de TLS:
|
1 2 3 4 5 6 7 |
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination |
Depois disso, temos que comentar as mydestination configurações padrão. Em seguida, iremos substituí-lo por localhost. Com essa alteração, o VPS poderá usar os domínios virtuais na tabela MySQL:
|
1 2 |
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost |
Agora use este comando para verificar se o parâmetro myhostname está definido no seu FQDN:
|
1 |
myhostname = hostname.example.com |
Além disso, adicione esta linha para ativar a entrega de e-mail local para todos os domínios virtuais listados na tabela:
|
1 |
virtual_transport = lmtp:unix:private/dovecot-lmtp |
Por fim, adicionaremos os seguintes parâmetros para instruir o Postfix a configurar os domínios virtuais, usuários e aliases:
|
1 2 3 |
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Para garantir que não haja erros, compare essas alterações com o seguinte arquivo:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
Depois que tudo isso for verificado, você criará três arquivos para anexar ao arquivo main.cf . O objetivo aqui é dar instruções ao Postfix sobre como se conectar ao MySQL. Para fazer isso, começaremos criando o arquivo mysql-virtual-mailbox-domains.cf . Claro que, no seu arquivo, você fará alterações de acordo com sua configuração pessoal:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-domains.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s' |
Em seguida, reinicie o Postfix:
|
1 |
service postfix restart |
Você deve garantir que o Postfix seja capaz de encontrar seu domínio. Para testar isso, use este comando:
|
1 |
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf |
O comando retornará 1 se for bem-sucedido. Nesse caso, você pode prosseguir criando o arquivo mysql-virtual-mailbox-maps.cf :
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s' |
Reinicie o Postfix mais uma vez:
|
1 |
service postfix restart |
Novamente, garantiremos que o Postfix seja capaz de encontrar o primeiro endereço de e-mail. Para testar isso, use o seguinte comando:
|
1 |
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf |
Se for bem-sucedido, você obterá um retorno de 1. Sendo assim, passaremos para a criação do último arquivo:
|
1 |
nano /etc/postfix/mysql-virtual-alias-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s' |
Isso conclui a configuração entre o Postfix e o MySQL. Reinicie o Postfix para aplicar:
|
1 |
service postfix restart |
Para confirmar que o Postfix está realmente encontrando seus aliases, use este comando:
|
1 |
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Idealmente, você deve receber o e-mail que é encaminhado para o alias como saída. Você também pode modificar o /etc/postfix/master.cf arquivo assim se quiser conectar a porta 587 com clientes de e-mail de forma segura:
|
1 |
nano /etc/postfix/master.cf |
Aqui está como descomentar certas linhas e anexar parâmetros:
|
1 2 3 4 5 |
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject |
Às vezes, pode ser necessário reiniciar o Postfix para confirmar que a porta está aberta:
|
1 |
service postfix restart |
Esta ferramenta também pode ser usada para escanear as portas do domínio. Você pode usá-la para verificar se as portas 25 e 587 estão abertas.
Passo 4: Configurando o Dovecot
Agora é hora de configurar o Dovecot. Para esta seção, teremos que copiar os 7 arquivos que você deseja modificar. Isso serve para garantir que você possa reverter as alterações, se necessário. Insira este comando um por um:
|
1 2 3 4 5 6 |
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig |
Você precisa editar o arquivo de configuração do Dovecot:
|
1 |
nano /etc/dovecot/dovecot.conf |
Certifique-se de que a opção esteja descomentada:
|
1 |
!include conf.d/*.conf |
A seguir, habilitaremos os protocolos abaixo da linha
!include_try /usr/share/dovecot/protocols.d/*.protocol . Se desejar, você também pode adicionar pop3:
|
1 2 |
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp |
Para garantir que não haja erros, compare com este arquivo:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
Em seguida, edite o arquivo de confirmação de e-mail:
|
1 |
nano /etc/dovecot/conf.d/10-mail.conf |
Localize a linha mail_location . Você precisa descomentá-la e adicionar este parâmetro:
|
1 |
mail_location = maildir:/var/mail/vhosts/%d/%n |
Depois disso, localize a linha mail_privileged_group . Novamente, descomente-a e adicione o parâmetro mail:
|
1 |
mail_privileged_group = mail |
Para eliminar qualquer possibilidade de erros, compare com este arquivo:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
-
Verificando Permissões
Para verificar as permissões, use este comando:
|
1 |
ls -ld /var/mail |
Certifique-se de que suas permissões apareçam como o seguinte:
|
1 |
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail |
Você pode criar uma pasta para cada domínio. Todas essas pastas serão registradas na tabela do MySQL:
|
1 |
mkdir -p /var/mail/vhosts/example.com |
Crie um usuário e grupo vmail usando um ID de 5000:
|
1 2 |
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail |
Em seguida, você deve alterar o proprietário da /var/mail pasta para o usuário vmail:
|
1 |
chown -R vmail:vmail /var/mail |
Agora edite o /etc/dovecot/conf.d/10-auth.conf arquivo:
|
1 |
nano /etc/dovecot/conf.d/10-auth.conf |
Adicione a seguinte linha após descomentar a autenticação de texto simples:
|
1 |
disable_plaintext_auth = yes |
Use isto para modificar o auth_mechanisms parâmetro:
|
1 |
auth_mechanisms = plain login |
Agora comente esta linha:
|
1 |
#!include auth-system.conf.ext |
Para ativar a autorização MySQL, você deve descomentar a seguinte linha:
|
1 |
!include auth-sql.conf.ext |
Para detectar e editar erros, use o seguinte arquivo:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
Criar um /etc/dovecot/dovecot-sql.conf.ext arquivo com as suas informações permitirá que você se autentique:
|
1 |
nano /etc/dovecot/conf.d/auth-sql.conf.ext |
Insira este código no arquivo:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } |
Usaremos as nossas informações personalizadas do MySQL para modificar o /etc/dovecot/dovecot-sql.conf.ext arquivo:
|
1 |
nano /etc/dovecot/dovecot-sql.conf.ext |
Defina o MySQL como o parâmetro após descomentar o parâmetro driver assim:
|
1 |
driver = mysql |
Você pode introduzir suas informações específicas do MySQL descomentando a linha connect :
|
1 |
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword |
Agora você tem que descomentar a linha default_pass_scheme e alterá-la para SHA-512:
|
1 |
default_pass_scheme = SHA512-CRYPT |
Adicione as seguintes informações após descomentar password_query:
|
1 |
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; |
Para detectar erros, use este arquivo para comparar:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
Em seguida, você pode alterar o proprietário e o grupo da pasta dovecot para o usuário vmail:
|
1 2 |
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot |
O próximo passo é modificar o /etc/dovecot/conf.d/10-master.conf arquivo. Você deve ter muito cuidado aqui, pois diferentes parâmetros serão alterados:
|
1 |
nano /etc/dovecot/conf.d/10-master.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
##Descomente inet_listener_imap e modifique para a porta 0 service imap-login { inet_listener imap { port = 0 } #Crie o socket LMTP e estas configurações service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # Evite tornar o LMTP visível para toda a internet #address = #port = #} } |
Use o seguinte código para alterar o unix_listener parâmetro para service_auth:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot } |
Em seguida, você deve editar service auth-worker assim:
|
1 2 3 4 5 6 |
service auth-worker { # O processo auth worker é executado como root por padrão, para que possa acessar # /etc/shadow. Se isso não for necessário, o usuário deve ser alterado para # $default_internal_user. user = vmail } |
Detecte erros comparando com este arquivo:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
O próximo passo é modificarmos o arquivo de configuração SSL do Dovecot. Se você planeja usar a configuração padrão, pode pular esta etapa e ir para a próxima seção:
|
1 |
# nano /etc/dovecot/conf.d/10-ssl.conf |
A seguir, altere o ssl parâmetro para required assim:
|
1 |
ssl = required |
Também modificaremos o caminho para ambos ssl_cert e ssl_key:
|
1 2 |
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem |
Reinicie o Dovecot:
|
1 |
service dovecot restart |
Certifique-se de verificar se a porta 993 está aberta. Se você ativou o pop3, então verifique também a porta 995:
|
1 |
telnet example.com 993 |
Se você concluiu as etapas até este ponto, parabéns! Você configurou seu servidor de e-mail com sucesso. Para garantir que você seguiu todas as etapas corretamente, você pode testar sua conta com a ajuda de um cliente de e-mail assim:
|
1 2 3 4 |
- Nome de usuário: email1@example.com - Senha: email1'de senha - IMAP: example.com - SMTP: example.com |
A porta 993 é usada para IMAP seguro e a porta 587/porta 25 para SMTP.
Etapa 5: Configurando o SpamAssassin
Finalmente chegamos à última seção do tutorial, onde configuraremos o SpamAssassin. Começaremos instalando o SpamAssassin:
|
1 |
apt-get install spamassassin spamc |
Crie um usuário para o SpamAssassin assim:
|
1 |
adduser spamd --disabled-login |
Você deve abrir e modificar as configurações para poder configurar o SpamAssassin:
|
1 |
nano /etc/default/spamassassin |
Agora que você está aqui, deve alterar o ENABLED parâmetro para ativar o daemon do SpamAssassin:
|
1 |
ENABLED=1 |
Modifique os parâmetros home e options com este código:
|
1 2 |
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" |
Use esta linha para especificar o PID_File parâmetro:
|
1 |
PIDFILE="${SPAMD_HOME}spamd.pid" |
A seguir, use este comando para indicar que as regras do SpamAssassin serão atualizadas automaticamente:
|
1 |
CRON=1 |
Verifique se há erros comparando com o seguinte documento:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
Se você quiser configurar as regras anti-spam, deve abrir o arquivo /etc/spamassassin/local.cf novamente:
|
1 |
nano /etc/spamassassin/local.cf |
A forma como o SpamAssassin funciona é que ele atribui uma pontuação a cada e-mail recebido pelo usuário. Ele avalia as pontuações dos e-mails e, se for maior que 5.0 em sua verificação de spam, o e-mail é marcado como spam. Aqui estão os parâmetros que você pode usar para configurar essas regras anti-spam:
|
1 2 3 4 5 6 7 8 9 10 |
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0 |
Assim que as regras anti-spam estiverem definidas, você precisa informar ao Postfix que cada e-mail deve ser verificado com o SpamAssassin. Para este propósito, precisamos modificar o /etc/postfix/master.cf arquivo:
|
1 |
nano /etc/postfix/master.cf |
Encontre a seguinte linha e adicione o spamassassin filtro:
|
1 2 |
smtp inet n - - - - smtpd -o content_filter=spamassassin |
Agora você pode anexar estes parâmetros:
|
1 2 3 |
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} |
Finalmente, inicie o SpamAssassin e reinicie o Postfix para aplicar as alterações. Quando você reiniciar, o Postfix começará a verificar spam nos e-mails:
|
1 2 |
service spamassassin start service postfix restart |
E é isso! Você configurou com sucesso o seu servidor de e-mail com o Postfix e o Dovecot. Você também realizou a autenticação MySQL e configurou a filtragem de spam com o SpamAssassin.
Conclusão
Este tutorial descreve as etapas que você precisa seguir para realizar a configuração do seu servidor de e-mail com as ferramentas mencionadas acima. Ele pode ser utilizado como um guia abrangente para você configurar seu servidor de e-mail de forma independente. Se você estiver interessado em utilizar o recurso de servidor SMTP do Google, acompanhe este tutorial.
Feliz Computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.