MailServer

AdminPanel

He creado una pequeña herramienta para poder gestionar los usuarios de manera sencilla!

Visita mi repositorio y cescargatelo! es rápido de instalar y sencillo de usar.

https://github.com/sefirosweb/adminwebmail

Servidor de correo.

Antes de nada hay que puntualizar, un servidor de correo no es una aplicación que se instala y ya lo tienes listo para funcionar, contiene varias partes que se tiene que instalar por separado, excepto si tienes algún bundle que lo hace todo.

Como por ejemplo iRedMail entre otros es un bundle que te viene todo en 1 (Anti-Spam, Anti-Virus, SMTP POP3 IMAP).

Este manual explico como instalar el servidor de correo por partes, “mas personalizada” aun que también mas escueto.

Por ejemplo en este manual no explico como instalar el paquete anti-spam ni anti virus, mas adelante los introduciré

Aquí adjunto información que encontré muy útil para diferenciar que es cada cosa.

¿Cuál es la diferencia entre SMTP, POP3 y IMAP?

smtp_pop_imap

Existen tres estándares que utilizan actualmente la mayoría de servicios de correo electrónico (email). Estos son el SMTP, el POP3 y el IMAP. El estándar SMTP son las siglas de Simple Mail Transfer Protocol (Protocolo Simple de Transferencia de Correo). POP es el acrónimo de Post Office Protocol (Protocolo de Oficina Postal). Aunque pueda sonar algo confuso, POP es el protocolo de almacenamiento de email mientras que SMTP es el protocolo de envío y recepción. POP3 es la tercera versión desarrollada del estándar POP. IMAP (Internet Message Access Protocol) es otro protocolo de almacenamiento más moderno que POP3 y con más posibilidades.

Si hacemos una analogía con el correo postal, el protocolo SMTP sería el análogo al cartero o a los servicios de transporte de cartas. El o ella entrega y recoge el correo para transferirlo a otra localización. El protocolo POP3 y el protocolo IMAP serían como el buzón de correos de tu casa o un apartado postal. Es el sitio dónde el correo es enviado y dónde permanece hasta que el receptor está listo para leerlo. El correo saliente también puede ser puesto en el buzón de correo, es decir, los protocolos POP3 e IMAP también se utilizan para almacenar el correo enviado.

SMTP: el transporte de emails

*El paquete que se encargara de esto es Postfix

La inmensa mayoría de emails que viajan por internet lo hacen utilizando el estándar SMTP, un protocolo de transferencia. Aunque fue inventado a principios de la década de 1980, se considera un protocolo muy fiable, principal motivo por el que sigue siendo el más utilizado de forma casi universal. La mayoría de correos electrónicos enviados utilizando SMTP llegan rápido al receptor sin problemas.

No obstante, SMTP presenta algunos inconvenientes ante eventos que no se tuvieron en cuenta cuándo se inventó, principalmente por ser problemas que no existían entonces y que no fueron anticipados. Por ejemplo, el protocolo SMTP no tiene forma de verificar si el remitente de un email es realmente quien dice ser. Si volvemos la vista a los años 1980, cuándo internet era utilizado por un selecto grupo de personas, principalmente en organismos gubernamentales y centros de docencia e investigación, esto no era un gran problema.

A partir de los años 1990 la incapacidad de verificación del remitente comenzó a ser un problema importante y lo que ha permitido el continuo incremento del SPAM y otros usos malintencionados del email, como la transferencia de virus o el email spoofing (suplantación de identidad). Por ejemplo, un programa puede buscar en el buzón de email y enviar un virus como archivo adjunto a toda la lista de contactos de una persona en nombre de esa persona en la que los receptores confían. Se han realizado avances para mejorar la seguridad del estándar SMTP pero está aún muy lejos de ser verdaderamente seguro.

POP3 e IMAP: el almacenamiento y organización

*El Paquete que se encargara de esto es Dovecot

El estándar POP es el protocolo utilizado para el almacenamiento y organización de los correos electrónicos. Se diseñó en 1984 con la idea de permitir a los usuarios tener acceso a un servidor de correo, recibir los mensajes y almacenarlos en una carpeta local del ordenador propio y poder desconectarse de internet para leer y escribir mensajes. La capacidad de estar offline para leer o escribir era realmente útil cuándo permanecer conectado a internet era caro y se pagaba por minutos de conexión. Actualmente la mayoría de servidores de correo utilizan POP3, la tercera versión del estándar POP que fue desarrollada en 1988, o el estándar IMAP.

