Crear un servidor de correo en GNU Linux desde cero

En la web ya hemos tratado servicios de correo, concretamente la instalación y configuración de relay de correo con Postfix, tanto con cuentas de gmail como de Office365. El problema es que dicho servicio sólo funciona para los envíos utilizando smtp. Hoy veremos como instalar un servidor de correo desde cero, utilizando los programas de software libre, Postifx, Dovecot y SpamAssasin, sobre un servidor Ubuntu.

cluster-photo-nial-bradshaw

Adquisición de un dominio económico

Antes de nada necesitamos adquirir un dominio, si puede ser económico mejor, ya que lo necesitaremos para el sistema de correo. Para la ocasión he realizado una pequeña adquisición del nombre ochobitsunbyte.pw, por sólo 3 euros y pico al año. Para ellos he utilizado los servicios de namecheap.com, como podéis ver en la imagen.

namecheap-servidor-correo-01

Primero de todo tenemos que averiguar si el dominio está disponible, para ello utilizaremos el buscador.

namecheap-servidor-correo-02

Los dominios .pw son muy económicos, por lo que para el tutorial me irá de perlas.

namecheap-servidor-correo-03

Tal y como vemos en la imagen, añadido al dominio nos ofrecen servicio de Whois anónimo llamado “Free WhoisGuard“, de manera gratuita, por lo que nos irá genial para que nuestros datos no sean públicos. Al confirmar la orden nos enviará a la pasarela de pago, que en mi caso es vía paypal. Una vez adquirido ya podemos pasar a la siguiente parte.

Contratar un VPS

Para el tutorial y para un uso todavía por determinar por mi parte, contrataremos un VPS, es decir, un servidor privado virtual en la nube, esto es, en una granja de servidores situada en alguna parte del planeta. Para ello utilizaremos la web digitalocean.com, con la que tengo muy buena experiencia, desde hace más de un año. Para ello nos iremos a la web.

digitalocean-servidor-correo-01

Yo ya tengo creada una cuenta, que por cierto es gratuita. En el siguiente paso crearemos un VPS o Droplet. Escogeremos un pequeño con 512 MB de memoria, 20 GB de disco duro y 1 núcleo, más que suficiente. Con un sistema operativo con Ubuntu 12.04

En la primera parte tenemos que escoger el nombre para el servidor, en mi caso será correo.ochobitsunbyte.pw, escogemos el servidor con las características que he comentado antes, que tiene un coste de 5 eur al mes.

digitalocean-servidor-correo-02

A continuación elegimos la ubicación del centro de datos. Si vivimos en Europa recomiendo un centro de datos en dicho continente, ya que tiene unas leyes menos invasivas como por ejemplo las de Estados Unidos.

digitalocean-servidor-correo-03

He escogido la ubicación geográfica de Frankfurt en Alemania. En el siguiente paso elegimos el sistema operativo. He escogido Ubuntu en su versión 12.04 de 64 bits. La razón por la que no he escogido Debian, que es mi distribución favorita, es que cuando he realizado la instalación (llevo varios días haciendo pruebas), cuando tenía todo instalado un bug del sistema con el servicio Dovecot me ha fastidiado la fiesta. Dicha versión de Ubuntu es una versión fiable para el fin de ésta guía.

En el último paso podemos seleccionar una llave ssh, en nuestro caso no lo haremos, aunque podéis ver los nombres de las llaves que hasta ahora he ido creando para otros servidores.  También podemos añadir una red interna, servicios de copias de seguridad, etcétera.

digitalocean-servidor-correo-05

Y apretamos el botón “Create Droplet

Al crear el servidor nos llegarán las credenciales a nuestro correo electrónico, para así poder acceder por ssh. La clave que nos envíen la tendremos que cambiar de manera obligatorio al acceder por primera vez.

Para quien esté interesado en utilizar DigitalOcean, puede utilizar el siguiente código promocional y obtener un descuento de 10 USD

Primeros pasos con el servidor

Al acceder vía ssh, debemos cambiar la contraseña. Recomiendo utilizar una contraseña de al menos 8 dígitos y que no sea habitual, podemos utilizar el programa pwgen del que ya hablamos en su día, ya que es una fantástica herramienta de creación de contraseñas.

