¿La forma más sencilla de configurar un servidor de correo electrónico seguro, IMAP? [cerrado]

17

Me gustaría deshacerme de Google como proveedor de correo electrónico y configurar una solución de correo electrónico completa en mi servidor dedicado. El problema: deseo que la configuración sea lo más simple posible, para que no sea un problema configurar todo de nuevo si hay un problema.

Prerrequisitos

  • Solo una cuenta de usuario en la máquina.
    • (nombre diti; correo electrónico principal [email protected]; otros alias se redirigen, pero un cliente de correo electrónico puede administrar los diferentes alias y reaccionar en consecuencia)
  • Preferiblemente no usa MySQL.
    • (en el caso de la copia de seguridad y restauración de datos, así como por simplicidad, es mejor si uno no tiene que instalar y proteger MySQL antes de obtener un servidor de correo electrónico funcional)
  • Se puede acceder al correo electrónico (IMAP y SMTP) desde el exterior.
  • Cifrado SSL / TLS para autenticación IMAP y SMTP (estoy usando certificados CAcert , ¿importa?).

Creo que la simplicidad, el acceso IMAP / SMTP y la autenticación segura son las características "básicas" que todos los que desean abandonar Google o cualquier otra cosa desearían. Si me equivoco y hay una solución más simple (por ejemplo, una solución de tipo OwnCloud, con todo incluido), me encantaría saberlo.

Creo que la combinación de Postfix y Dovecot sería el camino a seguir. Por cierto, estoy ejecutando Debian.

La información que he encontrado hasta ahora

  • Un artículo francés describe en detalles muy largos cómo configurar una solución de correo electrónico completa y segura. Es largo, más difícil de mantener, más difícil de respaldar y restaurar, etc. Además, ¿es necesario un caché DNS?
  • El wiki de Gentoo ( Complete_Virtual_Mail_Server/SSL_Certificatespágina) menciona el uso de certificados CAcert, pero no lo tiene claro (¿son SubjectAltNamenecesarios todos esos subdominios?), Ni usa Postfix (he leído que Courier es más difícil).
  • Varios tutoriales sobre autohospedaje, todos diferentes, rara vez describen lo que están haciendo y por qué (el correo autohospedado con acceso remoto parece complicado de configurar, entonces, ¿por qué simplemente proporcionar una lista de comandos sin explicación para "tontos"?) .

Espero haber preguntado las cosas correctas, y que no sean demasiado tontas.

Diti
fuente
1
¿Alguna idea de cómo se podría reformular y reabrir esta pregunta?
Diti

Respuestas:

19
  • No, no es necesario configurar una caché de DNS en el servidor. El servidor debe usar un dispositivo de resolución DNS de almacenamiento en caché que esté cerca, pero la mayoría de las empresas de hosting ya ejecutan sus propios dispositivos de resolución para todo el centro de datos y configuran servidores para usarlos de manera predeterminada.

  • Por defecto, tanto Postfix como Dovecot usan cuentas locales para todo. Si tiene una cuenta de Linux con nombre diti, puede iniciar sesión en Dovecot con ella, y puede configurar Postfix para validar los inicios de sesión SMTP en Dovecot .

  • Si está de acuerdo en hacer que todo el correo vaya a la misma cuenta, puede configurar alias simples (como en /etc/aliases) para redirigir el correo hacia kra@o postmaster@hacia la diticuenta.

  • Todos esos subjectAltNames no son necesarios. Los únicos que necesita son los nombres de dominio que realmente va a usar , por ejemplo, mail.diti.meo glaux.diti.me. No estoy seguro si necesita incluir el dominio en sí (es decir diti.me).


Lo siguiente supone que el dominio ya tiene registros MX configurados para apuntar a este servidor. Generalmente trato de mantener mi configuración razonablemente clara, ya que siempre termino preguntándome "para qué demonios es esto" unos meses más tarde.

1. Primero, instale los paquetes postfixy dovecot-imapd. Cuando se le solicite sobre la configuración de Postfix, seleccione la opción "Sitio de Internet" e ingrese diti.mecomo el nombre del correo. En este punto, ya puede enviar y recibir correo como [email protected], y probablemente incluso conectarse a IMAP.

Sin embargo, todavía no tiene SSL, ni permite enviar correo a través de SMTP desde el exterior, ni un lugar sensato para almacenar correo (el valor predeterminado es un archivo mbox /var/mail, que no es confiable y ofrece un mal rendimiento, especialmente con IMAP).

2. Si ya tiene un certificado SSL, póngalo /etc/ssl/private/diti.me.pemy la clave privada /etc/ssl/private/diti.me.key. La ubicación exacta en realidad no importa, pero /etc/ssl/privatees donde Debian los guarda.

