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?
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í:
Si cambiamos el hostname tenemos que reiniciar el servidor.
Y ahora sí que debería daros el dominio completo como comenté anteriormente:
hostname -f
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:
Seleccionamos «Internet Site»
En la siguiente introducimos «midominio.com»
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 https://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 https://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:
*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