Autoalojado
Empezando
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 completa:Cada línea de código que procesa sus 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 apertura:Las vulnerabilidades pueden ser identificadas y solucionadas por una comunidad global
- Sin dependencia del 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, licenciado bajo la licencia MIT.
La arquitectura incluye contenedores para:
- Servidor SMTP para correo electrónico saliente
- Servidores IMAP/POP3 para la recuperación de correo electrónico
- Interfaz web para administración
- Base de datos para el almacenamiento de configuración
- Redis para almacenamiento en caché y rendimiento
- SQLite para almacenamiento seguro y cifrado de buzones de correo
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+).
- Recursos:1 vCPU y 2 GB de RAM
- Acceso raíz:Privilegios administrativos para ejecutar comandos.
- Nombre de dominio:Un dominio personalizado listo para la configuración de DNS.
- IP limpiaAsegúrese de que su servidor tenga una dirección IP limpia y sin reputación de spam revisando las listas negras. Más información. aquí.
- Dirección IP pública con soporte para el puerto 25
- Capacidad de establecer PTR inverso
- Compatibilidad con IPv4 e IPv6
[!TIP] Consulta nuestra lista de proveedores de servidores de correo increíbles
Cloud-init / 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 utilizado para recordatorios de vencimiento de certbotDOMAIN
- dominio personalizado (p. ej.example.com
) utilizado para configuración de auto hospedajeAUTH_BASIC_USERNAME
- nombre de usuario utilizado en la primera configuración para proteger el sitioAUTH_BASIC_PASSWORD
- contraseña utilizada en la primera configuración para proteger el sitio/root/.cloudflare.ini
- (Solo para usuarios de CloudflareArchivo de configuración de Cloudflare utilizado por Certbot para la configuración de DNS. Requiere que configures tu token de API mediantedns_cloudflare_api_token
. Leer más 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
Agregar DEBUG=true
delante del script de instalación para 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 último código de reenvío de correo electrónico, configure el entorno, solicite su dominio personalizado y configure todos los certificados, claves y secretos necesarios.
- Configurar copia de seguridadSe configurará un cron para realizar copias de seguridad de MongoDB y Redis mediante un almacén compatible con S3 para un almacenamiento remoto seguro. Además, se realizará una copia de seguridad de SQLite al iniciar sesión si se realizan cambios para copias de seguridad seguras y cifradas.
- Actualización de la configuración:Configure un cron para buscar actualizaciones nocturnas que reconstruirán y reiniciarán de forma segura los componentes de la infraestructura.
- Renovar certificadosCertbot/lets encrypt se utiliza para certificados SSL y las claves expiran cada 3 meses. Esto renovará los certificados de su dominio y los guardará en la carpeta correspondiente para que los componentes relacionados los consuman. Ver rutas de archivos importantes
- Restaurar desde una copia de seguridad:Activará mongodb y redis para restaurar desde los datos de respaldo.
Configuración inicial (Opción 1)
Elija una opción 1. Initial setup
Para empezar.
Una vez completado, debería ver un mensaje de éxito. Incluso puede ejecutar docker ps
Para ver el 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 | Ninguna | Ejecutor de tareas y trabajos en segundo plano |
SMTP | 465/587 | Servidor SMTP para correo electrónico saliente |
SMTP Bree | Ninguna | 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 | Ninguna | Trabajo en segundo plano de SQLite |
CalDAV | 5000 | Servidor CalDAV 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 | Ninguna | Bases de datos SQLite para buzones de correo cifrados |
Rutas de archivos importantes
Nota: Ruta del host A continuación se muestra en relación con /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 |
[!IMPORTANTE] Guardar el
.env
Archivo seguro. 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. Anote todo lo que esté entre paréntesis (<>
) es dinámico y necesita 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 | 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".
-
Iniciar sesión e incorporar su dominio
- Inicie sesión con un correo electrónico y contraseña válidos.
- Ingrese el nombre de dominio que desea configurar (este debe coincidir con la configuración de DNS).
- Siga las instrucciones para agregar lo requerido. MX y TXT registros para verificación.
- Configuración completa
- Una vez verificado, accede a la página de Alias para crear tu primer alias.
- Opcionalmente, configure SMTP para correo electrónico saliente en el Configuración del dominioEsto requiere registros DNS adicionales.
[!NOTA] 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.
Pruebas
Creando tu primer alias
- Accede a la página de alias. Abre la página de administración de alias:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Agregar un nuevo alias
- Hacer clic Agregar alias (arriba a la derecha).
- Ingrese el nombre del alias y ajuste la configuración del correo electrónico según sea necesario.
- (Opcional) Habilitar IMAP/POP3/CalDAV Apoye seleccionando la casilla de verificación.
- Hacer clic Crear alias.
- Establecer una contraseña
- Hacer clic 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.
- Configurar su cliente de correo electrónico
- Utilice un cliente de correo electrónico como Thunderbird.
- Introduzca el nombre de alias y la contraseña generada.
- Configurar el IMAP y SMTP ajustes en consecuencia.
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 |
Enviar/Recibir 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?
Actualmente buscamos compatibilidad con Debian, macOS y buscaremos otras. Por favor, abra un discusión o contribuya si desea ver a otros apoyados.
¿Por qué falla el desafío Certbot Acme?
El error más común es que certbot/letsencrypt a veces solicitará 2 desafíos. Debes asegurarte de agregar BOTH 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 y obsoleto o que no haya detectado los cambios recientes.
Otra opción es utilizar los cambios de DNS automatizados de cerbot configurando el /root/.cloudflare.ini
Archivo con el token de API en cloud-init/user-data al configurar el VPS o cree este archivo y vuelva a ejecutar el script. Esto gestionará automáticamente los cambios de DNS y las actualizaciones de desafío.
¿Cuál es el nombre de usuario y la contraseña de autenticación básicos?
Para el autohospedaje, agregamos una ventana emergente de autenticación nativa del navegador por primera vez con un nombre de usuario simple (admin
) y contraseña (generada aleatoriamente durante la configuración inicial). Solo la añadimos 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... .env
archivar bajo AUTH_BASIC_USERNAME
y AUTH_BASIC_PASSWORD
.
¿Cómo sé qué se está ejecutando?
Tu puedes correr docker ps
para ver todos los contenedores en funcionamiento que se están creando desde el docker-compose-self-hosting.yml
archivo. También puedes ejecutar docker ps -a
para ver todo (incluidos los contenedores que no están en ejecución).
¿Cómo puedo saber si algo que debería estar funcionando no se está ejecutando?
Tu puedes correr docker ps -a
Para verlo todo (incluidos los contenedores que no se están ejecutando). Es posible que vea un registro de salida o una nota.
¿Cómo encuentro registros?
Puede obtener más registros a través de docker logs -f <container_name>
Si algo salió, es probable que esté relacionado con el .env
El archivo está configurado incorrectamente.
Dentro de la interfaz web, puedes ver /admin/emails
y /admin/logs
para registros de correo electrónico saliente y 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?
Echa un vistazo a nuestro Preguntas frecuentes aquí.