Auto hospedado
Primeros pasos
Nuestra soluci贸n de correo electr贸nico autoalojada, al igual que todos nuestros productos, es 100 % de c贸digo abierto, tanto en el frontend como en el backend. Esto significa:
- Transparencia total: Cada l铆nea de c贸digo que procesa tus correos electr贸nicos est谩 disponible para el escrutinio p煤blico.
- Contribuciones de la comunidad: Cualquiera puede contribuir con mejoras o solucionar problemas.
- Seguridad a trav茅s de la transparencia: Una comunidad global puede identificar y solucionar vulnerabilidades.
- Sin dependencia de un proveedor: Nunca dependes de la existencia de nuestra empresa.
El c贸digo base completo est谩 disponible en GitHub en https://github.com/forwardemail/forwardemail.net, con licencia MIT.
La arquitectura incluye contenedores para:
- Servidor SMTP para correo saliente
- Servidores IMAP/POP3 para la recuperaci贸n de correo
- Interfaz web para la administraci贸n
- Base de datos para el almacenamiento de la configuraci贸n
- Redis para el almacenamiento en cach茅 y el rendimiento
- SQLite para el almacenamiento seguro y cifrado del buz贸n
Note
No olvides consultar nuestra gu铆a blog autoalojado
Si te interesa una versi贸n m谩s detallada, consulta nuestras gu铆as Ubuntu o Debian.
Requisitos
Antes de ejecutar el script de instalaci贸n, aseg煤rese de tener lo siguiente:
- Sistema operativo: Un servidor basado en Linux (actualmente compatible con Ubuntu 22.04 o superior).
- Recursos: 1 vCPU y 2 GB de RAM
- Acceso root: Privilegios administrativos para ejecutar comandos.
- Nombre de dominio: Un dominio personalizado listo para la configuraci贸n de DNS.
- IP limpia: Aseg煤rese de que su servidor tenga una direcci贸n IP limpia y sin reputaci贸n de spam previa revisando las listas negras. M谩s informaci贸n: aqu铆.
- Direcci贸n IP p煤blica compatible con el puerto 25
- Posibilidad de configurar PTR inverso
- Compatibilidad con IPv4 e IPv6
Tip
Consulta nuestra lista de proveedores de servidores de correo incre铆bles
Inicializaci贸n de nube / Datos de usuario
La mayor铆a de los proveedores de nube admiten una configuraci贸n de cloud-init para cuando se aprovisiona el servidor privado virtual (VPS). Esta es una excelente manera de configurar algunos archivos y variables de entorno con antelaci贸n para su uso en la l贸gica de configuraci贸n inicial de los scripts, lo que evita la necesidad de solicitar informaci贸n adicional mientras el script se ejecuta.
Opciones
EMAIL
- Correo electr贸nico usado para recordatorios de expiraci贸n de CertbotDOMAIN
- Dominio personalizado (p. ej.,example.com
) usado para la configuraci贸n de autoalojamientoAUTH_BASIC_USERNAME
- Nombre de usuario usado en la primera configuraci贸n para proteger el sitioAUTH_BASIC_PASSWORD
- Contrase帽a usada en la primera configuraci贸n para proteger el sitio/root/.cloudflare.ini
- (Solo para usuarios de Cloudflare) Archivo de configuraci贸n de Cloudflare usado por Certbot para la configuraci贸n de DNS. Requiere que configures tu token de API mediantedns_cloudflare_api_token
. M谩s informaci贸n sobre aqu铆.
Ejemplo:
#cloud-config
write_files:
- path: /root/.cloudflare.ini
content: |
dns_cloudflare_api_token = "xxx"
owner: root:root
permissions: '0600'
- path: /etc/profile.d/env.sh
content: |
export EMAIL="test@myemail.com"
export DOMAIN="mydomain.com"
runcmd:
- chmod +x /etc/profile.d/env.sh
Instalar
Ejecute el siguiente comando en su servidor para descargar y ejecutar el script de instalaci贸n:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Script de instalaci贸n de depuraci贸n
Agregue DEBUG=true
delante del script de instalaci贸n para obtener una salida detallada:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Indicaciones
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- Configuraci贸n inicial: Descargue el c贸digo de reenv铆o de correo electr贸nico m谩s reciente, configure el entorno, solicite su dominio personalizado y configure todos los certificados, claves y secretos necesarios.
- Configurar copia de seguridad: Se configurar谩 un cron para realizar copias de seguridad de MongoDB y Redis mediante un almac茅n compatible con S3 para un almacenamiento remoto seguro. Por separado, se realizar谩 una copia de seguridad de SQLite al iniciar sesi贸n si hay cambios para realizar copias de seguridad seguras y cifradas.
- Configurar actualizaci贸n: Configure un cron para buscar actualizaciones nocturnas que reconstruyan y reinicien de forma segura los componentes de la infraestructura.
- Renovar certificados: Certbot/lets encrypt se utiliza para certificados SSL y las claves caducan cada 3 meses. Esto renovar谩 los certificados de su dominio y los colocar谩 en la carpeta necesaria para que los componentes relacionados los consuman. Consulte rutas de archivos importantes
- Restaurar desde copia de seguridad: Activar谩 MongoDB y Redis para restaurar los datos de la copia de seguridad.
Configuraci贸n inicial (Opci贸n 1)
Elija la opci贸n 1. Initial setup
para comenzar.
Una vez completado, deber铆a ver un mensaje de 茅xito. Incluso puede ejecutar docker ps
para ver los componentes activados. M谩s informaci贸n sobre los componentes a continuaci贸n.
Servicios
Nombre del servicio | Puerto predeterminado | Descripci贸n |
---|---|---|
Web | 443 |
Interfaz web para todas las interacciones de administraci贸n |
API | 4000 |
Capa de API para abstraer bases de datos |
Bree | Ninguno | Ejecutor de tareas y trabajos en segundo plano |
SMTP | 465/587 |
Servidor SMTP para correo electr贸nico saliente |
SMTP Bree | Ninguno | Trabajo en segundo plano SMTP |
MX | 2525 |
Intercambio de correo para correo electr贸nico entrante y reenv铆o de correo electr贸nico |
IMAP | 993/2993 |
Servidor IMAP para la gesti贸n de correo electr贸nico entrante y buzones de correo |
POP3 | 995/2995 |
Servidor POP3 para la gesti贸n de buzones y correo electr贸nico entrante |
SQLite | 3456 |
Servidor SQLite para interacciones con bases de datos SQLite |
SQLite Bree | Ninguno | Trabajo en segundo plano de SQLite |
CalDAV | 5000 |
Servidor CalDAV para la gesti贸n del calendario |
Tarjeta DAV | 6000 |
Servidor CardDAV para la gesti贸n del calendario |
MongoDB | 27017 |
Base de datos MongoDB para la mayor铆a de las gestiones de datos |
Redis | 6379 |
Redis para almacenamiento en cach茅 y gesti贸n de estado |
SQLite | Ninguno | Bases de datos SQLite para buzones de correo cifrados |
Rutas de archivos importantes
Nota: La ruta del host a continuaci贸n es relativa a /root/forwardemail.net/self-hosting/
.
Componente | Ruta del host | Ruta del contenedor |
---|---|---|
MongoDB | ./mongo-backups |
/backups |
Redis | ./redis-data |
/data |
SQLite | ./sqlite-data |
/mnt/{SQLITE_STORAGE_PATH} |
Archivo env | ./.env |
/app/.env |
Certificados/claves SSL | ./ssl |
/app/ssl/ |
Clave privada | ./ssl/privkey.pem |
/app/ssl/privkey.pem |
Certificado de cadena completa | ./ssl/fullchain.pem |
/app/ssl/fullchain.pem |
CA certificadas | ./ssl/cert.pem |
/app/ssl/cert.pem |
Clave privada DKIM | ./ssl/dkim.key |
/app/ssl/dkim.key |
Important
Guarde el archivo .env
de forma segura. Es fundamental para la recuperaci贸n en caso de fallo.
Puede encontrarlo en /root/forwardemail.net/self-hosting/.env
.
Configuraci贸n
Configuraci贸n inicial de DNS
En el proveedor de DNS que prefiera, configure los registros DNS adecuados. Tenga en cuenta que todo lo que est茅 entre corchetes (<>
) es din谩mico y debe actualizarse con su valor.
Tipo | Nombre | Contenido | TTL |
---|---|---|---|
A | "@", ".", o en blanco | <direcci贸n_ip> | auto |
CNAME | API | <nombre_de_dominio> | auto |
CNAME | Caldav | <nombre_de_dominio> | auto |
CNAME | carddav | <nombre_de_dominio> | auto |
CNAME | rebotes de fe | <nombre_de_dominio> | auto |
CNAME | IMAP | <nombre_de_dominio> | auto |
CNAME | mx | <nombre_de_dominio> | auto |
CNAME | pop3 | <nombre_de_dominio> | auto |
CNAME | SMTP | <nombre_de_dominio> | auto |
MX | "@", ".", o en blanco | mx.<nombre_de_dominio> (prioridad 0) | auto |
TXT | "@", ".", o en blanco | "v=spf1 a -all" | auto |
Registro DNS/PTR inverso
El DNS inverso (rDNS) o los registros de puntero inverso (PTR) son esenciales para los servidores de correo electr贸nico, ya que ayudan a verificar la legitimidad del servidor que env铆a el correo electr贸nico. Cada proveedor de nube lo hace de forma diferente, por lo que deber谩 consultar c贸mo agregar "DNS inverso" para asignar el host y la IP a su nombre de host correspondiente. Probablemente se encuentre en la secci贸n de redes del proveedor.
Puerto 25 bloqueado
Algunos ISP y proveedores de nube bloquean el puerto 25 para evitar ataques maliciosos. Es posible que deba enviar un ticket de soporte para abrir el puerto 25 para SMTP/correo electr贸nico saliente.
Incorporaci贸n
-
Abra la p谩gina de destino. Vaya a https://<nombre_de_dominio> y reemplace <nombre_de_dominio> con el dominio configurado en su configuraci贸n de DNS. Deber铆a ver la p谩gina de destino "Reenviar correo electr贸nico".
-
Inicia sesi贸n y registra tu dominio
- Inicia sesi贸n con un correo electr贸nico y una contrase帽a v谩lidos.
- Introduce el nombre de dominio que deseas configurar (debe coincidir con la configuraci贸n de DNS).
- Sigue las instrucciones para agregar los registros MX y TXT necesarios para la verificaci贸n.
- Configuraci贸n completa
- Una vez verificado, accede a la p谩gina de Alias para crear tu primer alias.
- Opcionalmente, configura SMTP para correo saliente en Configuraci贸n del dominio. Esto requiere registros DNS adicionales.
Note
No se env铆a informaci贸n fuera de su servidor. La opci贸n de alojamiento propio y la cuenta inicial son solo para el inicio de sesi贸n de administrador y la vista web para gestionar dominios, alias y configuraciones de correo electr贸nico relacionadas.
Prueba
Creando su primer alias
- Acceda a la p谩gina de alias. Abra la p谩gina de administraci贸n de alias:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Agregar un nuevo alias
- Haga clic en A帽adir alias (arriba a la derecha).
- Introduzca el nombre del alias y ajuste la configuraci贸n del correo electr贸nico seg煤n sea necesario.
- (Opcional) Active la compatibilidad con IMAP/POP3/CalDAV/CardDAV marcando la casilla de verificaci贸n.
- Haga clic en Crear alias.
- Establecer una contrase帽a
- Haga clic en Generar contrase帽a para crear una contrase帽a segura.
- Esta contrase帽a ser谩 necesaria para iniciar sesi贸n en su cliente de correo electr贸nico.
- Configure su cliente de correo electr贸nico
- Use un cliente de correo electr贸nico como Thunderbird.
- Ingrese el alias y la contrase帽a generada.
- Configure los ajustes IMAP y SMTP seg煤n corresponda.
Configuraci贸n del servidor de correo electr贸nico
Nombre de usuario: <alias name>
Tipo | Nombre de host | Puerto | Seguridad de la conexi贸n | Autenticaci贸n |
---|---|---|---|---|
SMTP | smtp.<nombre_de_dominio> | 465 | SSL / TLS | Contrase帽a normal |
IMAP | imap.<nombre_de_dominio> | 993 | SSL / TLS | Contrase帽a normal |
Enviando / Recepci贸n de su primer correo electr贸nico
Una vez configurado, 隆deber铆a poder enviar y recibir correos electr贸nicos a su direcci贸n de correo electr贸nico reci茅n creada y alojada!
Soluci贸n de problemas
驴Por qu茅 esto no funciona fuera de Ubuntu y Debian?
Actualmente buscamos compatibilidad con macOS y buscaremos otras opciones. Si desea que otros usuarios tambi茅n lo sean, abra un discusi贸n o contribuya.
驴Por qu茅 falla el desaf铆o acme de certbot?
El problema m谩s com煤n es que certbot/letsencrypt a veces solicita 2 desaf铆os. Debe asegurarse de agregar AMBOS registros txt.
Ejemplo: Podr铆as ver dos desaf铆os como este: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Tambi茅n es posible que la propagaci贸n del DNS no se haya completado. Puedes usar herramientas como https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. Esto te dar谩 una idea de si los cambios en tu registro TXT deber铆an reflejarse. Tambi茅n es posible que la cach茅 DNS local de tu host siga usando un valor antiguo o no haya detectado los cambios recientes.
Otra opci贸n es usar los cambios de DNS automatizados de cerbot configurando el archivo /root/.cloudflare.ini
con el token de la API en cloud-init/user-data durante la configuraci贸n inicial del VPS, o crear este archivo y ejecutar el script de nuevo. Esto gestionar谩 los cambios de DNS y las actualizaciones de desaf铆o autom谩ticamente.
驴Cu谩l es el nombre de usuario y la contrase帽a de autenticaci贸n b谩sica?
Para el autoalojamiento, a帽adimos una ventana emergente de autenticaci贸n nativa del navegador para el primer acceso con un nombre de usuario simple (admin
) y una contrase帽a (generada aleatoriamente durante la configuraci贸n inicial). Esto se a帽ade como protecci贸n en caso de que la automatizaci贸n o los scrapers se adelanten a su primer registro en la experiencia web. Puede encontrar esta contrase帽a despu茅s de la configuraci贸n inicial en su archivo .env
, dentro de AUTH_BASIC_USERNAME
y AUTH_BASIC_PASSWORD
.
驴C贸mo s茅 qu茅 se est谩 ejecutando?
Puede ejecutar docker ps
para ver todos los contenedores en ejecuci贸n que se generan desde el archivo docker-compose-self-hosting.yml
. Tambi茅n puede ejecutar docker ps -a
para verlo todo (incluidos los contenedores que no se est谩n ejecutando).
驴C贸mo s茅 si algo que deber铆a estar en ejecuci贸n no se est谩 ejecutando?
Puedes ejecutar docker ps -a
para verlo todo (incluidos los contenedores que no se est谩n ejecutando). Es posible que veas un registro de salida o una nota.
驴C贸mo encuentro registros?
Puede obtener m谩s registros mediante docker logs -f <container_name>
. Si se produjo alg煤n error, probablemente se deba a una configuraci贸n incorrecta del archivo .env
.
Dentro de la interfaz de usuario web, puede ver /admin/emails
y /admin/logs
para los registros de correo electr贸nico saliente y los registros de errores respectivamente.
驴Por qu茅 se agota el tiempo de espera de mis correos electr贸nicos salientes?
Si ves un mensaje como "Tiempo de conexi贸n agotado" al conectarte al servidor MX..., quiz谩s debas verificar si el puerto 25 est谩 bloqueado. Es com煤n que los ISP o proveedores de nube lo bloqueen por defecto, por lo que podr铆as tener que contactar con soporte t茅cnico o abrir un ticket para que lo abran.
驴Qu茅 herramientas debo usar para probar las mejores pr谩cticas de configuraci贸n de correo electr贸nico y la reputaci贸n de IP?
Eche un vistazo a nuestro Preguntas frecuentes aqu铆.