El protocolo IMAP es más moderno y ofrece más posibilidades que POP3. Por ejemplo, permite administrar varias bandejas de entrada, varios accesos a la vez o múltiples criterios de organización. Si deseas información detallada sobre cada protocolo puedes consultar los documentos RFC 821.

Junto con MySQL que guardará la información de los dominios, usuarios etc.

Pasos requeridos antes de empezar

Instalar MySQL
Permisos de root
Configurar FQDN

Configurar FQDN

Para ver si lo tenemos bien configurado utilizamos el comando:

hostname -f

Tiene que aparecer algo como:
pi.midominio.com

Si no es así hay que hacer lo siguiente:
Vamos a /etc/hostname cambamos el nombre si queremos o lo apuntamos si el que esta nos gusta.
A mi me aparece “pi”

sudo nano /etc/hostname

Luego vamos a /etc/hosts y añadimos nuestro dominio

sudo nano /etc/hosts

Y añadamos en el 127.0.0.1 tanto el hostname como el dominio completo + hostname, quedaría algo así:

pidominio

Si cambiamos el hostname tenemos que reiniciar el servidor.
Y ahora sí que debería daros el dominio completo como comenté anteriormente:

hostname -f

pidominio2

Postfix y Dovecot

Instalamos los paquetes necesarios:

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

Mientras se instala nos saldrá la siguiente imagen:

postfixI

Seleccionamos “Internet Site”

En la siguiente introducimos “midominio.com”

postfixDominio

Ahora crearemos nuestra base de datos con Dominios Virtuales, Usuarios y Alias.
Memoriza el nombre de la BBDD y el Usuario que crearemos para administrarla.

mysqladmin -p create servermail
mysql -u root -p
mysql> GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword';
mysql> FLUSH PRIVILEGES;
mysql> USE servermail;

