CentOS 8 - Postfix SMTP, Dovecot POP IMAP and SSL/TLS
Índice:
Esta é a segunda publicação de nossa série Instalando e configurando um servidor de correio. Neste post, mostraremos como instalar e configurar o Postfix e o Dovecot, os dois principais componentes do nosso sistema de correio.
O Postfix é um agente de transferência de email de código aberto (MTA), um serviço usado para enviar e receber emails. O Dovecot é um servidor IMAP / POP3 e, em nossa configuração, também gerencia a entrega local e a autenticação do usuário.
Este tutorial foi escrito para o Ubuntu 16.04, no entanto, as mesmas etapas com pequenas modificações devem funcionar em qualquer versão mais recente do Ubuntu.
Pré-requisitos
Antes de continuar com este tutorial, verifique se você está conectado como um usuário com privilégios sudo.
Instalar Postfix e Dovecot
Os pacotes Dovecot nos repositórios padrão do Ubuntu estão desatualizados. Para tirar proveito do módulo
imap_sieve
, instalaremos o Dovecot a partir do repositório da comunidade Dovecot.
Adicione a chave GPG do repositório ao seu chaveiro apt sources com o seguinte comando wget:
wget -O- https://repo.dovecot.org/DOVECOT-REPO-GPG | sudo apt-key add -
Ative o repositório da comunidade Dovecot usando o seguinte comando:
echo "deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/dovecot.list
sudo apt update
sudo debconf-set-selections <<< "postfix postfix/mailname string $(hostname -f)"
sudo debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
sudo apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql
Configuração do Postfix
Vamos configurar o Postfix para usar caixas de correio e domínios virtuais.
Comece criando os arquivos de configuração
sql
que instruirão o postfix sobre como acessar o banco de dados MySQL, criado na primeira parte desta série.
sudo mkdir -p /etc/postfix/sql
Abra seu editor de texto e crie os seguintes arquivos:
/etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
Após a criação dos arquivos de configuração SQL, atualize o arquivo de configuração principal do postfix para incluir informações sobre os domínios virtuais, usuários e aliases armazenados no banco de dados MySQL.
sudo postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
sudo postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
sudo postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"
sudo postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
O comando postconf exibe os valores reais dos parâmetros de configuração, altera os valores dos parâmetros de configuração ou exibe outras informações de configuração sobre o sistema de correio Postfix.
O agente de entrega local entregará os emails recebidos nas caixas de correio dos usuários. Execute o seguinte comando para definir o serviço LMTP do Dovecot como um transporte de entrega de email padrão:
sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
Defina os parâmetros TL usando o certificado SSL gerado anteriormente, Vamos criptografar:
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.linuxize.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.linuxize.com/privkey.pem'
Defina as configurações SMTP autenticadas e entregue a autenticação ao Dovecot:
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
Também precisamos editar o arquivo de configuração principal do Postfix
master.cf
e ativar a porta de envio (
587
) e a porta smtps (
465
).
Abra o arquivo com seu editor de texto e remova o comentário / edite as seguintes linhas:
/etc/postfix/master.cf
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated, reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated, reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated, reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated, reject -o milter_macro_daemon_name=ORIGINATING
Reinicie o serviço postfix para que as alterações entrem em vigor.
sudo systemctl restart postfix
Neste ponto, você configurou com êxito o serviço Postfix.
Configurar Dovecot
Nesta seção, configuraremos o Dovecot para corresponder à nossa configuração. Certifique-se de editar as linhas destacadas em amarelo.
Comece configurando o arquivo
dovecot-sql.conf.ext
que instrui o Dovecot como acessar o banco de dados e como encontrar as informações sobre contas de email.
driver = mysql connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD default_pass_scheme = MD5-CRYPT iterate_query = SELECT username AS user FROM mailbox user_query = SELECT CONCAT('/var/mail/vmail/', maildir) AS home, \ CONCAT('maildir:/var/mail/vmail/', maildir) AS mail, \ 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule \ FROM mailbox WHERE username = '%u' AND active = 1 password_query = SELECT username AS user, password FROM mailbox \ WHERE username = '%u' AND active='1'
Não esqueça de usar as credenciais corretas do MySQL (dbname, usuário e senha).
Em seguida, edite o arquivo
conf.d/10-mail.conf
e edite as seguintes variáveis:
… mail_location = maildir:/var/mail/vmail/%d/%n… mail_uid = vmail mail_gid = vmail… first_valid_uid = 5000 last_valid_uid = 5000… mail_privileged_group = vmail… mail_plugins = quota…
Para fazer a autenticação funcionar, abra o
conf.d/10-auth.conf
, edite as seguintes linhas e inclua o arquivo
auth-sql.conf.ext
:
… disable_plaintext_auth = yes… auth_mechanisms = plain login… #!include auth-system.conf.ext !include auth-sql.conf.ext…
Abra o arquivo
conf.d/10-master.conf
e modifique-o da seguinte maneira:
… service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix }… }… service auth {… unix_listener auth-userdb { mode = 0600 user = vmail group = vmail }… unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }… }… service auth-worker { user = vmail }… service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } }…
Abra o
conf.d/10-ssl.conf
e ative o SSL / TLS.
… ssl = yes… ssl_cert = Make sure you use the correct path to the SSL certificate files.
If you have followed this series from the beginning, you should already have the
fullchain.pem
,
privkey.pem
,
dhparam.pem
files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.
Thanks to Nevyn for noticing the problem and providing a solution.
… ssl = yes… ssl_cert = Make sure you use the correct path to the SSL certificate files.
If you have followed this series from the beginning, you should already have the
fullchain.pem
,
privkey.pem
,
dhparam.pem
files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.
Thanks to Nevyn for noticing the problem and providing a solution.
Abra o arquivo
conf.d/20-imap.conf
e ative o plug-in
imap_quota
:
… protocol imap {… mail_plugins = $mail_plugins imap_quota… }…
Abra o arquivo
conf.d/20-lmtp.conf
e edite-o da seguinte maneira:
… protocol lmtp { postmaster_address = [email protected] mail_plugins = $mail_plugins }…
Defina as caixas de correio padrão no arquivo
conf.d/20-lmtp.conf
:
… mailbox Drafts { special_use = \Drafts } mailbox Spam { special_use = \Junk auto = subscribe } mailbox Junk { special_use = \Junk }…
Existem dois tipos diferentes de tamanhos de cota, um definido para o domínio inteiro e o outro por caixa de correio do usuário. Na parte anterior desta série, já ativamos o suporte à cota no PostfixAdmin, o que significa que as informações da cota serão armazenadas no banco de dados PostfixAdmin.
Agora, precisamos configurar o Dovecot para conectar-se ao banco de dados, manipular limites de cota e executar um script que envie um email para o usuário quando a cota do usuário exceder um limite especificado. Para fazer isso, abra o arquivo
conf.d/90-quota.conf
e modifique-o da seguinte maneira:
plugin { quota = dict:User quota::proxy::sqlquota quota_rule = *:storage=5GB quota_rule2 = Trash:storage=+100M quota_grace = 10%% quota_exceeded_message = Quota exceeded, please contact your system administrator. quota_warning = storage=100%% quota-warning 100 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = vmail unix_listener quota-warning { group = vmail mode = 0660 user = vmail } } dict { sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext }
Também precisamos informar ao dovecot como acessar o dicionário SQL de cota. Abra o arquivo
dovecot-dict-sql.conf.ext
e edite as seguintes linhas:
… connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD… map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages }… # map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } # }…
Certifique-se de usar as credenciais corretas do MySQL (dbname, usuário e senha).
Crie o seguinte script de shell que enviará um email ao usuário se sua cota exceder um limite especificado:
/usr/local/bin/quota-warning.sh
#!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota" From: [email protected] Subject: Quota warning Your mailbox is now $PERCENT% full. EOF
Torne o script executável executando o seguinte comando
chmod
:
sudo chmod +x /usr/local/bin/quota-warning.sh
Finalmente, reinicie o serviço dovecot para que as alterações entrem em vigor.
sudo systemctl restart dovecot
Conclusão
Até agora você deve ter um sistema de correio totalmente funcional. Na próxima parte desta série, mostraremos como instalar e integrar o Rspamd.
servidor de correio postfix dovecotEsta postagem faz parte da série Instalando e configurando um servidor de correio.
Outras postagens nesta série:
• Configurar um servidor de correio com PostfixAdmin • Instalar e configurar o Postfix e o Dovecot • Instalar e integrar o Rspamd • Instalar e configurar o Roundcube WebmailDirija com cuidado… Mas instale o relatório de falhas no seu iPhone
Se você se encontrar em uma colisão, você se sentirá muito melhor usando este iPhone app para obter o relatório de seguro arquivado.
Instale todos os seus favoritos Freeware em uma queda Swoop
Livre ferramenta Ninite permite que você escolha e escolha o software que você quer, então instala tudo automaticamente.
Instale e configure o webmail roundcube
O Roundcube é um cliente de email IMAP baseado na Web com uma interface de usuário muito intuitiva e moderna, escrita em PHP. Este tutorial aborda as etapas necessárias para instalar e configurar o Roundcube Webmail.