Asegúrese de que ambos archivos sean propiedad y legibles por el ssl-certgrupo, para que Postfix y Dovecot puedan acceder a ellos. Agregue también las cuentas de ambos demonios a ese grupo usando gpasswd -a.

3. El Postfix generado automáticamente por Debian también main.cfes un poco desordenado, así que voy a publicar una versión mínima limpiada:

# Información del servidor
midominio = diti.me
myorigin = $ mydomain
  # Varios otros parámetros usan estas dos variables como valores predeterminados.

# Servicio SMTP
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # Esto permite que STARTTLS se use en todas las conexiones SMTP entrantes.
  # Tenga en cuenta que `postfix` debe agregarse al grupo` ssl-cert` para poder
  # para acceder a archivos en / etc / ssl / private.

# Políticas
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0font>/104
  # Esto enumera las direcciones IP que se consideran "confiables" y pueden usar
  # este servidor para enviar correo al exterior (es decir, a otros dominios). Por
  # predeterminado, solo se permite "localhost". De todos los demás, solo envíe un correo a
  Se aceptarán # dominios en $ mydestination.
mydestination = $ mydomain, localhost
  # Lista de dominios para aceptar correo, desde cualquier dirección IP. 
# Entrega
alias_maps = hash: / etc / aliases
  # Esto mantiene los alias de todo el sistema. Es bueno establecerlo explícitamente porque
  # el valor predeterminado a veces incluye NIS, lo que no tiene sentido.
recipiente_delimitador = +
  # Indica a postfix que divida la parte local de las direcciones en el primer '+',
  # llamado "direccionamiento positivo": se enviará el correo enviado a diti + foo @
  # al buzón diti @.

Para Dovecot, Debian solo usa las configuraciones de ejemplo predeterminadas, y son lo suficientemente buenas, con cada opción descrita.

Cada vez que cambie la configuración, vuelva a cargar demonios con postfix reloady / o doveadm reload.

4. De forma predeterminada, Postfix entrega el correo /var/mail/$USERen formato mbox , que es bastante simple (puede verlo fácilmente con un editor de texto) pero tiene muchos problemas, especialmente con IMAP, ya que todo el archivo debe reescribirse cada vez que mueve un archivo. mensaje o incluso marcar uno como "leído" o "no leído".

Cambia ambos demonios para usar Maildir. (Hay otros formatos, pero tienden a ser específicos para el servidor MTA o MDA o IMAP o lo que sea; Maildir es ampliamente compatible).

En /etc/postfix/main.cf, agregue lo siguiente a la sección "Entrega":

home_mailbox = Correo /

Configure Dovecot para usar la misma ruta, en /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir: ~ / Mail

5. En algún momento, necesita decirle a Dovecot que use SSL también. Las configuraciones relevantes están en /etc/dovecot/conf.d/10-ssl.conf. De hecho, el paquete Debian para Dovecot ya usa SSL, aunque con un certificado autofirmado que es inútil en su mayoría. Configúrelo para usar su propio certificado:

ssl = yes

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

6. Ahora puede enviar correo al exterior y recibirlo. Todavía es necesario configurar Postfix para permitirle enviar desde el exterior conectándose con su cliente de correo a través de SMTP.

Primero dígale a Postfix que use Dovecot para verificar los inicios de sesión. Las siguientes instrucciones se toman principalmente de la wiki de Dovecot .

Dovecot /etc/dovecot/conf.d/10-master.confnecesita escuchar en un socket al que Postfix pueda acceder; la configuración predeterminada ya tiene un ejemplo comentado:

servicio de autenticación {
    ...
    unix_listener / var / spool / postfix / private / auth {
        modo = 0660
        usuario = postfix
        grupo = postfix
    }
    ...
}

Y Postfix necesita usarlo, /etc/postfix/main.cfnuevamente:

# Autenticación
smtpd_sasl_type = palomar
smtpd_sasl_path = privado / autenticación
  # El otro tipo posible es "cyrus", para el 'saslauthd' de Cyrus SASL
  # demonio. Elijo Dovecot aquí porque funciona bien como servidor SASL, y
  # es más simple dejar que maneje la autenticación para ambos demonios.

7. Observe que lo anterior no se estableció en smtpd_sasl_auth_enableningún lado. La convención actual es no habilitar la autenticación SMTP globalmente, sino mantener tcp / 25 simplemente como un puerto SMTP "servidor a servidor". Mientras tanto, se aceptan nuevos mensajes de los usuarios a través de SMTP en tcp / 587, el puerto de "envío de correo", que requiere autenticación. Algunos ISP incluso bloquean tcp / 25 debido a spam, pero mantienen abierto tcp / 587 ya que generalmente está mejor protegido.