mysql> CREATE TABLE `virtual_domains` (
`id`  INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> 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;


mysql> 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;

#Añadimos un par de ejemplos:

mysql> INSERT INTO `servermail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');

mysql> INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', 'SaltWebMail')), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', 'SaltWebMail')), -16))), 'email2@example.com');

mysql> INSERT INTO `servermail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');

exit;

Configuramos Postfix

Primero hacemos una copia de seguridad y luego editamos el fichero:

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
sudo nano /etc/postfix/main.cf

Comentamos las primeras lineas y añadimos las siguientes, como indicamos ahora:

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
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

Añadimos al final del mismo archivo:

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

Modificamos “mydestination” del mismo archivo y ponemos localhost

mydestination = localhost

Verificamos “myhostname” que sea nuestro FQDN

myhostname = pi.midominio.com

Añadimos al final:

virtual_transport = lmtp:unix:private/dovecot-lmtp
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

Creamos el archivo mysql-virtual-mailbox-domains.cf y lo modificamos con nuestra configuración personal

sudo nano /etc/postfix/mysql-virtual-mailbox-domains.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Reiniciamos Postfix

sudo service postfix restart

Si esta correcto el resultado que nos tiene que dar es 1:

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Creamos el archivo mysql-virtual-mailbox-maps.cf y lomodificamos con nuestra configuracion personal

nano /etc/postfix/mysql-virtual-mailbox-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

Reiniciamos Postfix

sudo service postfix restart

Si esta correcto el resultado que nos tiene que dar es 1:

postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Creamos el archivo mysql-virtual-alias-maps.cf y lomodificamos con nuestra configuracion personal

sudo nano /etc/postfix/mysql-virtual-alias-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Reiniciamos Postfix

sudo service postfix restart

Si esta correcto el resultado que nos tiene que dar es 1:

postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Vamos a activar el puerto 587 para conexiones seguras

sudo nano /etc/postfix/master.cf

Descomentamos:

submission inet n       -       -       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
sudo service postfix restart

Configuramos Dovecot:
Vamos a modificar 5 archivos primero procedemos a hacer una copia de seguridad de estos:

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
sudo nano /etc/dovecot/dovecot.conf

Debajo de “!include_try /usr/share/dovecot/protocols.d/*.protocol” escribimos: “protocols = imap lmtp” quedará algo así

#Debajo de:
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Editamos /etc/dovecot/conf.d/10-mail.conf

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

Busca “mail_location” descomentala y pon los siguientes parámetros:

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

Busca “mail_privileged_group” descomentala y pon los siguientes parámetros:

mail_privileged_group = mail

Verificando los permisos:

ls -ld /var/mail

Creamos el usuario vmail con el id 5000:

sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail
#Le damos permisos a las carpeta mail
sudo chown -R vmail:vmail /var/mail
ls -ld /var/mail

Editamos /etc/dovecot/conf.d/10-auth.conf

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

Busca “disable_plaintext_auth” y “auth_mechanisms” descomentala y pon los siguientes parámetros:

disable_plaintext_auth = yes
auth_mechanisms = plain login

Comentamos la linea: #!include auth-system.conf.ext
Descomentamos la linea: !include auth-sql.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext

Editamos /etc/dovecot/conf.d/auth-sql.conf.ext

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

Introducimos:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Editamos /etc/dovecot/dovecot-sql.conf.ext

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

Descomentamos “driver” , “connect” , “default_pass_scheme” , “password_query” y ponemos el siguiente parámetro:

driver = mysql

connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword

default_pass_scheme = SHA512-CRYPT

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

Cambiamos el propietario de dovecot:

sudo chown -R vmail:dovecot /etc/dovecot
sudo chmod -R o-rwx /etc/dovecot

Editamos /etc/dovecot/conf.d/10-master.conf con cuidado hay que dejarlo como en el ejemplo!

sudo nano /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    port = 0
}

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 =
  #}
}

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
}

service auth-worker {
  user = vmail
}

Finalmente la configuración de SSL editamos:

sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
sudo service dovecot restart

*Si os da un error de que no encuentra los certificados, hacedlo de nuevo:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem

Felicidades la parte de servidor ya la tienes configurada y lista!

Recuerda abrir los puertos necesarios en el router / firewall de los equipos que necesites y el redirecionamiento de tu dominio (midominio.com) a tu servidor.

Puedes probarlo con thunderbird

Puertos necesarios:

IMAP: 993
POP3: 995
SMTP: 25
TLS-SMTP: 587


RainLoop

Webmail service

Preparamos la base de datos:

mysql -u root -p
mysql> CREATE DATABASE rainloop;
mysql> GRANT ALL ON rainloop.* TO 'rainloop'@'127.0.0.1' IDENTIFIED BY 'rainloop';
mysql> FLUSH PRIVILEGES;
mysql> exit;

Descargamos los archivos del webservices de https://www.rainloop.net/downloads/ o bien desde mi repositorio como indico:

mkdir ~/tmp/
cd ~/tmp/
wget http://sefirosweb.es/wp-content/uploads/repositorio/rainloop-community-latest.zip
sudo unzip rainloop-community-latest.zip -d /var/www/html
sudo chown -R www-data:www-data /var/www/
find /var/www/ -type d -exec chmod 755 {} \;
find /var/www/ -type f -exec chmod 644 {} \;

Accede a tu servidor web para acabar de finalizar la instalación via web.

http://server-ipaddress/?admin

Usuario: admin
Contraseña: 12345

Vereis que es todo muy intuitivo recordad en cambiar los parámetros básicos como contraseña idioma ect,

En primer lugar en “contactos” yo habilitaría el almacenamiento PDO con el usuario y contraseña de la base de datos.

En dominios quita gmail y añade uno nuevo con estos parámetros:

Y listo ya podéis acceder a vuestro correo vía web, aun que recomiendo que lo configuréis a vuestro gusto =)


SendEmail

Para enviar correo por linea de comando desde debian:

Instalamos el paquete “sendemail”

Aquí indico el ejemplo para enviar correos:

#En texto plano
sendemail -f "Nombre de la cuenta <cuenta@sefirosweb.es>" -t cuentadestino@gmail.com -s smtp.server.es:587 -u $1 -m $2 -v -xu cuenta@sefirosweb.es -xp contraseña -o tls=yes

#Con archivo formateado en HTML
sendemail -f "Nombre de la cuenta <cuenta@sefirosweb.es>" -t cuentadestino@gmail.com -s smtp.server.es:587 -u $1 -o message-file=$2 -v -xu cuenta@sefirosweb.es -xp contraseña -o tls=yes

Ahora viene la parte interesante que nos afecta a nuestro servidor,

Con gmail, outlook etc. no pasará ya que los certificados están validados por una entidad certificadora.

Con que nuestro certificado es auto firmado el servidor no permite enviarlo,  pues simplemente agregamos el certificado, el repositorio de certificados

Copiamos el certificado a nuestro servidor que envía los mails o en el propio, nuestro caso el certificado es:

/etc/ssl/certs/dovecot.pem

Y lo copiamos en:

#Tiene que acabar en .crt
/usr/share/ca-certificates/dovecot.crt

Ejecutamos:

dpkg-reconfigure ca-certificates

Pulsamos en YES, y buscamos nuestro certificado lo seleccionamos y aceptamos.
Y listo ya podemos enviar correos autofirmados =)

Extra:
Si os sale el siguiente error: “ERROR => No TLS support! SendEmail can’t load required libraries. (try installing Net::SSLeay and IO::Socket::SSL)”

Instalad los siguientes paquetes:

sudo apt-get install libnet-ssleay-perl
sudo apt-get install libio-socket-ssl-perl

Roundcube (OBSOLETO)

Probé de actualizar las versione de PHP pero parece ser que Roundcube presenta muchos archivos deprecated y mucha gente de la comunidad tiene problema similares.

Hay otro servicio webmail que es “RainLoop” pero que va con licencia, aun que para uso domestico se puede usar sin problemas, pero algunas cosas solo se puede modificar pagando la licencia, pero bueno para lo que usamos nos sobra =)

Con esta aplicación web accederemos a nuestro servidor de correo. Antes de empezar necesitaremos haber tenido instalado LAMP (Apache2 – PHP5- MySQL) Haz clic aquí ara ir al manual. Creamos un usuario para administrad Roundcube:

mysql -u root -p

mysql> CREATE DATABASE roundcubedb;

mysql> GRANT ALL PRIVILEGES ON roundcubedb.* to adminroundcube@127.0.0.1 IDENTIFIED BY 'admin123';

mysql> FLUSH PRIVILEGES;

mysql> exit;

Bájate la ultima versión de Roundcube de: https://roundcube.net o bien de mi repositorio =)

Repositorio: roundcubemail-1.2.4-complete.tar.gz

mkdir ~/tmp/
cd ~/tmp/
wget http://sefirosweb.es/wp-content/uploads/repositorio/roundcubemail-1.2.4-complete.tar.gz
sudo tar -xzvf roundcubemail-1.2.4-complete.tar.gz -C /var/www
sudo mv /var/www/roundcubemail-1.2.4/ /var/www/webmail
sudo chown -R www-data:www-data /var/www/webmail/

Accede a tu servidor web para acabar de finalizar la instalación via web.

http://server-ipaddress/webmail/installer/

Verificamos que tengas todas las dependencias necesarias como en la imagen:

roundcubeCheck

*Es posible que falten algunas dependencias!

Posiblemente te falten algunas que pongo a continuación para instalar, relacionado con 3rd party libs de pear.

sudo pear install Auth_SASL

sudo pear install Net_SMTP

sudo pear install Net_IDNA2-0.1.1

sudo pear install Mail_Mime

sudo pear install Mail_mimeDecode

Página 2 configuración

produc_name: Nombre del sitio
skin_logo: url del logo (ruta RELATIVA de */webmail/ )

Configuración de MySQL.
introducimos la ip, BBDD, usuario y password de Mysql.

Configuración IMAP.
Host: ssl://localhost
Puerto: 993

Carpetas por defecto yo aconsejo los siguientes nombres:
Elementos enviados
Elementos eliminados
Borradores
Correo electrónico no deseado

Configuracion SMTP:
Host: tls://localhost
Puerto: 587
Actiamos: “Use the current IMAP username and password for SMTP authentication”

Display setting:
htmleditor = alway

Applicaciones:
zipdownload
emoticons

Página siguiente.
Pulsamos sobre el botón de inicializar BBDD

Hacemos las pruebas de SMTP y IMAP

recuerda

user: usuario@midominio.com
password: xxxx

sender y recipient: usuario@midominio.com

Una vez que funciona todo correcto ya podemos acceder también vía webmail/

http://midominio.com/webmail/

Cualquier duda podéis indicarlo abajo,

Un saludo

Deja un comentario

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