Il modo più semplice per configurare un server di posta elettronica IMAP sicuro? [chiuso]


17

Vorrei sbarazzarmi di Google come provider di posta elettronica e impostare una soluzione di posta elettronica completa sul mio server dedicato. Il problema: desidero che l'installazione sia il più semplice possibile, in modo che non sia un problema impostare nuovamente tutto in caso di problemi.

Prerequisiti

  • Solo un account utente sulla macchina.
    • (nome diti; e-mail principale kra@diti.me; altri alias vengono reindirizzati ma un client di posta elettronica può gestire i diversi alias e reagire di conseguenza)
  • Preferibilmente non usa MySQL.
    • (in caso di backup e ripristino dei dati e per semplicità, è meglio se non è necessario installare e proteggere MySQL prima di ottenere un server di posta elettronica funzionale)
  • L'e-mail è accessibile (IMAP e SMTP) dall'esterno.
  • Crittografia SSL / TLS per l'autenticazione IMAP e SMTP (sto usando i certificati CAcert , importa?).

Credo che la semplicità, l'accesso IMAP / SMTP e l'autenticazione sicura siano le funzionalità "di base" che tutti vorrebbero lasciare Google / qualunque altra cosa. Se mi sbaglio e c'è una soluzione più semplice (ad esempio una soluzione simile a OwnCloud, con tutto incluso), sarei felice di sentire.

Penso che la combinazione di Postfix e Dovecot sarebbe la strada da percorrere. A proposito, sto eseguendo Debian.

Le informazioni che ho trovato finora

  • Un articolo francese descrive in molto lunga dettagli come impostare una soluzione sicura e-mail completo. È lungo, più difficile da mantenere, più difficile da eseguire il backup e il ripristino, ecc. Inoltre, è necessaria una cache DNS?
  • Il wiki di Gentoo ( Complete_Virtual_Mail_Server/SSL_Certificatespagina) menziona l'uso dei certificati CAcert, ma non ne è chiaro (sono SubjectAltNamenecessari tutti quei sottodomini?), Né utilizza Postfix (ho letto che Courier è più difficile).
  • Vari tutorial sull'auto-hosting, tutti diversi, che descrivono raramente cosa stanno facendo e perché (e-mail self-hosted con accesso remoto sembra complicata da configurare, quindi perché fornire un elenco di comandi senza spiegazioni per "manichini?") .

Spero di aver chiesto le cose giuste e che non siano troppo sciocche.


1
Qualche idea su come questa domanda possa essere riformulata e riaperta?
Diti,

Risposte:


19
  • No, non è necessario impostare una cache DNS sul server. Il server dovrebbe usare un resolver DNS di cache che si trova da qualche parte nelle vicinanze, ma la maggior parte delle società di hosting esegue già i propri resolver per l'intero data center e configura i server per usarli per impostazione predefinita.

  • Per impostazione predefinita, Postfix e Dovecot utilizzano account locali per tutto. Se hai un account Linux nominato diti, puoi accedere a Dovecot con esso e puoi impostare Postfix per convalidare gli accessi SMTP su Dovecot .

  • Se stai bene facendo in modo che tutta la posta vada sullo stesso account, puoi impostare alias semplici (come in, /etc/aliases) per reindirizzare la posta verso kra@o postmaster@verso l' ditiaccount.

  • Tutti questi subjectAltNames non sono necessari. Gli unici che serve è per i nomi di dominio che si vuole effettivamente utilizzare , ad esempio, mail.diti.meo glaux.diti.me. Non sono sicuro se è necessario includere il dominio stesso (ovvero diti.me).


Di seguito si presume che il dominio abbia già record MX configurati per puntare a questo server. In genere cerco di mantenere ragionevolmente chiara la mia configurazione, dato che finisco sempre per chiedermi "che diavolo è questo" qualche mese dopo.

1. Innanzitutto, installa i pacchetti postfixe dovecot-imapd. Quando viene richiesto di configurare Postfix, selezionare l'opzione "Sito Internet" e immettere diti.mecome nome di posta. A questo punto, puoi già inviare e ricevere posta come diti@diti.mee probabilmente anche connetterti a IMAP.

Tuttavia, non ha ancora SSL, né consente l'invio di posta tramite SMTP dall'esterno, né un luogo sano per l'archiviazione della posta (il valore predefinito è un file mbox /var/mail, che non è affidabile e offre prestazioni scadenti, specialmente con IMAP).

2. Se hai già un certificato SSL, inseriscilo e inserisci /etc/ssl/private/diti.me.pemla chiave privata /etc/ssl/private/diti.me.key. La posizione esatta non ha importanza, ma /etc/ssl/privateè dove Debian li tiene.

Assicurati che entrambi i file siano di proprietà e leggibili dal ssl-certgruppo, in modo che Postfix e Dovecot possano accedervi. Aggiungi anche gli account di entrambi i demoni a quel gruppo usando gpasswd -a.

