Tutorial Debian 8 x64 com ISPConfig e NginX: Servidor de Email

Após a instalação do ISPConfig o Servidor de Email já ficou pronto para uso com o Postfix e o Dovecot. O que precisamos fazer é acertar algumas configurações e aprender a usá-lo.

O Servidor de Emails é um dos serviços mais procurados no Fator Binário e também o mais problemático. Dezenas de pessoas solicitam minha ajuda todos os meses, sendo que a grande maioria destes problemas são causados por configuração errada.

Neste artigo mostrarei como criar contas de email no ISPConfig, instalar o DKIM, desativar o certificado TLS obrigatório na porta 587 e instalar a última versão do Roundcube no NginX.

* Na Digital Ocean a porta 25 (SMTP) está bloqueada por padrão para contas novas. Se quiser enviar emails externamente então será necessário abrir um ticket de suporte com eles e dizer que deseja abrir a porta 25 para envio de emails. O suporte responderá o ticket em alguns minutos solicitando mais informações suas. Envie as informações adicionais que eles liberam a conta para envios. *O processo todo da solicitação até a liberação leva menos de 30 minutos.

Servidor de Emails

* Acesse o terminal SSH como superusuário root para executar os comando de instalação e configuração.

1 Adicionando caixas de email no ISPConfig

No painel admin do ISPConfig pode-se facilmente criar e gerenciar contas e domínios de email. É possível criar contas novas, redirecionamentos para outras contas ou catch-all, filtros, etc..

Acesse o menu de emails: ISPConfig → Correio

1a ⇒ Crie um domínio de email: ISPConfig → Correio → Domínio → Adicionar novo domínio

Preencha o nome do domínio no terceiro campo e clique em Salvar. Pode-se deixar as demais opções padrão. Lembre-se que “nome do domínio” não deverá ser escrito com o “www”. Exemplo correto: meudominio.com.br

1b ⇒ Crie uma caixa de email para o domínio: ISPConfig → Correio → Caixa de correio → Adicionar nova caixa de correio

Preencha os campos abaixo deixando o restante padrão:

» Nome Real: <– Seu nome

» Correio Alias: <– contato (isso será a sua conta de email, selecione ao lado para qual domínio está criando a caixa)

» Senha: <– Digite uma senha segura e repita no próximo campo

» Clique em Salvar

1c ⇒ Acesse a conta. Quando instalamos o ISPConfig o SquirrelMail foi instalado junto, para acessá-lo digite a URL http://IP_DO_SERVIDOR:8081/squirrelmail. Digite o nome da conta com o domínio e a sua senha cadastrada para a caixa.

• Note que mesmo criando a conta e podendo acessá-la ainda é necessário direcionar o DNS do domínio para o VPS. Enquanto a tabela não estiver propagada não poderemos receber emails externos. Podemos enviar, mas como ainda falta a tabela DNS e os registros DKIM e SPF, dificilmente eles chegarão na caixa de entrada do destinatário. Mais adiante neste tutorial veremos como criar a tabela.

Dica: Após criar uma caixa de email para o domínio acesse no menu esquerdo a opção “Correio Catchall” digitando o domínio e a conta que receberá os emails. Isso fará com que todos os emails enviados para qualquer endereço daquele domínio, e que não tenha caixa, sejam redirecionados para a conta principal.

2 Configuração do DKIM

O DKIM é necessário para que os emails sejam assinados e certificados pelo servidor, isso ajuda a não serem marcados como SPAM. *A partir do ISPConfig 3.1 essa funcionalidade será incorporada ao painel, mas por enquanto temos que configurá-la manualmente.

Na instalação do ISPConfig pelo script o OpenDKIM já foi baixado, temos apenas que configurá-lo.

2a ⇒ Edite o arquivo /etc/opendkim.conf e adicione as seguintes linhas ao final:

SubDomains           yes
AutoRestart          Yes
AutoRestartRate      10/1h
UMask                002
Syslog               yes
SyslogSuccess        Yes
LogWhy               Yes

Canonicalization     relaxed/simple

ExternalIgnoreList   refile:/etc/opendkim/TrustedHosts
InternalHosts        refile:/etc/opendkim/TrustedHosts
KeyTable             refile:/etc/opendkim/KeyTable
SigningTable         refile:/etc/opendkim/SigningTable

Mode                 sv
PidFile              /var/run/opendkim/opendkim.pid
SignatureAlgorithm   rsa-sha256
UserID               opendkim:opendkim
Socket               inet:12301@localhost

