A maneira mais simples de configurar um servidor de email IMAP seguro? [fechadas]


17

Gostaria de me livrar do Google como provedor de e-mail e configurar uma solução completa de e-mail no meu servidor dedicado. A questão: desejo que a configuração seja a mais simples possível, para que não seja difícil configurar tudo novamente se houver algum problema.

Pré-requisitos

  • Apenas uma conta de usuário na máquina.
    • (nome diti; email principal kra@diti.me; outros apelidos são redirecionados, mas um cliente de email pode gerenciar os diferentes apelidos e reagir de acordo)
  • De preferência, não usa MySQL.
    • (no caso de backup e restauração de dados, bem como por uma questão de simplicidade, é melhor se não for necessário instalar e proteger o MySQL antes de obter um servidor de e-mail funcional)
  • O e-mail pode ser acessado (IMAP e SMTP) a partir do exterior.
  • Criptografia SSL / TLS para autenticação IMAP e SMTP (estou usando certificados CAcert , isso importa?).

Acredito que simplicidade, acesso IMAP / SMTP e autenticação segura são os recursos "básicos" que todos desejam sair do Google / qualquer outra coisa que desejem. Se eu estiver enganado e houver uma solução mais simples (por exemplo, uma solução do tipo ownCloud, com tudo incluído), ficaria feliz em ouvir.

Eu acho que a combinação de Postfix e Dovecot seria o caminho a percorrer. A propósito, estou executando o Debian.

As informações que encontrei até agora

  • Um artigo em francês descreve em detalhes muito longos como configurar uma solução de email completa e segura. É longo, mais difícil de manter, mais difícil de fazer backup e restauração, etc. Além disso, é necessário um cache DNS?
  • O wiki do Gentoo ( Complete_Virtual_Mail_Server/SSL_Certificatespágina) menciona o uso de certificados CAcert, mas não é claro sobre isso (todos esses SubjectAltNamesubdomínios são necessários?), Nem usa o Postfix (li que Courier é mais difícil).
  • Vários tutoriais sobre auto-hospedagem, todos diferentes, raramente descrevendo o que estão fazendo e por que (o e-mail auto-hospedado com acesso remoto parece complicado de configurar, então por que apenas fornecer uma lista de comandos sem explicação para "manequins?") .

Espero ter perguntado as coisas certas e que elas não sejam muito bobas.


1
Alguma idéia de como essa pergunta poderia ser reformulada e reaberta?
Diti

Respostas:


19
  • Não, não é necessário configurar um cache DNS no servidor. O servidor deve usar um resolvedor de DNS em cache em algum lugar próximo, mas a maioria das empresas de hospedagem já executa seus próprios resolvedores para todo o datacenter e configura servidores para usá-los por padrão.

  • Por padrão, o Postfix e o Dovecot usam contas locais para tudo. Se você tiver uma conta Linux nomeada diti, poderá efetuar login no Dovecot com ela e configurar o Postfix para validar logins SMTP no Dovecot .

  • Se você não conseguir fazer com que todo o correio vá para a mesma conta, é possível configurar aliases simples (como em /etc/aliases) para redirecionar o correio para a conta kra@ou postmaster@para ditiela.

  • Todos esses subjectAltNames não são necessários. Os únicos que você precisa são de nomes de domínio que você realmente usará , por exemplo, mail.diti.meou glaux.diti.me. Não tenho certeza se você precisa incluir o próprio domínio (ou seja diti.me).


O seguinte pressupõe que o domínio já tenha registros MX configurados para apontar para este servidor. Geralmente, tento manter minha configuração razoavelmente clara, pois sempre acabo me perguntando "o que diabos é isso" alguns meses depois.

1. Primeiro, instale o postfixe dovecot-imapdpacotes. Quando solicitado sobre a configuração do Postfix, selecione a opção "Site da Internet" e digite diti.mecomo o nome do email. Nesse momento, você já pode enviar e receber emails como diti@diti.mee provavelmente até conectar-se ao IMAP.

No entanto, ele ainda não possui SSL, nem permite o envio de email por SMTP de fora, nem um local seguro para armazenar emails (o padrão é um arquivo mbox /var/mail, que não é confiável e apresenta desempenho ruim, especialmente com IMAP).

2. Se você já possui um certificado SSL, insira- /etc/ssl/private/diti.me.pemo e a chave privada /etc/ssl/private/diti.me.key. A localização exata não importa, mas /etc/ssl/privateé onde o Debian as mantém.

Verifique se os dois arquivos pertencem e são legíveis pelo ssl-certgrupo, para que Postfix e Dovecot possam acessá-los. Adicione também as contas dos dois daemons a esse grupo usando gpasswd -a.