3. Anche Postfix generato automaticamente da Debian main.cfè un po 'un casino, quindi pubblicherò solo una versione minimale ripulita:

# Informazioni sul server
miodominio = diti.me
myorigin = $ miodominio
  # Vari altri parametri usano queste due variabili come valori predefiniti.

# Servizio SMTP
smtpd_tls_security_level = maggio
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Ciò consente a STARTTLS di essere utilizzato su tutte le connessioni SMTP in entrata.
  # Notare che `postfix` deve essere aggiunto al gruppo` ssl-cert` per poterlo abilitare
  # per accedere ai file in / etc / ssl / private.

# Politiche
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0 lasting/104
  # Questo elenca gli indirizzi IP considerati "affidabili" e che possono essere utilizzati
  # questo server per inviare posta all'esterno (ovvero verso altri domini). Di
  # default, è consentito solo "localhost". Da tutti gli altri solo posta a
  # domini in $ mydestination saranno accettati.
mydestination = $ miodominio, localhost
  # Elenco dei domini per cui accettare la posta, da qualsiasi indirizzo IP. 
# Consegna
alias_maps = hash: / etc / aliases
  # Questo mantiene gli alias a livello di sistema. È bene impostarlo esplicitamente perché
  # il valore predefinito a volte include NIS, il che non ha senso.
recipient_delimiter = +
  # Indica a postfix di dividere la parte locale degli indirizzi al primo '+',
  # cosiddetto "indirizzo positivo": la posta inviata a diti + foo @ verrà recapitata
  # alla cassetta postale diti @.

Per Dovecot, Debian usa solo le configurazioni di esempio predefinite e sono abbastanza buone, con ogni opzione descritta.

Ogni volta che modifichi la configurazione, ricarica i demoni con postfix reloade / o doveadm reload.

4. Per impostazione predefinita, Postfix consegna la posta /var/mail/$USERnel formato mbox , che è abbastanza semplice (puoi visualizzarlo facilmente con un editor di testo) ma ha molti problemi, specialmente con IMAP, poiché l'intero file deve essere riscritto ogni volta che sposti un messaggio o anche segnarne uno come "letto" o "non letto".

Cambia entrambi i demoni per usare Maildir. (Esistono altri formati, ma tendono ad essere specifici per il server MTA o MDA o IMAP o altro; Maildir è ampiamente supportato.)

In /etc/postfix/main.cf, aggiungi quanto segue alla sezione "Consegna":

home_mailbox = Posta /

Configura Dovecot per utilizzare lo stesso percorso, in /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. Ad un certo punto, devi dire a Dovecot di usare anche SSL. Sono presenti le impostazioni pertinenti /etc/dovecot/conf.d/10-ssl.conf. In effetti, il pacchetto Debian per Dovecot utilizza già SSL, sebbene con un certificato autofirmato che è per lo più inutile. Configuralo per usare il tuo certificato:

ssl = si

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

6. Ora puoi inviare la posta all'esterno e riceverla. E 'ancora necessario configurare Postfix per consentire di inviare da esterno tramite la connessione con il client di posta tramite SMTP.

Dì innanzitutto a Postfix di utilizzare Dovecot per verificare gli accessi. Le seguenti istruzioni sono per lo più tratte dal wiki di Dovecot .

Dovecot ha /etc/dovecot/conf.d/10-master.confbisogno di ascoltare su un socket a cui Postfix potrebbe accedere; la configurazione predefinita ha già un esempio commentato:

servizio auth {
    ...
    unix_listener / var / spool / postfix / private / auth {
        modalità = 0660
        utente = postfisso
        gruppo = postfisso
    }
    ...
}

E Postfix deve usarlo di /etc/postfix/main.cfnuovo:

# Autenticazione
smtpd_sasl_type = dovecot
smtpd_sasl_path = private / auth
  # L'altro tipo possibile è "cyrus", per "saslauthd" di Cyrus SASL
  # demone. Ho scelto Dovecot qui poiché funziona bene come server SASL e
  # è solo più semplice lasciarlo gestire l'autenticazione per entrambi i demoni.

7. Si noti che quanto sopra non è impostato da smtpd_sasl_auth_enablenessuna parte. La convenzione attuale non è quella di abilitare l'autenticazione SMTP a livello globale, ma di mantenere tcp / 25 esclusivamente come porta SMTP "da server a server". Nel frattempo, i nuovi messaggi degli utenti vengono accettati tramite SMTP su tcp / 587, la porta di "invio della posta", che richiede l'autenticazione. Alcuni ISP bloccano persino tcp / 25 a causa dello spam, ma mantengono aperto tcp / 587 poiché di solito è meglio protetto.

Abilitare la porta "Invio" in /etc/postfix/master.cf, con autenticazione SASL. L'impostazione predefinita master.cfha già le righe necessarie che devono solo essere non commentate, anche se alcune di esse dovrebbero essere ancora escluse.