2b ⇒ Edite o arquivo /etc/default/opendkim e adicione a seguinte linha ao final:

SOCKET="inet:12301@localhost"

2c ⇒ Altere o Postfix para enviar emails usando o protocolo IPV4 somente, isso evitará mensagens de erro “network is unreachable” em emails enviados para contas Gmail, e também fará com que os emails não sejam marcados como SPAM no Gmail. Edite o arquivo /etc/postfix/main.cf:

# Linha 50: Altere de all para ipv4

inet_protocols = ipv4

2d ⇒ Como estamos configurando o OpenDKIM para assinar os emails temos que desativar o filtro do Amavis no Postfix e adicionar os do próprio OpenDKIM . Edite o arquivo /etc/postfix/main.cf:

# Comente as 2 linhas abaixo inserindo um sinal de "#" no início

#content_filter = amavis:[127.0.0.1]:10024
#receive_override_options = no_address_mappings


# E logo abaixo adicione estas 4 linhas

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

2e ⇒ Crie os arquivos para as chaves DKIM (mas somente execute este procedimento se você ainda não adicionou nenhuma chave DKIM neste servidor pois os arquivos serão zerados):

root# mkdir -p /etc/opendkim/keys; touch /etc/opendkim/TrustedHosts; touch /etc/opendkim/KeyTable; touch /etc/opendkim/SigningTable

2f ⇒ Edite os 3 arquivos abaixo adicionando os domínios conforme exemplo:

• Arquivo /etc/opendkim/TrustedHosts:

127.0.0.1
localhost
192.168.0.1/24

#Adicione todos os seus dominios abaixo: 
*.fatorbinario.com
#*.segundo_dominio.com

#Para o domínio principal também será necessário adicionar esta linha com o nome do hostname (verifique qual o seu hostname, que deve ser o mesmo nome dado ao VPS): 
debian8.fatorbinario.com

• Arquivo /etc/opendkim/KeyTable:

#Note que isso deverá ser escrito em uma linha única:
mail._domainkey.fatorbinario.com fatorbinario.com:mail:/etc/opendkim/keys/fatorbinario.com/mail.private

#Pode-se usar uma única chave para todos os seus domínios, para isso não há necessidade de se adicionar outros domínios neste arquivo pois podemos direcionar as chaves no próximo arquivo SigningTable. Mas caso opte em criar uma chave para cada domínio replique a linha acima e substitua fatorbinario.com para cada um

• Arquivo /etc/opendkim/SigningTable:

*@fatorbinario.com mail._domainkey.fatorbinario.com

#Temos ainda que apontar o subdomínio do hostname que adicionamos no arquivo TrustedHosts para a chave do domínio principal. :
*@debian8.fatorbinario.com mail._domainkey.fatorbinario.com

#Note que podemos usar este mesmo "truque" para apontar todos os outros domínios para a mesma chave desta maneira (mas caso não queira usar a mesma chave replique a primeira linha substituindo os domínios):
#*@segundo_dominio.com mail._domainkey.fatorbinario.com

2g ⇒ Crie um subdiretório para cada domínio que terá uma chave (note que não há necessidade de fazer isso para os domínios que optou em apontar para a mesma chave principal). Em seguida crie a chave, substituindo fatorbinario.com pelo seu domínio:

root# mkdir /etc/opendkim/keys/fatorbinario.com

root# cd /etc/opendkim/keys/fatorbinario.com

root# opendkim-genkey -s mail -d fatorbinario.com

root# chown opendkim:opendkim mail.private

* Serão criados 2 arquivos. O arquivo mail.private contém a chave privada do domínio e o arquivo mail.txt a chave pública que usaremos para configurar o DNS

* * Exemplo de configuração de chave DKIM na tabela DNS (copie a chave de mail.txt):

Type: TXT

Name: mail._domainkey.fatorbinario.com.

Text: “v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs0+Ep6l2g9SgVvJayx5SMZeV1+9AVN7FGkZO4FLWrigG7O69neoj+FSFwI3ATvXUITvQojlP2QMbMj3ffjZpBpZeK0JjS75rcWRmf66d/Q9MyUv7AaHq801OD1dZkv+NbXJh5bl7AbtKzV4AklNrJZPNkpLmcnDqyW0Ii+ePrawICCQAB”

