Servicio de correo

Hoy vamos a proceder a instalar un servidor de correo en una máquina con Debian 8.8 resultante de una instalación mínima, con ssh, nada más.

Como servidor de correo SMTP vamos a utilizar Postfix y como servidor IMAP y POP3 vamos a utilizar Dovecot, hoy no voy a instalar ni webmail ni extras, buscaré la instalación más sencilla posible y un día si queréis nos metemos en ampliar esta instalación para dotarla de más caracterísitcas.

Simplemente aclarar que aunque trabaje en Neodigit en este post no explico como se instalan los seridores de correo en Neodigit pues esa es una tarea en la que no estoy involucrado porque yo hago otras cosas, así que no busquéis similitudes entre como lo cuento en este audio y cómo se instala en una base de 800 servidores, obviamente no se instala de la misma manera ni de la misma forma, una vez aclarado esto vamos a ir empezando.

Lo que vamos a hacer es instalar dovecot para imap y para pop3 y vamos a utilizar postfix para smtp.

apt install dovecot-core dovecot-imapd dovecot-lmtpd

Para instalar postfix primero desinstalaremos exim4

apt purge exim4 && apt install postfix postgrey postfix-policyd-spf-python

Al instalar postfix nos saldrá un wizard para configurarlo y tendremos varias opciones. Si queremos que sea un servidor público le diremos que es un «Sitio de Internet» y confraternaremos el FQDN y un par de preguntas más, así de fácil, de momento no tiene más problemática.

Otra cosa será preparar un certificado, que puede ser un Comodo, un Let’s Encrypt, uno autofirmado (no muy recomendable) o lo que queráis

openssl req -new -newkey rsa:2048 -nodes -keyout mail.ipv6.org.es.key -out mail.ipv6.org.es.csr
cp mail.ipv6.org.es.csr mail.ipv6.org.es.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
cat mail.ipv6.org.es.pem sub.class1.server.ca.pem > mail.ipv6.org.es.chain.crt
rm sub.class1.server.ca.pem 
chmod 644 mail.ipv6.org.es.chain.crt 
chmod 640 mail.ipv6.org.es.key 
mv mail.ipv6.org.es.chain.crt /etc/ssl/certs/
mv mail.ipv6.org.es.key /etc/ssl/certs/

Ahora configuraremos la primera parte de postfix e iremos a /etc/postfix/main.cf y pondremos nuestros datos en:

smtpd_tls_cert_file=/etc/ssl/certs/mail.ipv6.org.es.chain.crt
smtpd_tls_key_file=/etc/ssl/private/mail.ipv6.org.es.key
smtpd_use_tls=may

En mi caso además de cambiar los ficheros de certificados le he cambiado smtpd_use_tls de yes a may.

Y ahora pasamos a configurar dovecot, para ello utilizaremos la aplicación de dump de dovecot, que es doveconf y generaremos un fichero de configuración, así pues:

doveconf -n > /etc/dovecot/dovecot.conf

Y modificamos el fichero de dovecot.conf

Sustituyendo la línea ssl=no por las siguientes:

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
  }
}

ssl = required
ssl_ca = </etc/ssl/certs/ca-certificates.crt
ssl_cert = </etc/ssl/certs/mail.ipv6.org.es.chain.crt
ssl_key = </etc/ssl/certs/mail.ipv6.org.es.key

Y le decimos a systemd que no monitorice el puerto 143

# cp /lib/systemd/system/dovecot.socket /etc/systemd/system/
# systemctl reenable dovecot.socket
# sed -i '/:143$/s/^/#/' /etc/systemd/system/dovecot.socket

Comprobamos que estén los puertos accesibles

# systemctl restart postfix
# systemctl restart dovecot
# netstat -lnpt

Y probamos que todo funcione bien

$ openssl s_client -starttls smtp -crlf -connect <your_mail_server>:587
$ openssl s_client -connect <your_mail_server>:993

Ahora el siguiente paso será añadir autenticación para las cuentas

En /etc/postfix/main.cf añadiremos las siguientes líneas

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
# The path is relative to $queue_directory:
#   # postconf |grep queue_directory
#   queue_directory = /var/spool/postfix
smtpd_sasl_path = private/auth
# Do not accept SASL authentication over unencrypted connections
smtpd_tls_auth_only = yes

Y en /etc/dovecot/dovecot.conf las siguientes:
Cambiaremos

mail_location = mbox:~/mail:INBOX=/var/mail/%u

por

mail_location = maildir:/var/vmail/%d/%n

Cambiaremos

passdb {
  driver = pam
}

por

passdb {
  driver = passwd-file
  # The entire email address will be used as the username for email client.
  # Don't bother about the scheme here, will be overwritten by a strong scheme from file.
  #    (http://wiki2.dovecot.org/AuthDatabase/PasswdFile)
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

Y cambiaremos

userdb {
  driver = passwd
}

por

userdb {
  # For static type, LDA verify the user's existence by lookup passdb
  #   ( http://wiki2.dovecot.org/UserDatabase/Static )
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}

Ahora vamos a proceder a añadir el usuario de sistema vmail para empezar a crear cuentas de correo:

adduser --system --home /var/vmail --uid 550 --group --disabled-login vmail

Para generar la primera cuenta necesitamos poder generar la primera contraseña y lo haremos con la aplicación doveadm pw.

doveadm pw -s SHA512-CRYPT

Esto nos preguntará una contraseña y nos generará el código encriptado, por defecto se suele utiliza SHA512-CRYPT, pero BLF-CRYPT (blowfish) tiene una encriptación más fuerte.

Añadiremos al fiechero /etc/dovecot/users una línea del estilo:

edu@ipv6.org.es:{SHA512-CRYPT}$6$YbrPvVHPcgbzcaCu$ZFRJptczU8mfvXeUe5CzyECvSaPq4JaLSoPamm.pH73/BIoAjpmxMpZPdpsiwCwpTHa/MhSntksy0gmcK.Fko1

Pero antes arreglaremos los permisos:

# chmod 640 /etc/dovecot/users
# chown root:dovecot /etc/dovecot/users

Ahora vamos a terminar de configurar postfix y añadiremos encima de myhostname en main.cf de postfix la línea

mydomain = ipv6.org.es

Obviamente cada uno el suyo y si es necesario modificar las líneas de myhostname y de myorigin que por defecto viene en /etc/mailname, que yo lo tengo bien, pero hay mucha gente que prefiere forzarlo a mano.

Y ya solo nos quedará añadir al fichero dovecot.conf

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0666
   user = postfix
   group = postfix
  }
}

Ahora ya faltará la parte de DNS.

Para la configuración de DNS tenemos que tener en cuenta las entradas MX, los SPF y las resoluciones inversas.