invio inet n - - - - smtpd
  -o nome_syslog = postfisso / invio
  -o smtpd_tls_security_level = crittografare
    # La porta "Sottomissione" richiederà TLS, invece di renderla facoltativa
  -o smtpd_sasl_auth_enable = yes
    # ... oltre a consentire agli utenti di accedere.
# -o smtpd_reject_unlisted_recipient = no
# -o smtpd_client_rest restrizioni = $ mua_client_rest restrizioni
# -o smtpd_helo_rest restrizioni = $ mua_helo_rest restrizioni
# -o smtpd_sender_rest restrizioni = $ mua_sender_rest restrizioni
    # Queste quattro opzioni possono essere lasciate commentate; se abilitato, lo farebbero
    # prevede di impostare regole di restrizione personalizzate in "main.cf", ma il file
    # quelli di default vanno bene.
  -o smtpd_recipient_rest restrizioni = permesso_autenticazione autenticata, rifiuto
    # Le restrizioni recipient_ predefinite controllano l'indirizzo IP e
    # $ mydestination. Per la porta "Sottomissione", consentire tutto il tempo necessario
    # poiché l'utente ha effettuato l'accesso, ma rifiuta tutta la posta anonima.
  -o milter_macro_daemon_name = ORIGINANTE
    # Se in seguito decidi di impostare un proxy DKIM o simili, ciò consentirà
    # per distinguere i messaggi inviati dagli utenti da quelli ricevuti.
    # Fa parte della configurazione predefinita, quindi inclusa anche qui.

Se si dispone di un client di posta che richiede una porta "implicita SSL" di vecchio stile (tcp / 465), è possibile decommentare le smtpslinee; in master.cftal caso, mantenere le impostazioni simili a submissionquelle della porta.

8. Infine imposta gli alias per il tuo account, modificando /etc/aliases. L' postmasteralias è sostanzialmente richiesto; è il punto di contatto se ci sono problemi con il tuo server di posta. Anche il puntamento roote altri alias simili sono buoni.

Il formato di base è documentato in alias (5):

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

Utilizzare postaliaso newaliasesper aggiornare il database con hash /etc/aliases.dbogni volta che si modifica questo file.

Ora, hai ancora un account chiamato per ditiquanto riguarda Postfix e Dovecot, ma anche la posta inviata a kra@...viene inoltrata lì. Alcuni client di posta (ad es. Thunderbird) supportano più "identità" o "personas" per un singolo server di posta, quindi puoi scegliere tra diversi indirizzi "Da:".

Questo è tutto. Potrei tornare più tardi con le istruzioni per procmail, domini virtuali, SPF e / o DKIM.


1
Questo è fantastico ! È davvero il tutorial più semplice sull'auto-hosting di e-mail. La parte che mi ha stupito di più è stata vedere, al punto 1, che potevo effettivamente già inviare e ricevere e-mail dal / al mio server. Ad ogni modo, modificherò il tuo messaggio per chiarire anche alcuni punti! Tuttavia, non riesco a configurare la mia e-mail dall'esterno (intendo Thunderbird). Sto usando mail.diti.me(= l'indirizzo IP del mio server) sia per IMAP che per SMTP, il mio dominio ha già i record MX. Ho fatto qualcosa di sbagliato durante l'installazione del mio server o ho solo problemi con Thunderbird?
Diti,

@Diti: sembra che tutte le porte rilevanti (tranne tcp / 25) siano protette da firewall sul tuo server.
user1686

Quale dovrebbe essere l'output di ps auxw | grep "dovecot"essere? Ho confrontato con una complessa configurazione dei miei amici, e lui ha dovecot-authe imap-loginche io non ho. Potrebbe essere possibile che le porte siano effettivamente aperte (non mi ricordo di aver usato un firewall), ma senza un demone impostato per ascoltare quelle porte dall'esterno, o qualcosa del genere? Quando corro openssl s_client -connect mail.diti.me:993sul server, funziona (e dice "Dovecot ready."), Ma niente dall'esterno. Forse dovrei provare a installare un firewall e consentire esplicitamente quelle porte?
Diti,

@Diti: architettura di Dovecot cambiato notevolmente tra V1 e V2, così vedrete diversi processi - in v2, ci saranno dovecot, dovecot/anvil, dovecot/log, e altri. Inoltre, alcuni processi vengono avviati solo quando qualcuno si connette o solo durante la verifica dei dettagli di autenticazione.
user1686

1
@Diti: No, entrambi i demoni ascoltano su tutte le interfacce e tutti gli indirizzi per impostazione predefinita. Ma le connessioni non vengono rifiutate - piuttosto, il server elimina silenziosamente tutti i tentativi di connessione (vedere la scansione nmap a cui mi sono collegato), che è un segno sicuro di un firewall da qualche parte. Prova a usare iptables -n -v -Lper verificare se ci sono regole per eliminare i pacchetti.
user1686
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.