3. O Postfix gerado automaticamente pelo Debian também main.cfé um pouco confuso, então vou publicar uma versão mínima limpa:

# Informação do servidor
mydomain = diti.me
myorigin = $ meudomínio
  # Vários outros parâmetros usam essas duas variáveis ​​como valores padrão.

# Serviço SMTP
smtpd_tls_security_level = maio
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Isso permite que o STARTTLS seja usado em todas as conexões SMTP de entrada.
  # Note que o `postfix` deve ser adicionado ao grupo` ssl-cert` para poder
  # para acessar arquivos em / etc / ssl / private.

# Políticas
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0✨/104
  # Isso lista os endereços IP considerados "confiáveis" e que podem ser usados
  # este servidor envia e-mails para fora (ou seja, para outros domínios). Por
  # padrão, apenas "localhost" é permitido. De todo mundo, apenas o correio para
  # domínios em $ mydestination serão aceitos.
mydestination = $ meudomínio, host local
  # Lista de domínios para os quais aceitar emails, de qualquer endereço IP. 
# Entrega
alias_maps = hash: / etc / aliases
  # Isso mantém aliases em todo o sistema. É bom defini-lo explicitamente porque
  # o valor padrão às vezes inclui NIS, o que não faz sentido.
container_delimiter = +
  # Diz ao postfix para dividir a parte local dos endereços no primeiro '+',
  # assim chamado "mais-endereçamento": o correio enviado para diti + foo @ será entregue
  # para a caixa de correio diti @.

Para o Dovecot, o Debian apenas usa os exemplos de configuração padrão, e eles são bons o suficiente, com cada opção descrita.

Sempre que você alterar a configuração, recarregue daemons com postfix reloade / ou doveadm reload.

4. Por padrão, o Postfix envia mensagens para /var/mail/$USERo formato mbox , o que é bastante simples (você pode visualizá-lo facilmente com um editor de texto), mas possui muitos problemas, principalmente com IMAP, pois o arquivo inteiro deve ser reescrito sempre que você move um mensagem ou marque uma como "lida" ou "não lida".

Altere os dois daemons para usar o Maildir. (Existem outros formatos, mas eles tendem a ser específicos para o servidor MTA ou MDA ou IMAP ou o que for; o Maildir é amplamente suportado.)

Em /etc/postfix/main.cf, adicione o seguinte à seção "Entrega":

home_mailbox = Mail /

Configure o Dovecot para usar o mesmo caminho, em /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. Em algum momento, você precisa dizer ao Dovecot para usar SSL também. As definições relevantes estão em /etc/dovecot/conf.d/10-ssl.conf. De fato, o pacote Debian para Dovecot usa SSL, embora com um certificado autoassinado que seja praticamente inútil. Configure-o para usar seu próprio certificado:

ssl = yes

ssl_cert = </etc/ssl/private/diti.me-mail.pem
ssl_key = </etc/ssl/private/diti.me-mail.key

6. Agora você pode enviar e-mail para fora e recebê-lo. Ainda é necessário configurar o postfix para permitir que você enviar a partir de fora, conectando com o seu cliente de correio através de SMTP.

Primeiro, diga ao Postfix para usar o Dovecot para verificar os logins. As instruções a seguir são tiradas principalmente do wiki de Dovecot .

Dovecot /etc/dovecot/conf.d/10-master.confprecisa escutar em um soquete que o Postfix pode acessar; a configuração padrão já possui um exemplo comentado:

autenticação de serviço {
    ...
    unix_listener / var / spool / postfix / private / auth {
        mode = 0660
        usuário = postfix
        group = postfix
    }
    ...
}

E o Postfix precisa usá-lo - /etc/postfix/main.cfnovamente:

# Autenticação
smtpd_sasl_type = dovecot
smtpd_sasl_path = privado / autenticação
  # O outro tipo possível é "cyrus", para o Cyrus SASL 'saslauthd'
  # daemon. Eu escolhi o Dovecot aqui, pois ele funciona bem como um servidor SASL e
  # é mais simples deixá-lo lidar com autenticação para os dois daemons.

7. Observe que o acima não foi definido em smtpd_sasl_auth_enablenenhum lugar. A convenção atual é não habilitar a autenticação SMTP globalmente, mas manter o tcp / 25 unicamente como uma porta SMTP "servidor para servidor". Enquanto isso, novas mensagens dos usuários são aceitas pelo SMTP no tcp / 587, a porta "envio de email", que requer autenticação. Alguns ISPs até bloqueiam o tcp / 25 por causa de spam, mas mantêm o tcp / 587 aberto, pois geralmente é mais seguro.