Habilite el puerto "Envío" en /etc/postfix/master.cf, con autenticación SASL. El valor predeterminado master.cfya tiene las líneas necesarias que solo necesitan no ser comentadas, aunque algunas de ellas aún deben omitirse.

envío inet n - - - - smtpd
  -o syslog_name = postfix / submit
  -o smtpd_tls_security_level = encrypt
    # El puerto "Sumisión" requerirá TLS, en lugar de hacerlo opcional
  -o smtpd_sasl_auth_enable = yes
    # ... además de permitir que los usuarios inicien sesión.
# -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
    # Estas cuatro opciones pueden dejarse comentadas; si está habilitado, lo harían
    # espera que establezca reglas de restricción personalizadas en 'main.cf', pero el
    # los predeterminados están bien.
  -o smtpd_recipient_restrictions = permit_sasl_authenticated, rechazar
    # Las destinaciones predeterminadas_restricciones comprueban la dirección IP y
    # $ mydestination. Para el puerto "Sumisión", permita todo mientras
    # cuando el usuario ha iniciado sesión, pero rechaza todo el correo anónimo.
  -o milter_macro_daemon_name = ORIGINANDO
    # Si luego decide configurar un proxy DKIM o similar, esto permitirá
    # para distinguir los correos enviados por el usuario de los recibidos.
    # Es parte de la configuración predeterminada, por lo tanto, también se incluye aquí.

Si tiene un cliente de correo que requiere un puerto "SSL implícito" de estilo antiguo (tcp / 465), puede descomentar las smtpslíneas master.cf; si es así, mantenga una configuración similar a la del submissionpuerto.

8. Finalmente configure alias para su cuenta, editando /etc/aliases. El postmasteralias es básicamente requerido; es el punto de contacto si hay problemas con su servidor de correo. Señalar rooty otros alias similares también es bueno.

El formato básico está documentado en alias (5):

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

Use postaliaso newaliasespara actualizar la base de datos hash /etc/aliases.dbcada vez que edite este archivo.

Ahora, todavía tiene una cuenta llamada ditien lo que respecta a Postfix y Dovecot, pero el correo enviado kra@...también se reenvía allí. Algunos clientes de correo (por ejemplo, Thunderbird) admiten múltiples "identidades" o "personas" para un solo servidor de correo, por lo que puede seleccionar entre diferentes direcciones "De:".

Eso es todo. Podría regresar con instrucciones para procmail, dominios virtuales, SPF y / o DKIM más adelante.

usuario1686
fuente
1
¡Esto es genial ! Realmente es el tutorial más simple sobre el autohospedaje de correo electrónico. La parte que más me sorprendió fue ver, en el punto 1, que ya podía enviar y recibir correos electrónicos desde / hacia mi servidor. De todos modos, ¡también editaré su mensaje para aclarar algunos puntos! Sin embargo, no puedo configurar mi correo electrónico desde el exterior (me refiero a Thunderbird). Estoy usando mail.diti.me(= la dirección IP de mi servidor) para IMAP y SMTP, mi dominio ya tiene los registros MX. ¿He hecho algo mal durante la configuración de mi servidor o solo tengo problemas con Thunderbird?
Diti
@Diti: Parece que todos los puertos relevantes (excepto tcp / 25) tienen firewall en su servidor.
user1686
¿Cuál debería ser la salida de ps auxw | grep "dovecot"ser? Comparé contra la compleja configuración de uno de mis amigos, y él tiene dovecot-authy imap-logineso no tengo. ¿Podría ser posible que los puertos estén realmente abiertos (no recuerdo usar un firewall), pero sin un demonio configurado para escuchar esos puertos desde el exterior, o algo así? Cuando ejecuto openssl s_client -connect mail.diti.me:993en el servidor, funciona (y dice "Dovecot ready"), pero nada desde el exterior. ¿Quizás debería intentar instalar un firewall y permitir explícitamente esos puertos?
Diti
@Diti: la arquitectura de Palomar cambió considerablemente entre V1 y V2, por lo que verá procesos diferentes - en la versión 2, no habrá dovecot, dovecot/anvil, dovecot/log, y otros. Además, algunos procesos solo se inician cuando alguien se conecta, o solo cuando se verifican los detalles de autenticación.
user1686
1
@Diti: No, ambos demonios escuchan en todas las interfaces y todas las direcciones de forma predeterminada. Pero las conexiones no se rechazan ; más bien, el servidor descarta silenciosamente todos los intentos de conexión (vea el escaneo nmap al que me vinculé), que es un signo seguro de un firewall en alguna parte. Intente usar iptables -n -v -Lpara verificar si hay alguna regla para descartar paquetes.
user1686