#Note que no arquivo mail.txt existe um texto adicional após fechar as aspas duplas da chave. Certifique-se de não colar aquele comentário ao adicionar a entrada. Cole a sua chave no registro da tabela DNS conforme mostrado acima com as aspas duplas incluídas

#Note também que nesta última versão há um bug na geração da chave pública. Tem um abre aspas e uma tabulação antes da instrução da chave começcando em "p=". É necessário limpar aquela formatação adicional.

#Opcionalmente você pode gerar as chaves pública e privada neste link: http://dkimcore.org/tools/keys.html basta digitar o domínio e gerar, em seguida copie a chave pública para criar o registro na tabela e baixe a chave privada para o servidor.

2h ⇒ Reinicie o Postfix e o OpenDKIM:

root# /etc/init.d/postfix restart

root# /etc/init.d/opendkim restart
3 Desativando o certificado TLS obrigatório para envios SMTP pela porta 587

Quando instalamos o ISPConfig automaticamente adicionamos um certificado SSL genérico para emails que é usado pela porta de envio SMTP 587. O problema é que alguns clientes de email como o Outlook não reconhecem o certificado, e conforme a versão, continuam solicitando a validação infinitamente.

O aviso que aparece no Microsoft Outllok normalmente é este: “The server you are connected to is using a security certificate that cannot be verified ou este: O certificado de segurança foi emitido por uma empresa na qual você não escolheu confiar

3a ⇒ Edite o arquivo /etc/postfix/master.cf:

#Comente com um sinal de "#" entre as linhas 17 a 29 e logo abaixo na linha 30 abra um espaço com ENTER e adicione o segundo bloco de código:

#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
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -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


#Segundo bloco de código
submission inet n - - - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_enforce_tls=no
 -o smtpd_tls_security_level=may
 -o smtpd_tls_auth_only=no
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

3b ⇒ Reinicie o Postfix:

root# /etc/init.d/postfix restart

NOTA: A alteração acima fará com que o certificado TLS não seja “forçado” ou obrigatório para os envios. Mas a partir de agora  quando configurar o Outlook será necessário marcar a opção “Meu servidor de saída (SMTP) requer autenticação” na aba “Servidor de saída” nas configurações avançadas da conta.

4 Roundcube Webmail

Na última versão do script instalador do ISPConfig (Parte 3 deste tutorial) o Roundcube já foi instalado. Mas caso não tenha seguido aquela parte então proceda com os passos abaixo.

4a ⇒ Baixe e instale a última versão disponível do repositório Debian Backports:

root# echo deb http://mirrors.digitalocean.com/debian jessie-backports main > /etc/apt/sources.list.d/jessie-backports.list

root# apt-get update

root# apt-get install -t jessie-backports roundcube

» Deseja continuar <-- ENTER

» Configure database for roundcube with dbconfig-common?: <-- Yes

» Database type to be used with roundcube: <-- mysql

» Password of the database's administrative user: <-- Digite a senha de administrador do MySQL

» MySQL application password for roundcube: <-- Deixar em branco

4b ⇒ Edite o arquivo /etc/roundcube/config.inc.php e modifique as linhas:

#Linha 35:
$config['default_host'] = 'localhost';

#Linha 47:
$config['smtp_server'] = 'localhost';

#Linha 75: Modifique o array para que fique assim:
$config['plugins'] = array('jqueryui', 'ispconfig3_account', 'ispconfig3_autoreply', 'ispconfig3_pass', 'ispconfig3_spam', 'ispconfig3_fetchmail', 'ispconfig3_filter');

4c ⇒ Se desejar integrar o Roundcube ao ISPConfig, para que o usuário possa trocar a senha, instale os plugins e conserte o link simbólico do jQueryUI para não floodar os arquivos de log com mensagens de erro (para resumir os comandos irei colocá-los todos na mesma linha, se der erro durante a instalação me avisem nos comentários. Lembrem-se que é só copiar e colar no terminal com o botão direito do mouse):

root# cd /tmp; git clone https://github.com/w2c/ispconfig3_roundcube.git; cd /tmp/ispconfig3_roundcube/; mv ispconfig3_* /usr/share/roundcube/plugins/; cd /usr/share/roundcube/plugins/; mv ispconfig3_account/config/config.inc.php.dist ispconfig3_account/config/config.inc.php; ln -s /usr/share/roundcube/plugins/ispconfig3_* /var/lib/roundcube/plugins/; cd /var/lib/roundcube/plugins/jqueryui; rm config.inc.php; ln -s config.inc.php.dist config.inc.php