Ative a porta "Envio" em /etc/postfix/master.cf, com autenticação SASL. O padrão master.cfjá possui as linhas necessárias que precisam ser removidas, embora algumas ainda devam ser deixadas de fora.

envio inet m - - - - smtpd
  -o syslog_name = postfix / envio
  -o smtpd_tls_security_level = encrypt
    # A porta "Submission" exigirá TLS, em vez de torná-la opcional
  -o smtpd_sasl_auth_enable = yes
    # ... bem como permitir que os usuários façam login.
# -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
    # Essas quatro opções podem ser deixadas comentadas; se ativado, eles
    # espere que você defina regras de restrição personalizadas em 'main.cf', mas o
    # os padrão estão bem.
  -o smtpd_recipient_restrictions = allow_sasl_authenticated, rejeitar
    # As destinatário_restricções padrão verificam o endereço IP e
    # $ mydestination. Para a porta "Submission", permita tudo desde
    # enquanto o usuário está conectado, mas rejeita todas as mensagens anônimas.
  -o milter_macro_daemon_name = ORIGINATING
    # Se você decidir posteriormente configurar um proxy DKIM ou algo assim, isso permitirá
    # distinguir os emails enviados pelos usuários dos recebidos.
    # Faz parte da configuração padrão, portanto, também inclui aqui.

Se você tiver um cliente de correio que exija uma porta "SSL implícita" do estilo antigo (tcp / 465), poderá descomentar as smtpslinhas master.cf- se precisar, mantenha as configurações semelhantes às da submissionporta.

8. Por fim, configure aliases para sua conta, editando /etc/aliases. O postmasteralias é basicamente necessário; é o ponto de contato se houver problemas com seu servidor de correio. Apontar roote outros aliases semelhantes também são bons.

O formato básico está documentado nos aliases (5):

postmaster: root
admin:      root
root:       diti
kra:        diti

Use postaliasou newaliasespara atualizar o banco de dados hash /etc/aliases.dbtoda vez que você editar este arquivo.

Agora, você ainda tem uma conta chamada ditiPostfix e Dovecot, mas as mensagens enviadas kra@...também são encaminhadas para lá. Alguns clientes de correio (por exemplo, Thunderbird) suportam várias "identidades" ou "personas" para um único servidor de correio, para que você possa selecionar entre diferentes endereços "De:".

É sobre isso. Posso retornar com instruções para procmail, domínios virtuais, SPF e / ou DKIM posteriormente.


1
Isso é ótimo ! É realmente o tutorial mais simples sobre hospedagem automática de email. A parte que mais me impressionou foi ver, no ponto 1, que eu já podia realmente enviar e receber e-mails de / para meu servidor. Enfim, vou editar sua mensagem para esclarecer alguns pontos também! No entanto, não consigo configurar meu email de fora (quero dizer Thunderbird). Estou usando mail.diti.me(= o endereço IP do meu servidor) para IMAP e SMTP, meu domínio já possui os registros MX. Fiz alguma coisa errada durante a configuração do meu servidor ou apenas tenho problemas com o Thunderbird?
Diti

@Diti: Parece que todas as portas relevantes (exceto tcp / 25) estão protegidas por firewall no seu servidor.
grawity

Qual deve ser a saída ps auxw | grep "dovecot"? Comparei com a configuração complexa de um dos meus amigos, e ele tem dovecot-authe imap-loginque eu não tenho. Seria possível que as portas estivessem realmente abertas (não me lembro de usar um firewall), mas sem um daemon configurado para ouvir essas portas de fora, ou algo assim? Quando eu corro openssl s_client -connect mail.diti.me:993no servidor, ele funciona (e diz "Dovecot ready".), Mas nada do lado de fora. Talvez eu deva tentar instalar um firewall e permitir explicitamente essas portas?
Diti

@Diti: Arquitetura do Dovecot mudou consideravelmente entre v1 e v2, então você vai ver diferentes processos - em v2, haverá dovecot, dovecot/anvil, dovecot/log, e outros. Além disso, alguns processos são iniciados apenas quando alguém se conecta ou apenas ao verificar detalhes de autenticação.
grawity

1
@Diti: Não, os dois daemons escutam em todas as interfaces e todos os endereços por padrão. Mas as conexões não estão sendo recusadas - em vez disso, o servidor silenciosamente descarta todas as tentativas de conexão (consulte a verificação do nmap à qual vinculei), que é um sinal claro de um firewall em algum lugar. Tente usar iptables -n -v -Lpara verificar se existem regras para descartar pacotes.
grawity
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.