Otro paso importante para segurizar nuestro servidor es cambiar el puerto por defecto del servicio ssh, tema que también tratamos en otro artículo, también podemos limitar el tiempo de conexión.

Actualizamos las fuentes y los paquetes del servidor a la última versión:

1
apt-get -y update
1
apt-get -y upgrade

De ésta manera ya podemos empezar a instalar nuestro servidor de correo.

Requisitos mínimos para el funcionamiento del servidor

Para que todo nos funcione a la perfección primero de todo debemos utilizar un nombre FQDN correcto. Para ello primero modificamos el archivo /etc/hosts y deberá quedar así:

1
2
3
127.0.0.1   localhost
127.0.1.1   correo.ochobitsunbyte.pw correo
nuestra.ip  correo.ochobitsunbyte.pw correo

En la última línea debemos sustituir “nuestra.ip” por la IP del servidor.

Otro requisito para el servidor será tener instalado un servicio de base de datos MYSQL Recordar que al instalarlo nos pedirá otra vez una contraseña, es importante que no sea la misma que la del servidor.

Instalamos los paquetes:

1
apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

Debemos securizar nuestro servicio de base de datos, siguiendo los pasos del comando:

1
/usr/bin/mysql_secure_installation

Instalación de Postfix y Dovecot

De Postfix ya hemos hablado mucho en la web. Simplificando se trata de una herramienta para la gestión del correo, mucho más segura y avanzada que otras “marcas” propietarias. Dovecot se trata de un servicio  IMAP y POP3 para sistemas GNU Linux, que pone especial hincapié en la seguridad. Todo ello combinado con MYSQL, que ya hemos instalado antes, y que hará que la combinación de los tres tengamos un servidor de correo muy completo.

Realizamos la instalación de los paquetes:

1
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql

Nos aparecerá una pantalla donde nos preguntará que tipo de servidor de correo queremos, escogemos “Servidor de Internet

postfix-dovecot-ubuntu-001

El siguiente paso le decimos el nombre cualificado para el servidor:

postfix-dovecot-ubuntu-002

Creación de la base de datos MYSQL

Antes de finalizar la instalación un paso muy importante es crear la base de datos con la que trabajará el sistema de correo. Al igual que en otros casos debemos de llamar a la base de datos con un nombre poco común. Llamaré a la base de datos ‘cronos

De la siguiente manera:

1
mysqladmin -p create cronos

Y a continuación accedemos a la consola MYSQL

1
mysql -u root -p

Una vez dentro crearemos un nuevo usuario que tendrá privilegios sobre la base de datos ‘cronos‘. A dicho usuario le llamaremos ‘fantastes‘, con nueva contraseña diferente de la de root.

1
GRANT SELECT ON cronos.* TO 'fantastes'@'127.0.0.1' IDENTIFIED BY 'contraseña';

Y recargamos los privilegios:

1
FLUSH PRIVILEGES;

Y accedemos la base de datos:

1
USE cronos;

Crearemos una nuevo tabla para los dominios virtuales de correo:

1
2
3
4
5
CREATE TABLE `virtual_domains` (
`id`  INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ahora creamos otra tabla con los datos de los usuarios, correos electrónicos y contraseñas:

1
2
3
4
5
6
7
8
9
CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Como cualquier servidor de correo que se precie también crearemos una tabla para los “alias”, es decir, para las redirecciones de correo:

1
2
3
4
5
6
7
8
CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` VARCHAR(100) NOT NULL,
`destination` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Otro paso importante es insertar los servidores virtuales con los que vamos a trabajar, recordar que tienen que cumplir con las normas FQDN. En nuestro caso será por una parte el nombre de dominio ochobitsunbyte.pw y por el otro el nombre del servidor correo.ochobitsunbyte.pw

De la siguiente manera:

1
2
3
4
5
INSERT INTO `cronos`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'ochobitsunbyte.pw'),
('2', 'correo.ochobitsunbyte.pw');

Ahora añadiremos un correo, con el realizaremos pruebas de funcionamiento a posteriori.

1
2
3
4
INSERT INTO `cronos`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('contraseña', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'davidochobits@ochobitsunbyte.pw');

Y por último los “Aliases” o redirecciones, en éste caso sólo añadiremos una ficticia.

1
2
3
4
INSERT INTO `cronos`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@ochobitsunbyte.pw', 'davidochobits@ochobitsunbyte.pw');

Por ésta parte ya hemos acabado. Podemos salir con ‘exit

Configurar Postfix

Ahora nos toca configurar Postfix. Guardamos el fichero de configuración original:

1
mv /etc/postfix/main.cf /etc/postfix/main.cf.back

Y creamos uno nuevo utilizando nuestro editor favorito, en mi caso nano:

1
nano /etc/postfix/main.cf

Utilizaremos los certificador SSL gratuitos disponibles en el sistema, para ellos añadimos éstas primeras líneas:

1
2
3
4
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

Y añadimos:

1
2
3
4
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

Decidimos que no queremos conexiones anónimas:

1
smtp_sasl_security_options = noanonymous

Y los datos referentes a nuestro de dominio y servidor:

1
2
mydestination = localhost
myhostname = correo.ochobitsunbyte.pw

Indicamos que vamos a utilizar los servidores virtuales indicados en la tabla de la base de datos:

1
virtual_transport = lmtp:unix:private/dovecot-lmtp

Por último añadimos las ubicaciones de los ficheros configuración para los dominios, usuarios y alias.

1
2
3
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Y comenzamos a editar los ficheros de configuración. Creamos el fichero “mysql-virtual-mailbox-domains.cf

1
nano /etc/postfix/mysql-virtual-mailbox-domains.cf

Y añadimos en el fichero:

1
2
3
4
5
user = fantastes
password = password
hosts = 127.0.0.1
dbname = cronos
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Reiniciamos el servicio:

1
service postix restart

Utilizando el comando postmap comprobaremos que la configuración del fichero es correcta:

1
postmap -q ochobitsunbyte.pw mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Si todo ha ido bien nos devolverá un ‘1

Vamos a por el segundo de los ficheros:

1
nano /etc/postfix/mysql-virtual-mailbox-maps.cf

Y añadimos las líneas:

1
2
3
4
5
user = fantastes
password = password
hosts = 127.0.0.1
dbname = cronos
query = SELECT 1 FROM virtual_users WHERE email='%s'

Reiniciamos el servicio:

1
service postfix restart

Comprobamos la configuración:

1
postmap -q davidochobits@ochobitsunbyte.pw mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Si nos muestra ‘1’ es que todo va bien.

Por último el tercer fichero:

1
nano /etc/postfix/mysql-virtual-alias-maps.cf

Y su contenido:

1
2
3
4
5
user = fantastes
password = password
hosts = 127.0.0.1
dbname = cronos
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Reiniciamos por última vez en éste apartado el servicio:

1
service postfix restart

Realizamos la comprobación:

1
postmap -q alias@ochobitsunbyte.pw mysql:/etc/postfix/mysql-virtual-alias-maps.cf

De ésta manera nos tiene que mostrar el correo al cual está redirigido, es decir, davidochobits@ochobitsunbyte.pw

Para poder utilizar la conexión segura por el puerto 587 debemos modificar el fichero /etc/postfix/master.cf

1
nano /etc/postfix/master.cf

Debemos descomentar las siguientes líneas:

1
2
3
4
submission inet n       -       -       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes

Si reiniciamos Postfix ya podremos utilizar el puerto 587.

Configurar Dovecot

Los principales ficheros de configuración de Dovecot, los cuales tendremos que modificar son los siguientes:

  • /etc/dovecot/dovecot.conf
  • /etc/dovecot/conf.d/10-mail.conf
  • /etc/dovecot/conf.d/10-auth.conf
  • /etc/dovecot/dovecot-sql.conf.ext
  • /etc/dovecot/conf.d/10-master.conf
  • /etc/dovecot/conf.d/10-ssl.conf

Para ello lo primero que haremos es copiarlos a otro archivo para perder la configuración original:

1
2
3
4
5
6
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Empezamos a trabajar con el fichero /etc/dovecot/dovecont.conf, lo editamos:

1
nano /etc/dovecot/dovecot.conf

Y verificamos que la siguiente línea no esté comentada:

1
!include conf.d/*.conf

Justo debajo de la línea “!include_try /usr/share/dovecot/protocols.d/*.protocol line“, debemos añadir los protocolos a utilizar:

1
2
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Editamos el siguiente fichero de configuración:

1
nano /etc/dovecot/conf.d/10-mail.conf

Debemos descomentar la siguiente línea y dejarla tal así:

1
mail_location = maildir:/var/mail/vhosts/%d/%n

Ahora buscamos ésta otra línea, la descomentamos, y la dejamos tal cual:

1
mail_privileged_group = mail

Una vez editado el fichero lo guardamos.

Creamos la carpeta donde veremos los registros de la base de datos MYSQL:

1
mkdir -p /var/mail/vhosts/ochobitsunbyte.pw

Creamos el usuario y grupo ‘vmail‘ con la ID 5000

1
2
groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /var/mail

Asignamos el nuevo usuario y grupo al directorio /var/mail utilizando el comando chown:

1
chown -R vmail:vmail /var/mail

Editamos el siguiente fichero:

1
nano /etc/dovecot/conf.d/10-auth.conf

Editamos la línea a continuación añadiendo el parámetro ‘yes‘:

1
disable_plaintext_auth = yes

Modificamos la línea ‘auth_mechanisms’ con los parámetros:

1
auth_mechanisms = plain login

Comentamos la línea:

1
#!include auth-system.conf.ext

Y descomentamos la línea referida a la autorización MYSQL:

1
!include auth-sql.conf.ext

En el paso siguiente creamos el fichero /etc/dovecot/conf.d/auth-sql.conf.ext para la información de autentificación:

1
nano /etc/dovecot/conf.d/auth-sql.conf.ext

Y añadimos el contenido:

1
2
3
4
5
6
7
8
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Guardamos y pasamos al siguiente fichero, en este caso se trata de /etc/dovecot/dovecot-sql.conf, donde indicamos la información MYSQL

1
nano /etc/dovecot/dovecot-sql.conf.ext

Descomentamos y añadimos el parámetro ‘mysql‘ :

1
driver = mysql

Descomentamos y añadimos nuestros datos de base de datos:

1
connect = host=127.0.0.1 dbname=cronos user=fantastes password=password

Ahora descomentamos y modificamos el parámetro “default_pass_scheme“, añadiendo el cifrado “SHA512-CRYPT

1
default_pass_scheme = SHA512-CRYPT

Descomentamos “password_query” y añadimos la información:

1
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

Modificamos permisos y asignamos nuevo usuario a la carpeta /etc/dovecot

1
2
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

Abrimos y modificamos el fichero /etc/dovecot/conf.d/10-master.conf, modificando varios parámetros, para que quede de la siguiente manera:

1
nano /etc/dovecot/conf.d/10-master.conf

La primera parte debe quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##Descomentamos inet_listener_imap y lo modificamos por port 0
service imap-login {
  inet_listener imap {
    port = 0
}
 
#Creamos el socket LMTP con esta configuracion
service lmtp {
   unix_listener /var/spool/postfix/private/dovecot-lmtp {
       mode = 0600
       user = postfix
       group = postfix
   }
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port =
  #}
}

Modificamos el parámetro “unix_listener” dentro del apartado “service_auth” :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
service auth {
 
  unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
  }
 
  unix_listener auth-userdb {
  mode = 0600
  user = vmail
  #group =
  }
 
  #unix_listener /var/spool/postfix/private/auth {
  # mode = 0666
  #}
 
  user = dovecot
}

Modifcamos el apartado “service auth-worker” para que quede así:

1
2
3
4
5
6
service auth-worker {
  # Auth worker process is run as root by default, so that it can access
  # /etc/shadow. If this isn't necessary, the user should be changed to
  # $default_internal_user.
  user = vmail
}

Guardamos y pasamos al fichero /etc/dovecot/conf.d/10-ssl.conf, lo revisamos y si un caso lo modificamos, para que quede de la siguiente manera:

1
nano /etc/dovecot/conf.d/10-ssl.conf

Comprobamos que el parámetro “ssl” es el siguiente:

1
ssl = required

Verificamos y modificamos, si es necesario, los parámetros “ssl_cert” y “ssl_key” :

postfix-dovecot-ssl

Reiniciamos el servicio Dovecot:

1
service dovecot restart

EDITADO ABRIL 2016

Gracias a la colaboración de los usuarios de la web, hemos visto que debido a diferentes problemas de certificado ssl, el servidor no funcionaba. Tanto en su parte IMAP en lo que a Dovecot, como en la parte SMTP de Postfix. Para solucionarlo vamos a ver primero la parte de Dovecot, la solución al final no es complicada, en el fichero /etc/dovecot/conf.d/10-ssl.conf, debemos descomentar la línea:

1
ssl_ca = /etc/ssl/certs/ca.pem

Y dejar como la tengo yo. A continuación nos iremos a la carpeta /etc/ssl/certs/ y descargaremos el certificado:

1
wget http://www.startssl.com/certs/ca.pem

Para comprobar que la parte de Dovecot, está lista lo comprobamos con el siguiente comando:

1
dovecot -f

Respecto a la parte de Postfix, añadimos al siguiente línea en el fichero /etc/postfix/main.cf:

1
smtpd_tls_CAfile = /etc/postfix/cacert.pem

Ahora copias el respectivo certificado a la carpeta de Postfix

 

1
cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem

Con esto ya lo tendremos solucionado.

Ahora reinciaremos el sevidor y probaremos la cuenta davidochobits@ochobitsunbyte.pw en el cliente de correo Thunderbird.

Para ello primero modificaremos los DNS de nuestro dominio para crear un registro A y MX, por seguridad recomiendo que los registros apunten a CloudFlare, si no tenéis cuenta os podéis crear una, son gratuitas. Por defecto namecheap.com ya apunta sus DNS a CloudFlare, así que no tendremos que hacer ninguna modificación.

En CloudFlare debemos añadir o modificar:

  • Registro “A” ochobitsunbyte.pw que apunte a nuestra IP
  • Registro “A”correo que apunte a nuestra IP
  • Registro “MX” de ochobitsunbyte.pw que apunte a correo.ochobitsunbyte.pw

Escogeremos el plan “Free Plan” que no tiene coste. El cambio de DNS puede tardar un poco, de hecho, hasta varias horas.

En Thunderbird los parámetros deberían ser como sigue:

  • Nombre a mostrar: davidochobits
  • Cuenta de correo: davidochobits@ochobitsunbyte.pw
  • Contraseña: ‘nuestro password’
  • Servidor de entrada: IMAP, correo.ochobitsunbyte.pw, Puerto 993, SSL/TLS, contraseña normal
  • Servidor de salida: SMTP, correo.ochobitsunbyte.pw, Puerto 587, Automático, contraseña normal
  • Usuario: davidochobits@ochobitsunbyte.pw

Y con esto nos debería funcionar, aquí os dejo una muestra:

thunderbird-postfix-dovecot-01

En el fichero de log /var/log/mail.log podemos ver todo lo que sucede con nuestro server de correo.

Configurar SpamAssasin

Con SpamAssasin podremos evitar en gran medida el abuso del spam contra nuestras cuentas de correo. Pertenece al proyecto Apache

spamassasin-postfix-dovecot

Para instalar el programa en nuestro servidor:

1
apt-get install spamassassin spamc

Para su funcionamiento necesitamos crear el usuario ‘spamd‘ :

1
adduser spamd --disabled-login

Debemos modificar el fichero /etc/default/spamassassin

1
nano /etc/default/spamassassin

Cambiamos el parámetro:

1
ENABLED=1

Las siguientes líneas deben de quedar así:

1
2
3
4
SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" 
PIDFILE="${SPAMD_HOME}spamd.pid"
CRON=1

Guardamos y ahora modificamos el fichero /etc/spamassassin/local.cf De ésta manera configuraremos el nivel de seguridad. Podemos utilizar los siguientes parámetros de ejemplo:

1
2
3
4
5
6
7
8
9
10
rewrite_header Subject ***** SPAM _SCORE_ *****
report_safe             0
required_score          5.0
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0
use_razor2              0
use_dcc                 0
use_pyzor               0

Por último modificamos uno de los ficheros de configuración de Postfix, para que cuenta con el servicio SpamAssassin :

1
nano /etc/postfix/master.cf

De las dos líneas siguientes, debemos buscar la primera y añadir a continuación la segunda:

1
2
submission inet n       -       -       -       -       smtpd
-o content_filter=spamassassin

Y añadir justo al final del fichero:

1
2
3
spamassassin unix -     n       n       -       -       pipe
user=spamd argv=/usr/bin/spamc -f -e  
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Ahora ya podemos encender el servicio spamassassin y reiniciar postfix

1
2
service spamassassin sart
service postfix restart

Pues ya tenemos montado nuestro servidor de correo, con POSTFIX, DOVECOT y SPAMASSASIN, espero que haya sido de vuestro interés.

Me he ayudado de las siguientes fuentes:

DigitalOcean | Wiki Apache

You may also like...

69 Responses

  1. Yoyo dice:

    Menudo curro la vín compae! 😉

  2. C3scmt dice:

    Muy bien explicado todo! Lo pondré en practica a ver como sale!
    Un saludo!

  3. Raul Mauricio Garcia Lara dice:

    ¿Este servidor tiene la funcionalidad de dejar copia de todo lo que envía en el propio servidor.?

    Gracias

  4. Bello post, excelente explicación, aunque hubiera preferido MariaDB (cosa de gustos 🙂 ). Ya lo redditeo /r/GNULinuxEsp y lo paso por las redes libres.

    Saludos.

  5. Keiller dice:

    Muy bueno. Voy a probarlo a ver como queda.Un saludo.

  6. tannhausser dice:

    Está genial el post, completo y muy bien explicado.

    A este paso, voy tener que hacerle una carpetita a firefox con tus manuales, que ya se está llenando la cosa 🙂

  7. Liher dice:

    Menudo pedazo de cacho de trozo de tuto, sencillamente excelente, este tipo de articulos son para guardar como referencia y eso hare. Un saludo compañero

  8. Demasiado bueno el artículo!!!!
    Siempre he querido montar un Servidor de Correo propio, y ahora tengo toda la información disponible, muchísimas gracias.

  9. Galliko dice:

    Muy buen post! Solo ha faltado SquirrelMail

    • davidochobits dice:

      Gracias Galliko, esa es la intención.

      El tema de la interfaz web SquirrelMail (o alguna similar) lo tengo pensado para de aquí a unos días.

      Saludos!!

  10. dell dice:

    hola, bueno el tutorial.
    te comento tengo un problema , al reiniciar dovecot me da:
    [….] Restarting IMAP/POP3 mail server: dovecotdoveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 12: ssl_cert: Can’t open file /etc/ssl/certs/dovecot.pem: No such file or directory
    y bueno tambien cuendo verifico el puerto 993 y 995 (imap y pop3 seguro), no muestran como puertos abirtos
    no logro conectar con un cliente de correo.
    perdona pero hay algo que no realice bien.
    no logro encontrar el detalle del error.
    lo estoy corriendo en Debian 8.2
    saludos.

  11. Joan Veras dice:

    Saludos davidochobits,

    Te escribo por que instale el servidor de correo correctamente haciendo todos los pasos, pero cuando configuro el correo en el cliente Thunderbird no me funciona.

    Te agradeceria tu ayuda.

    Muchas gracias.

    • Hola Joan,

      Entiendo que has seguido las instrucciones que indico al final del tutorial, justo en la parte de configurar el cliente Thunderbird. ¿Que error te da?

      Ya me dices. Piensa también que los puertos deben estar abiertos en el firewall de tu empresa, tanto de entrada como de salida.

      Saludos

  12. andres dice:

    Hola y gracias por compartir conocimiento, quería preguntarte si es posible añadir a un servidor como este diferentes dominios, gracias.

  13. Muchas gracias por este trozo de post, estoy tratando de replicarlo, pero como soy novato en linux, estoy teniendo algunos pequeños inconvenientes y dudas existenciales, por ejemplo en el archivo /etc/postfix/master.cf el: “-o smtpd_client_restrictions=permit_sasl_authenticated,reject” no es igual al que me aparece a mi en mi caso sale “-o smtpd_client_restrictions=$mua_client_restrictions”, pero más abajo sale “-o smtpd_relay_restrictions=permit_sasl_authenticated,reject”. Mi duda existencia es: ¿Cual debo descomentar o las descomento ambas?

    De ante mano muchas gracias. BUENA VIBRA!!!! 😀

    • davidochobits dice:

      Hola César,

      Primero de todo gracias por pasarte y comentar.

      Respecto a la duda entiendo que es la segunda línea, la que deberías descomentar, esto es:

      -o smtpd_relay_restrictions=permit_sasl_authenticated,reject”

      Ya me dirás si te ha funcionado bien.

      Saludos!!

      • No me funciono amigo y cambie de versión de ubuntu y puse la misma del post y esa duda ya no fue problema para mí. Pero no me conecta, si reconoce que hay un servidor de correo pero dice que hay un error en usuario o clave ( cosa que no es así) pero no se que podrá ser.

        • davidochobits dice:

          Hola César,

          Ya he encontrado el problema. Resulta que la configuración del fichero /etc/postfix/master.cf difiere de la configuración correcta. Ya he modificado el artículo, pero básicamente tendría que quedar:

          submission inet n – – – – smtpd
          -o content_filter=spamassassin
          -o syslog_name=postfix/submission
          -o smtpd_tls_security_level=encrypt
          -o smtpd_sasl_auth_enable=yes

          Te agradezco tus comentarios, si no fuera por ellos no hubiera dado con el error.

          Saludos!

  14. Joan Veras dice:

    Hola davidochobits,

    El cliente servidor no quiere conectar. y quiero saber si es por que yo no tengo instalado el certificado de seguridad ssl.

    Si puedes ayudarme hacerlo te lo agradecería y si quieres puedes ponerte en contacto con migo atravez de mi correo para pagarte por tu ayuda.

    Muchas gracias

  15. ssa dice:

    no estaría demás agregar que no funciona para instalaciones locales y solo para el VPS

    • Hola ssa,

      Hombre, si indico todos los pasos para contratar el VPS en Digitalocean y los DNS en Cloudflare, será por algo?

      • ssa dice:

        tranquilo viejo que no soy un chico rata ni ando de troll fue un comentario sin afán de ofender pero si te ofendí una disculpa
        y además me agradaría poder replicar en muchos casos el uso de un vps y en mi experiencia que en lo sumo es ínfima a la tuya claro está muchos de los tutoriales que hacen uso de un vps se pueden desarrollar en ya sea maquinas virtuales o maquinas físicas o viceversa
        y no estaría demás mencionar que el tutorial quedaría obsoleto el 27 de abril del siguiente año si mal no recuerdo, ya que se dejaría de ofrecer soporte a esta versión de ubuntu y como repito todo esto es sin un afán de ofender es a manera de observación y si causo molestias de antemano una disculpa

  16. Funciona si configuro en un cliente con Microsoft Outlook y Pop ?

  17. y que mantencion tendría que hacerse a este servidor .

  18. Ignacio dice:

    Hola… excelente documentación… Existe alguna instalacion de HORDE o ROUNDCUBE ? Se complica con la validación con mysql…
    Si alguien tiene algo… gracias..

  19. Ignacio dice:

    deseo subscribirme

  20. jon dice:

    Gracias por el tuto, un curro tremendo. Justo quiero montar un servidor de correo, y listas de correo.

    Nunca he montado uno, principalmente tengo 2 dudas:

    Según he entendido todos los correos se almacenan en MySQL no? osea que pueden estar en otra maquina.

    Postfix y Dovecot parecen los mejores por lo que leo no?

    Saludos!!

  21. david dice:

    Has usado easyengine? tengo dudas para la configuracion del servidor de correo

  22. Enrique dice:

    Hola soy novato en linux , gracias por el tuto, una duda es posible configurar el server de correo y configurar el cliente en otro equipo que no este en la lan?? lograria conectarse por internet a ese server ?? Gracias

  23. Patricio dice:

    estimado , que antivirus se le podria instalar para el tema de correos

  24. Alejandro dice:

    Hola, muchas gracias por la guia, excelente!, sin embargo tengo un error del certificado si a alguien le ha pasado?

    doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 12: ssl_cert: Can’t open file /etc/ssl/certs/dovecot.pem: No such file or directory

    Muchas gracias

  25. Abner Granados dice:

    Excelente Post!
    Una duda si quiero manejar los registros MX y A desde Digital Ocean como lo puedo hacer?

  26. Abner Granados dice:

    Realice todo el proceso pero no puedo conectarme al puerto 993 me da un mensaje de refused.

    Como podira solucionarlo

  27. Carlos dice:

    Gran post. Una cuestion, esta configuración y este modelo de servidor, valdria para configurar las cuentas de correo de otros dominios alojados en otra máquina? Es que tengo un servidor dedicado virtualizado con proxmox y tengo una vps con plesk para 20 dominios, pero me sobra máquina y me gustaria montar otro vps solo para correo.
    Gracias por tan grande aportacion

  28. Claudio dice:

    Hola David, muy buenas tardes… Me interesa mucho montar un servidor como el que expones pero crees que funcione en CentOS??
    Saludos y muchísimas gracias por el Post…

  29. Elizabeth MS dice:

    Hola David!! antes que nada permiteme felicitarte por este post y agradecerte por compartir tu conocimiento de manera tan tremenda, me ha sido de mucha ayuda.
    Siguiendo las indicaciones que haces ya he logrado recibir correos de cuentas de hotmail y enviar correos a esas mismas cuentas por línea de comando, aunque adicionalmente utilice registros SPF y DKIM para que mis correos no fueran tratados como spam y no he implementado el SpamAssassin.

    Sin embargo no puedo conectarme utilizando un cliente (Thunderbird y Outlook) instalado en mi maquina de casa; Thunderbird me indica que hubo un fallo para encontrar los ajustes de mi cuenta de email y outlook durante el intento de inicio de sesión me dice que el servidor finalizó inesperadamente la conexión; revise el tema de los certificados que mencionas y cambie mi servicio DNS a cloudfare haciendo el registro MX correspondiente pero aún así no funciona, en el mail.log no tengo ningún error al respecto.

    Esto lo monte en un droplet de digital ocean en el cual tengo un sitio web con ese mismo dominio.

    Cabe señalar que mi archivo /etc/postfix/master.cf quedo exactamente así

    submission inet n – – – – smtpd
    -o syslog_name=postfix/submission
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes

    el estado de los puertos es:

    587/tcp open submission
    993/tcp open imaps

    Espero puedas orientarme para saber que podría estar pasando 🙁

    • Hola,

      El error en Thunderbird es algo bastante típico, ya que no recoge la configuración por defecto del nuestro servidor. Si me pasas a mi correo personal davidochobits@openmailbox.org, un pantallazo de la configuración quizás te pueda ayudar.

      La información que indicas del master.cf parece estar correcta además. En cualquier caso también puedes mirar los logs del sistema, ya que es una buena herramienta para ver los posibles errores. Generalmente ubicados en /var/log/messages, o bien /var/log/mail, depende del sistema.

      Un saludo

  1. 2 octubre, 2015

    […] el tutorial voy a crear un VPS en DigitalOcean. Las instrucciones de como crearlo ya lo expliqué ayer en el artículo de como crear un servidor en GNU Linux desde cero. Mi idea es sólo usarlo para […]

  2. 8 octubre, 2015

    […] unos días vimos como instalar y configurar un servidor de correo en GNU Linux, utilizando una distribución Ubuntu, con los servicios POSTFIX, DOVECOT y SPAMASSIN. […]

  3. 20 octubre, 2015

    […] los últimos días hemos visto cómo crear un servidor de correo en nuestro GNU Linux, utilizando un servidor LAMP, junto con DOVECOT y SPAMASSIN. A posteriori vimos […]

  4. 14 octubre, 2016

    […] Crear servidor de correo desde cero […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR