El correo electrónico es una excelente solución para centralizar y administrar el intercambio de información entre los integrantes de una organización, pero no es un secreto que los proveedores de correo electrónico comerciales, incluyendo aquellos que hacen marketing con falsas ofertas de privacidad y anonimato, comparten activamente o han compartido información sobre los usuarios con empresas y autoridades del Estado.
Todo grupo con una base de miembros lo suficientemente amplia debe considerar la importancia de controlar sus comunicaciones si quiere mantenerse al margen de potenciales adversarios con recursos. Esta guía propone una solución para administrar un servicio de correo electrónico anónimo con salida a internet combinando mailcow con la red Tor.
🐮 + 🐋 + 🧅 = 💕
Siguiendo estos pasos se conseguirá el despliegue de un servicio que brinda anonimato al cliente, no obstante la dirección del servidor estará expuesta al comunicarse con otros servidores de internet, así que a efectos de esta guía es importante disponer de un servidor cuya titularidad no esté vinculada en ningún sentido a la identidad real del administrador.
[ Pendiente: Publicar artículo sobre servidores anónimos ]
Para esta guía usaré como ejemplo el dominio mail.dominio.net, la dirección IP 1.2.3.4 y el hostname servicio-oculto.onion.
Requisitos mínimos
- 1GHz CPU
- >= 6 GiB RAM
- >= 20 GiB SSD (sin contar los mensajes)
- x86_64 o ARM
Puertos
Comprueba que los puertos necesarios están abiertos y no están ocupados por otros procesos:
$ sudo ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
Si el comando devuelve algún resultado, elimina o detén el proceso que se está ejecutando en ese puerto. También puedes ajustar los puertos de mailcow modificando el archivo de configuración mailcow.conf más adelante.
Instala Docker
Necesitarás instalar Docker y Docker Compose previamente. Estos enlaces contienen información sobre las opciones disponibles para su instalación:
Instalación rápida para la mayoría de distribuciones Linux:
$ curl -sSL https://get.docker.com/ | CHANNEL=stable sh
$ systemctl enable --now docker
$ LATEST=$(curl -Ls -w %{url_effective} -o /dev/null https://github.com/docker/compose/releases/latest) && LATEST=${LATEST##*/} && curl -L https://github.com/docker/compose/releases/download/$LATEST/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
Configura SELinux
∗ Si no trabajas con SELinux puedes saltar al siguiente apartado.
Comprueba si el paquete container-selinux existe en el sistema:
$ rpm -qa | grep container-selinux
Si la respuesta está vacía, instala container-selinux usando el gestor de paquetes.
Comprueba si Docker soporta SELinux y habilítalo en caso negativo:
$ docker info | grep selinux
$ [ $? == 0 ] && printf "{\n "selinux-enabled": true\n}\n" | tee /etc/docker/daemon.json
Reinicia Docker:
$ systemctl restart docker
Instala mailcow
mailcow: dockerized o simplemente mailcow es una suite de correo electrónico de código abierto basada en Docker. mailcow se compone de elementos conocidos y usados desde hace mucho tiempo, que combinados dan como resultado un servidor de correo electrónico sin preocupaciones.
Inicia sesión como administrador en la consola:
$ sudo su -
Clona el repositorio de mailcow en /opt:
# cd /opt
# git clone https://github.com/mailcow/mailcow-dockerized
# cd mailcow-dockerized
Genera un archivo de configuración ejecutando el siguiente script:
# ./generate_config.sh
Añade la dirección mail.dominio.net cuando se te pida un FQDN y elige el branch master.
Cambia la configuración según tus necesidades editando el archivo mailcow.conf.
Para finalizar la instalación, ejecuta estos comandos:
# docker compose pull
# docker compose up -d
Postinstalación
Cambia el valor de enable_ipv6 para desactivar IPv6 editando docker-compose.yml:
enable_ipv6: false
Desactiva el contenedor ipv6nat-mailcow creando el archivo docker-compose.override.yml en /opt/mailcow-dockerized:
services:
ipv6nat-mailcow:
image: bash:latest
restart: "no"
entrypoint: ["echo", "ipv6nat disabled in compose.override.yml"]
Edita /opt/mailcow-dockerized/data/conf/unbound/unbound.conf y establece do-ip6 como no:
do-ip6: no
Desactiva IPv6 en Postfix creando /opt/mailcow-dockerized/data/conf/postfix/extra.cf:
smtp_address_preference = ipv4
inet_protocols = ipv4
Reinicia Postfix:
# docker compose restart postfix-mailcow
Si Docker ha desactivado IPv6 completamente, entonces arregla estos archivos:
# sed -i '/::/d' data/conf/nginx/listen_*
# sed -i '/::/d' data/conf/nginx/templates/listen*
# sed -i '/::/d' data/conf/nginx/dynmaps.conf
# sed -i 's/,\[::\]//g' data/conf/dovecot/dovecot.conf
# sed -i 's/\[::\]://g' data/conf/phpfpm/php-fpm.d/pools.conf
Reinicia los contenedores:
# docker compose down
# docker compose up -d
Preparación del nombre de dominio
Visita KYCnot.me para encontrar un proveedor de dominios que acepte Monero como método de pago. Puedes leer el artículo de W1lder sobre crédito irrastreable para aprender a conseguir XMR anónimamente.
[ Pendiente: Actualizar la guía sobre crédito irrastreable ]
Ejemplos de proveedores compatibles con estas necesidades:
Si ya dispones de un nombre de dominio, realiza estas operaciones para prepararlo. El proceso para llevar a cabo estas tareas variará dependiendo de tu proveedor de dominios:
mail IN A 1.2.3.4
autodiscover IN CNAME mail.dominio.net.
autoconfig IN CNAME mail.dominio.net.
@ IN MX 10 mail.dominio.net.
Autentica tu servicio y protégelo frente a la suplantación de identidad implementando registros DKIM, SPF y DMARC.
DKIM es un protocolo que verifica la autenticidad de un mensaje vinculándolo a un nombre de dominio. Al habilitar DKIM, puedes firmar digitalmente tus correos salientes utilizando una llave privada. La finalidad de DKIM es garantizar que el nombre de dominio no haya sido suplantado y que el mensaje no haya sido modificado mientras se transmitía.
Para obtener el valor del registro, en la UI de mailcow, dirígete a Sistema > Configuración > Opciones > Registros ARC/DKIM y copia el texto que corresponde a tu dominio. A continuación añade el registro:
dkim._domainkey IN TXT "<valor>"
El SPF es un protocolo de autenticación que relaciona un dominio con una dirección de correo electrónico, estableciendo qué remitentes están autorizados a enviar emails desde ese dominio. De esta manera, otros proveedores de email pueden verificar la autenticidad de los mensajes entrantes y asegurarse de que provienen de remitentes autorizados por el propietario del dominio.
@ IN TXT "v=spf1 mx a -all"
DMARC es una política de autenticación de correo electrónico que ayuda a prevenir el phishing y el spam al verificar que los mensajes sean auténticos y enviados desde servidores autorizados.
_dmarc IN TXT "v=DMARC1; p=reject; sp=reject; pct=20; rua=mailto:<correo 1>; ruf=mailto:<correo 2>; adkim=r; aspf=r; fo=1; ri=86400;"
Deberás sustituir <correo 1> por la dirección de correo donde se envían los informes de DMARC. Estos informes resumen los resultados de autenticación. Sustituye también <correo 2> por una dirección donde recibir informes forenses detallados sobre fallas específicas de DMARC.
Creación del servicio oculto
La intención de esta configuración es dar a los clientes opciones para interactuar con el servidor de forma anónima.
Instala el paquete del cliente de Tor:
$ sudo apt install tor
Crea y define el directorio del servicio oculto, así como los puertos que reflejará. Para ello, edita /etc/tor/torrc:
HiddenServiceDir /var/lib/tor/mailcow/
HiddenServicePort <puerto> <dirección>:<puerto>
HiddenServicePort <puerto> <dirección>:<puerto>
[...]
Los posibles valores de <puerto> dependerán de lo que esté asignado en mailcow.conf. Añade esos puertos que quieras poner a disposición en Tor.
Reinicia el servicio de Tor para aplicar los cambios:
$ systemctl restart tor
Finalmente obtén el hostname del servicio oculto y comprueba que está funcionando:
# cat /var/lib/tor/mailcow/hostname
# curl --socks5-hostname 127.0.0.1:9050 servicio-oculto.onion
Aprende más sobre Tor:
Configuración de mailcow
Usando el navegador, accede al panel de mailcow en la dirección mail.dominio.net:443 e inicia sesión con los credenciales admin:moohoo.
En el apartado Sistema > Configuración > Editar detalles del administrador puedes añadir, eliminar y modificar cuentas de administrador.
En E-Mail > Configuración > Dominios, añade el dominio que usarán las direcciones de correo y rellena el resto de campos en función de tus necesidades. Puedes añadir distintos nombres de dominio.
El apartado E-Mail > Configuración > Buzones sirve para crear cuentas de usuario con acceso al correo. Puedes especificar los credenciales de la cuenta, el nombre de dominio para la dirección de correo y los protocolos permitidos, entre otras reglas.
Varios parámetros de configuración de la interfaz de mailcow se pueden cambiar creando el archivo /opt/mailcow-dockerized/data/web/inc/vars.local.inc.php que sobrescribe la configuración por defecto de vars.inc.php. No debes cambiar los valores dentro de vars.inc.php, sino utilizarlos como plantilla.
Los parámetros de configuración de la interfaz de usuario de mailcow pueden ser usados para distintas operaciones. A efectos de esta guía podrían interesar las siguientes:
- Establecer una expresión regular de complejidad de contraseña
- Cambiar la duración de las sesiones
- Alternar la anonimización de IP
mailcow también soporta el uso de doble factor de autenticación. Obtén más información leyendo la documentación:
Copias de seguridad
Ejecuta crontab -e y pega el contenido a continuación si necesitas automatizar la creación de copias de seguridad para tu servicio.
0 5 * * * MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 7
Webmail y clientes externos
Para ingresar al servicio de correo a través del navegador, accede a mail.dominio.net:443/SOGo para iniciar sesión con un usuario previamente creado desde el panel de administración. A continuación deberías ver la interfaz web del servicio de correo electrónico.
Aprende a configurar el webmail:
Conéctate al servicio usando un cliente externo:
Notas finales
Es crucial que una organización clandestina asegure su independencia y soberanía construyendo estructuras digitales propias. Esta configuración posibilitará el acceso anónimo a un servicio de correo federado.
mailcow integra funciones esenciales para este tipo de servicio, como un agente de transferencia, un cliente web y distintas características de seguridad, todo bajo el mismo paquete. Esto es perfecto para quienes buscan un desplegar servicio de correo electrónico sencillo, fácil de usar y confiable.
Para más información, consulta la documentación oficial de mailcow:
napalm@cryptolab.net