4d ⇒ Adicione um usuário remoto para o Roundcube no ISPConfig:

Acesse: ISPConfig → Sistema → Usuário Remotos → Adicionar novo usuário

» Nome do Usuário <– roundcube

» Senha <– digite uma senha segura e repita no próximo campo

» Marque somente as opções abaixo:

(1) Server functions 
(3) Funções de Cliente
(8) Funções de usuário de correio
(9) Funções de aliases de correio
(16) Funções de spamfilter de usuário de correio
(17) Funções de política de spamfilter de correio
(18) Funções de fetchmail
(19) Mail spamfilter whitelist functions
(20) Mail spamfilter blacklist functions
(21) Funções de filtro de correio de usuário

» Clique em Salvar

4e ⇒ Edite o arquivo /usr/share/roundcube/plugins/ispconfig3_account/config/config.inc.php

<?php
  $rcmail_config['identity_limit'] = false;
  $rcmail_config['remote_soap_user'] = 'roundcube';
  $rcmail_config['remote_soap_pass'] = 'senha_roundcube_cadastrada_acima';
  $rcmail_config['soap_url'] = 'https://debian8.fatorbinario.com:8080/remote/';
?>

* Preste atenção para não usar o número IP em soap_url, escreva o hostname conforme mostrado. Este é o endereço pelo qual você acessa o ISPConfig

** Note ainda que neste tutorial isso é obrigatório pois devido a algumas mudanças de segurança no Debian 8 não é possível apontar pelo número IP

*** Adicione uma entrada Tipo A ou CNAME na tabela DNS do domínio principal do servidor com o prefixo do hostname, exemplo debian8 (isso é para que o roundcube possa encontrar o servidor pelo nome: exemplo debian8.fatorbinario.com). E caso você use a CloudFlare deverá deixar a nuvem desativada para este registro.

4f ⇒ Copie o certificado SSL do ISPConfig para que a URL SOAP acima funcione:

root# cp /usr/local/ispconfig/interface/ssl/ispserver.crt /usr/local/share/ca-certificates/ispserver.crt

root# update-ca-certificates

4g ⇒ Edite o arquivo /etc/php5/fpm/php.ini (nginx):

#Descomente a linha 1940 (removendo o ponto e vírgula do início) e altere o valor para:

openssl.cafile=/etc/ssl/certs/ca-certificates.crt

4h ⇒ Reinicie o NginX e o PHP:

root# /etc/init.d/nginx restart

root# /etc/init.d/php5-fpm restart

4i ⇒ Diretiva NginX para o Roundcube:

Acesse: ISPConfig → Sites → <selecione um site na lista> → aba Opções

Na caixa “nginx Directives” adicione o código abaixo. *Será necessário adicionar este bloco de diretivas para cada site que irá acessar o Roundcube pelo atalho /webmail ou /roundcube do domínio:

client_max_body_size 100M;
location /roundcube {
   root /var/lib/;
   index index.php index.html index.htm;
   location ~ ^/roundcube/(.+\.php)$ {
      try_files $uri =404;
      root /var/lib/;
      include /etc/nginx/fastcgi_params;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_buffer_size 128k;
      fastcgi_buffers 256 4k;
      fastcgi_busy_buffers_size 256k;
      fastcgi_temp_file_write_size 256k;
   }
   location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
      root /var/lib/;
   }
   location ~* /.svn/ {
      deny all;
   }
   location ~* /README|INSTALL|LICENSE|SQL|bin|CHANGELOG$ {
      deny all;
   }
}
location /webmail {
   rewrite ^/* /roundcube last;
}

* Após adicionar as diretivas NginX no site já pode-se acessar o RoundCube pelo endereço: http://seusite.com.br/webmail

• E por último, Aprenda a configurar os principais clientes de email (lembre-se que para o envio e recebimento externo funcionarem corretamente a tabela DNS deverá estar devidamente propagada e apontando para o servidor, e a porta 25 SMTP liberada pela Digital Ocean):

Link para o tutorial : https://fatorbinario.com/servidor-de-email-desativando-o-certificado-ssl-para-autenticacao-das-contas/#clientesdeemail

Índice do Tutorial:

©2014-2024 Fator Binário - Todos os direitos reservados

Fazer login com suas credenciais

Esqueceu sua senha?