Busqueda sobre Linux y software libre

Noticias sobre linux y software libre - Google 

Cómo resolver problemas de QMail en linux

Le preguntamos a Gemini, la iunteligencia artificial de Google,  cómo resolver problemas de QMail en linux

Explicanos detalladamente cómo resolver problemas de QMail en linux

Resolver problemas en QMail requiere un enfoque diferente al de otros agentes de correo como Postfix o Sendmail. Debido a su arquitectura modular, QMail no utiliza un único archivo de log ni un solo proceso demonio; en su lugar, depende de múltiples binarios independientes, del gestor de servicios daemontools y de registros en formato de tiempo TAI64N.

A continuación se detallan las herramientas, procedimientos de diagnóstico y soluciones a las fallas más comunes en QMail.

1. Inspección de Logs y Estado de Servicios ( daemontools )

Si el sistema utiliza la pila estándar de QMail con daemontools, los servicios se gestionan mediante svstat y svc, y los logs son procesados por multilog.

Verificar el estado de los servicios

Comprueba si los procesos principales están activos y no se están reiniciando en bucle (un PID que cambia constantemente indica que el servicio colapsa al arrancar):

Bash

sudo svstat /service/qmail-send /service/qmail-smtpd

Salida esperada: ... status: up (pid 1234) 300 seconds

Leer los logs formateados (convertir TAI64N)

Los logs almacenados por multilog en /var/log/qmail/ o /var/log/qmail/smtpd/ utilizan marcas de tiempo TAI64N (ej. @4000000062f...). Usa tai64nlocal para convertirlas a hora legible:

Bash

# Ver eventos de la cola de entrega


sudo cat /var/log/qmail/current | tai64nlocal | tail -n 50

# Ver transacciones de recepción SMTP entrante

sudo cat /var/log/qmail/smtpd/current | tai64nlocal | tail -n 50

2. Inspección y Limpieza de la Cola de Correo

QMail no incluye de forma nativa un comando para borrar mensajes individuales de la cola sin romper la estructura de directorios de /var/qmail/queue.

Revisar el estado de la cola

Bash


# Ver recuento total de mensajes en cola

sudo /var/qmail/bin/qmail-qstat

# Ver los remites, destinatarios y tiempo en cola de cada mensaje

sudo /var/qmail/bin/qmail-qread

Administrar la cola con qmHandle

Para manipular mensajes en la cola de forma segura (borrar spam o mensajes atascados), la herramienta estándar recomendada en administración de QMail es qmHandle:

Bash

# Ver mensajes en cola detallados


qmHandle -l

# Borrar un mensaje específico por su ID

qmHandle -d12345

# Borrar TODOS los mensajes atascados en la cola de salida

qmHandle -D

3. Diagnóstico de Errores Frecuentes y Soluciones

Sintoma / Mensaje de ErrorCausa RaízSolución
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)El dominio de destino no está autorizado para retransmisión (Relay) ni es local.Añade el dominio a /var/qmail/control/rcpthosts. Si el cliente envía correo remoto, verifica que la IP esté permitida en la regla de tcpserver (archivo tcp.smtp).
qq trouble creating files (#4.3.0) o qq crashFallo crítico al escribir en /var/qmail/queue/. Puede ser falta de espacio en disco, agotamiento de inodos o permisos corruptos.Verifica espacio e inodos con df -h y df -i. Si el disco está bien, aplica corrección de permisos en el árbol de colas (ver Sección 4).
unable to read controlsEl binario de QMail no puede leer los archivos dentro de /var/qmail/control/.Ajusta la propiedad de los archivos en /var/qmail/control/ a root:qmail o permisos de lectura global (chmod 644 /var/qmail/control/*).
alert: cannot start: unable to open read/queueqmail-send no puede arrancar porque no tiene acceso al directorio /var/qmail/queue/lock.Corrige la propiedad del directorio lock a los usuarios qmailq/qmails.

4. Resolución de Errores de Dominio y Enrutamiento Local

Cuando un correo no llega a las cajas locales o rebota inesperadamente, el problema casi siempre está en la interacción entre tres archivos del directorio /var/qmail/control/:

me: Debe contener el FQDN exacto del servidor (ej. mail.tudominio.com).

locals: Dominios que QMail procesará como usuarios locales del sistema.
  • Si un dominio está en locals, QMail buscará al usuario en /etc/passwd o en los archivos .qmail del usuario.
rcpthosts: Dominios para los cuales el servidor aceptará recibir correo desde internet.

Regla de oro: Todo dominio listado en locals DEBE estar obligatoriamente en rcpthosts. Si está en rcpthosts pero NO en locals, QMail intentará buscar un servidor MX externo para entregarlo (útil si usas QMail como un gateway/relay SMTP).

Reiniciar el servicio tras modificar la configuración

Cada vez que edites un archivo dentro de /var/qmail/control/, debes notificar a qmail-send mediante daemontools o la señal HUP:

Bash

# Con daemontools:


sudo svc -h /service/qmail-send

# O enviando señal HUP directamente al proceso:

sudo kill -HUP $(pgrep qmail-send)

5. Reparación de Permisos y Propietarios en la Cola (queue-fix)

El sistema de archivos de /var/qmail/queue es extremadamente estricto. Si los permisos de un solo subdirectorio cambian (por un apagón repentino del servidor o una migración manual), QMail dejará de procesar envíos inmediatamente.

Para reparar la estructura de la cola de forma automática se utiliza la utilidad queue-fix:

Bash

# 1. Detener los servicios de QMail para evitar corrupción


sudo svc -d /service/qmail-send /service/qmail-smtpd

# 2. Ejecutar la reparación de permisos e inodos de la cola

sudo queue-fix /var/qmail/queue

# 3. Iniciar nuevamente los servicios

sudo svc -u /service/qmail-send /service/qmail-smtpd

¿Quieres ver cómo configurar la retransmisión de correo (relay) basada en IP mediante tcpserver en QMail?

Cómo instalar y configurar QMail en linux

 le preguntamos a Gemini, la inteligencia artificial de Google cómo instalar y configurar QMail en linux

Explicanos detalladamente cómo instalar y configurar QMail en linux

QMail es un Agente de Transferencia de Correo (MTA) reconocido por su arquitectura modular con separación de privilegios, diseñada por Daniel J. Bernstein para garantizar máxima seguridad y evitar los agujeros de seguridad históricos de Sendmail.

A diferencia de Postfix o Sendmail (que corren como un proceso monolítico o con pocos demonios), QMail divide el procesamiento de correos en múltiples binarios pequeños e independientes (qmail-send, qmail-smtpd, qmail-inject, qmail-rspawn, qmail-lspawn) corriendo bajo usuarios de sistema específicos sin privilegios de root.

A continuación se detalla el proceso completo de compilación, creación de usuarios, configuración del directorio de control /var/qmail y puesta en marcha en Linux.

Requisitos Previos

Un servidor Linux con herramientas de compilación (build-essential, gcc, make).

Un nombre de dominio FQDN bien resuelto (ej. mail.tudominio.com).

Acceso como usuario root.

1.1. Crear grupos y usuarios de sistema obligatorios:

Creación de cuentas aisladas por seguridad.


QMail no funcionará si no existen sus usuarios y grupos de sistema dedicados. Cada binario se ejecuta bajo la identidad de un usuario distinto para limitar el impacto si un componente es comprometido.Ejecuta los siguientes comandos para crear los grupos y usuarios con sus UID/GID correspondientes:

Bash

# Crear los grupos de sistema


sudo groupadd nofiles

sudo groupadd qmail


# Crear los usuarios asociados al grupo nofiles

sudo useradd -g nofiles -d /var/qmail/alias -s /nonexistent alias

sudo useradd -g nofiles -d /var/qmail -s /nonexistent qmaild

sudo useradd -g nofiles -d /var/qmail -s /nonexistent qmaill

sudo useradd -g nofiles -d /var/qmail -s /nonexistent qmailp


# Crear los usuarios asociados al grupo qmail

sudo useradd -g qmail -d /var/qmail -s /nonexistent qmailq

sudo useradd -g qmail -d /var/qmail -s /nonexistent qmailr

sudo useradd -g qmail -d /var/qmail -s /nonexistent qmails


2.2. Descargar y parchear el código fuente (netqmail):

Requerido para compatibilidad con compiladores de 64 bits.

El código fuente original de QMail (v1.03) fue escrito en los años 90. En distribuciones Linux modernas de 64 bits (gcc moderno y glibc), la compilación directa fallará si no se aplican parches de compatibilidad (usualmente provistos por el paquete consolidado netqmail).

Bash

cd /usr/local/src

# Descargar el paquete consolidado netqmail

sudo wget https://qmail.org/netqmail-1.06.tar.gz

sudo tar -xzvf netqmail-1.06.tar.gz


cd netqmail-1.06

(En sistemas modernos de 64 bits con gcc estricto, es posible que necesites corregir el tipo de retorno en error.h agregando #include antes de compilar).

3.3. Compilar e instalar binarios:

Despliegue de la estructura en /var/qmail.

Ejecuta la compilación y la instalación de la estructura del sistema en /var/qmail:

Bash

sudo make setup check

Si el comando finaliza sin errores, el compilador habrá generado el árbol completo de directorios en /var/qmail con los permisos exactos asignados a cada usuario de sistema (qmailq, qmailr, etc.).

4.4. Configurar los archivos de dominio en /var/qmail/control:

Archivos críticos dentro de /var/qmail/control.

Toda la lógica de QMail reside en archivos de texto dentro de /var/qmail/control/. Puedes generar la configuración base automáticamente usando el hostname del sistema, o crear los archivos manualmente:

Bash

# Para intentar auto-configurar basándose en el FQDN del sistema:


sudo ./config-fast mail.tudominio.com

Esto poblará los siguientes archivos esenciales dentro de /var/qmail/control/:

ArchivoFunciónEjemplo de contenido
meNombre completo del servidor (FQDN).mail.tudominio.com
defaultdomainDominio por defecto para direcciones locales incompletas.tudominio.com
plusdomainDominio adjunto a nombres con signo más.tudominio.com
localsDominios para los que QMail entregará localmente los correos.localhost

tudominio.com

mail.tudominio.com
rcpthostsDominios que QMail aceptará recibir (evita ser Open Relay).localhost

tudominio.com

5. Configurar el formato Maildir y alias del sistema

Reemplaza el formato mbox tradicional


QMail es el creador del formato Maildir (un archivo individual por correo), que es mucho más seguro y eficiente que el archivo monolítico mbox.

Definir Maildir como el método de entrega por defecto:

Bash


sudo echo './Maildir/' > /var/qmail/control/defaultdelivery

Crear Maildir en la plantilla de usuarios (/etc/skel):

Bash


sudo maildirmake /etc/skel/Maildir

Crear los alias de correo obligatorios para el sistema:

QMail exige definir quién recibirá los correos dirigidos a root, postmaster y mailer-daemon.

Bash

cd /var/qmail/alias

sudo touch .qmail-postmaster .qmail-mailer-daemon .qmail-root


# Reenvía todos los avisos de root a un usuario real (ejemplo: admin)

sudo echo "&admin" > .qmail-root

sudo echo "&admin" > .qmail-postmaster

sudo chmod 644 .qmail-*


6

6. Iniciar los servicios de QMail

Supervisión con daemontools o scripts de inicio

QMail tradicionalmente utiliza daemontools y tcpserver (ucspi-tcp) para la gestión de procesos y el daemon SMTP en el puerto 25.

Para una prueba rápida directa del motor de colas, puedes invocar el script de arranque base:

Bash

# Iniciar la cola de procesamiento de correo de QMail con formato Maildir


sudo /var/qmail/rc

Para exponer el servicio SMTP en el puerto 25 escuchando peticiones entrantes, se invoca tcpserver asignado a qmail-smtpd:

Bash

sudo tcpserver -v -c 100 -u $(id -u qmaild) -g $(id -g nofiles) 0 25 \

/var/qmail/bin/qmail-smtpd 2>&1 | logger -t qmail-smtpd &


Verificación del Funcionamiento

1. Inyectar un correo de prueba vía terminal


Puedes probar el pipeline local de QMail enviando un correo mediante qmail-inject:

Bash

/var/qmail/bin/qmail-inject usuario@tudominio.com << EOF

Subject: Prueba de QMail

From: admin@tudominio.com

Mensaje de prueba enviado a traves de la infraestructura de QMail.

EOF

2. Inspeccionar la cola de mensajes

QMail incluye el binario qmail-qstat para revisar la salud de la cola de correo saliente y entrante:

Bash

sudo /var/qmail/bin/qmail-qstat

# Ejemplo de salida:

# messages in queue: 0

# messages in queue but not yet preprocessed: 0

Archivos y Directorios Clave

Plaintext

/var/qmail/
├── alias/ # Aliases del sistema (.qmail-root, .qmail-postmaster)
├── bin/ # Ejecutables principales (qmail-inject, qmail-send, qmail-smtpd)
├── control/ # Configuración de dominios y políticas (rcpthosts, me, locals)
└── queue/ # Directorio de la cola de correo (privilegios estrictos de qmailq)

¿Quieres integrar QMail con daemontools para gestionar el servicio como un demonio moderno de systemd?


¿Quieres integrar QMail con daemontools para gestionar el servicio como un demonio moderno de systemd?

Cómo resolver problemas de RoundCube en linux

 Le preguntamos a Gemini, la inteligencia artificial de Google, cómo resolver problemas de RoundCube  en linux

Explicanos detalladamente cómo resolver problemas de RoundCube  en linux

Para resolver problemas en Roundcube, el primer paso es entender que Roundcube es una aplicación cliente: casi todos sus errores no se originan en el propio software, sino en fallos de comunicación con la base de datos, bloqueos de certificados/puertos con IMAP (Dovecot) y SMTP (Postfix), permisos de sistema de archivos o límites de PHP.

1. El Centro de Diagnóstico (Logs y Modo Depuración)

Antes de cambiar configuraciones a ciegas, activa el rastreo de eventos para ver exactamente qué falla en la capa web o de red.

Archivos de Registro Principales

Error log de Roundcube: /var/www/roundcube/logs/errors.log (Muestra errores de aplicación, base de datos y fallos de autenticación).

Error log del servidor web: /var/log/nginx/error.log o /var/log/apache2/error.log (Útil para investigar páginas en blanco o errores HTTP 500).

Log del servicio de correo: /var/log/mail.log o journalctl -u dovecot -u postfix (Muestra cómo reaccionan Dovecot y Postfix cuando Roundcube intenta conectar).

Activar la Depuración Profunda de IMAP y SMTP

Si los mensajes de error en la pantalla son genéricos, puedes obligar a Roundcube a registrar cada comando SMTP/IMAP enviado en texto plano.

Edita /var/www/roundcube/config/config.inc.php:

PHP

// Habilita el nivel de log detallado

$config['debug_level'] = 1;



// Muestra el tráfico completo de entrada y salida IMAP

$config['imap_debug'] = true;



// Muestra el tráfico completo de entrada y salida SMTP

$config['smtp_debug'] = true;


Esto generará los archivos /var/www/roundcube/logs/imap.log y /var/www/roundcube/logs/smtp.log con la traza exacta del fallo. (Asegúrate de desactivarlo en producción una vez resuelto el problema, ya que puede llenar el disco rápidamente).

2. Diagnóstico y Solución por Categoría de Error

Error 1: "Connection to storage server failed" (Error de IMAP)

Causa: Roundcube no puede conectar con Dovecot (el servidor que lee los buzones).

Paso 1: Verificar que Dovecot esté escuchando.

Bash


sudo systemctl status dovecot

sudo ss -tlpn | grep -E '143|993'


Paso 2: Certificados SSL/TLS autofirmados o no coincidentes.

Si configuraste IMAP con cifrado SSL/TLS (tls://127.0.0.1 o ssl://localhost), PHP rechazará la conexión si el certificado SSL de Dovecot no es válido o es autofirmado.

Solución: Agrega la exención de verificación de certificados en config.inc.php:

PHP

$config['imap_conn_options'] = array(

        'ssl' => array(

             'verify_peer' => false,

             'verify_peer_name' => false,

            'allow_self_signed' => true,

      ),

);

Error 2: "SMTP Error (-1): Connection failed" / "Authentication failed"

Causa: El usuario puede leer correos pero no puede enviarlos.

Paso 1: Mismos credenciales para envío.

Asegúrate de que Roundcube use el usuario y contraseña de la sesión activa para identificarse ante Postfix:

PHP

// Usar las credenciales del usuario autenticado (%u y %p)

$config['smtp_user'] = '%u';

$config['smtp_pass'] = '%p';


Paso 2: Ignorar errores de certificado SSL en SMTP.

Al igual que con IMAP, si Postfix usa un certificado autofirmado en el puerto 587 o 465, añade:

PHP

$config['smtp_conn_options'] = array(

        'ssl' => array(

        'verify_peer' => false,

        'verify_peer_name' => false,

        'allow_self_signed' => true,

     ),

);


Error 3: "DATABASE ERROR: CONNECTION FAILED"

Causa: La cadena DSN en config.inc.php es incorrecta, MariaDB está caído o faltan permisos de usuario SQL.

Paso 1: Probar la conexión desde la línea de comandos.

Extrae las credenciales del archivo de configuración e intenta ingresar manualmente:

Bash


mysql -u roundcube -p'TuContraseña' -h localhost roundcubemail

Paso 2: Socket UNIX vs IP TCP.

En Linux, si la cadena DSN usa localhost, PHP intentará usar el socket de Unix (/var/run/mysqld/mysqld.sock). Si MariaDB está escuchando solo en TCP, cambiar localhost por 127.0.0.1 resuelve el problema:

PHP

// Cambiar 'localhost' por '127.0.0.1' fuerza conexión TCP

$config['db_dsn'] = 'mysql://roundcube:TuContraseña@127.0.0.1/roundcubemail';


Error 4: Pantalla en Blanco (HTTP 500 / White Screen of Death)

Causa: Casi siempre se debe a módulos de PHP faltantes o permisos de archivos incorrectos.

Paso 1: Verificar extensiones PHP requeridas.

Si falta php-xml o php-mbstring, Roundcube colapsa sin mostrar texto.

Bash

# Comprobar si los módulos requeridos están activos


php -m | grep -E 'xml|mbstring|intl|pdo_mysql'

Si alguno no aparece, instálalo (ejemplo en Ubuntu/Debian):

Bash

sudo apt install php-mbstring php-xml php-intl php-mysql -y

sudo systemctl restart php8.1-fpm # Ajusta a tu versión de PHP


Paso 2: Corregir permisos de carpetas temp/ y logs/.

Si el usuario del servidor web (www-data o nginx) no puede escribir en los directorios de trabajo, la página no cargará.

Bash

sudo chown -R www-data:www-data /var/www/roundcube

sudo chmod -R 775 /var/www/roundcube/temp /var/www/roundcube/logs


Error 5: "File too large" (Fallo al adjuntar archivos)

Causa: La restricción está en las directivas de PHP, no en Roundcube.

Para permitir adjuntos de hasta 25 MB, edita tu archivo php.ini (habitualmente en /etc/php/8.x/fpm/php.ini o /etc/php/8.x/apache2/php.ini):

Ini, TOML

upload_max_filesize = 25M

post_max_size = 30M

memory_limit = 256M


Reinicia el proceso de PHP y el servidor web para aplicar cambios:

Bash

sudo systemctl restart php8.1-fpm nginx

¿Quieres configurar el plugin de autenticación de dos factores (2FA) en Roundcube?

Cómo instalar y configurar RoundCube en linux

 Le preguntamos a Gemini, la inteligencia artificial de Google, cómo instalar y configurar RoundCube en linux

Explicanos detalladamente cómo instalar y configurar RoundCube en linux

Roundcube es el cliente de correo Webmail de código abierto más popular, ligero y moderno. A diferencia de suites complejas como Open-Xchange, Roundcube no administra cuentas ni almacena correos por sí mismo: actúa como una interfaz web ligera que habla directamente con tu servidor IMAP (Dovecot) para leer/organizar mensajes y con SMTP (Postfix) para enviarlos.

Para este despliegue, asumiremos un entorno Linux estándar (Ubuntu/Debian o RHEL/Rocky Linux) con Nginx/Apache, PHP (8.x) y MariaDB.

Requisitos Previos de PHP

Roundcube requiere varias extensiones de PHP instaladas para procesar caracteres, adjuntos, base de datos y cifrado:

Bash

# En Ubuntu / Debian


sudo apt update

sudo apt install php-fpm php-mysql php-xml php-mbstring php-intl php-zip php-gd php-curl php-imagick -y


# En RHEL / Rocky Linux / AlmaLinux

sudo dnf install php php-fpm php-mysqlnd php-xml php-mbstring php-intl php-zip php-gd php-json -y

1.1. Configurar MariaDB / MySQL:

Crear la base de datos y usuario dedicado.


Roundcube almacena allí la libreta de direcciones, identidades, preferencias de usuario y sesiones (no los correos electrónicos).

Accede a MariaDB como root:

Bash


sudo mariadb -u root -p

Ejecuta los siguientes comandos SQL:

SQLCREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'TuClaveSegura123!';

GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcube'@'localhost';

FLUSH PRIVILEGES;

EXIT;


2.2. Descargar e instalar Roundcube:

Descarga del paquete oficial Complete.


Descargamos la edición Complete (incluye dependencias de Composer precompiladas) desde el repositorio oficial.

Bash

cd /tmp

# Descargar la versión LTS actual

wget https://github.com/roundcube/roundcubemail/releases/download/1.6.10/roundcubemail-1.6.10-complete.tar.gz

# Extraer y mover a la ruta web estándar

tar -xzvf roundcubemail-*-complete.tar.gz

sudo mv roundcubemail-* /var/www/roundcube


3.3. Importar esquema SQL y permisos:

Asignación de permisos al servidor web.


Cargamos las tablas iniciales en MariaDB y ajustamos la propiedad del directorio al usuario del servidor web (www-data en Debian/Ubuntu, nginx o apache en RHEL).

Importar esquema de base de datos:

Bash


sudo mariadb -u roundcube -pTuClaveSegura123! roundcubemail < /var/www/roundcube/SQL/mysql.initial.sql

Ajustar permisos de archivos:

Bash

# En Debian/Ubuntu:

sudo chown -R www-data:www-data /var/www/roundcube

# En RHEL/Rocky (usando apache/nginx):

# sudo chown -R nginx:nginx /var/www/roundcube


sudo chmod -R 755 /var/www/roundcube

sudo chmod -R 777 /var/www/roundcube/temp /var/www/roundcube/logs


4.4. Configurar el archivo principal (config.inc.php):

Conexión IMAP, SMTP y llaves de cifrado.


Crea el archivo de configuración copiando la plantilla predeterminada:

Bash

sudo cp /var/www/roundcube/config/config.inc.php.sample /var/www/roundcube/config/config.inc.php

sudo nano /var/www/roundcube/config/config.inc.php

Edita o establece las siguientes variables esenciales:

PHP

5.5. Configurar el Servidor Web:

VirtualHost para Nginx o Apache.


Ejemplo para Nginx con PHP-FPM:

Crea el archivo /etc/nginx/sites-available/roundcube:

Nginx

server {

       listen 80;

       server_name webmail.tudominio.com;

       root /var/www/roundcube;

       index index.php index.html;



       # Ocultar archivos sensibles

        location ~ ^/(config|temp|logs|build|SQL|bin)/ {

                deny all;

        }



        location ~ \.php$ {

                include snippets/fastcgi-php.conf;

                fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Ajusta a tu versión de PHP

         }



          location ~ /\. {

                 deny all;

          }

}

Activa el sitio y recarga Nginx:

Bash


sudo ln -s /etc/nginx/sites-available/roundcube /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl reload nginx


6.6. Eliminar el instalador por seguridad:

Bloqueo de seguridad.


Si usaste el asistente web en navegador

([http://webmail.tudominio.com/installer]

(http://webmail.tudominio.com/installer)), o para evitar ataques de reinstalación, borra inmediatamente el directorio installer:

Bash

sudo rm -rf /var/www/roundcube/installer


Verificación y Solución de Errores Comunes

Error / SíntomaCausa FrecuenteSolución
"DATABASE ERROR: CONNECTION FAILED"Credenciales erróneas o MariaDB no escucha en socket local.Verifica config['db_dsn'] en config.inc.php y prueba conectarte manualmente con mysql -u roundcube -p.
"Connection to storage server failed"Roundcube no puede conectar a Dovecot (IMAP).Verifica si Dovecot está corriendo (systemctl status dovecot) y escuchando en el puerto 143/993 (ss -tlpn | grep 143).
"SMTP Error (-1): Connection failed"Postfix está bloqueado o rechaza la IP local.Asegúrate de que 127.0.0.1 esté en mynetworks en /etc/postfix/main.cf o que el puerto 25/587 responda.
Archivos adjuntos fallan al subirLímite de carga de PHP muy bajo.Eleva upload_max_filesize y post_max_size en /etc/php/8.x/fpm/php.ini (ej. 25M).

¿Quieres integrar el plugin de cambio de contraseña ('password') para que los usuarios puedan cambiar su clave de Linux/Postfix desde Roundcube?

Cómo hacer un script de rescate usando ddrescue por si sospechas que tu disco de origen tiene daños físicos que G4L no puede saltar en G4L en linux

 Le preguntamos a Gemini, la inteligencia artificial de Google, nos explique cómo hacer un script de rescate usando ddrescue por si sospechas que tu disco de origen tiene daños físicos que G4L no puede saltar en G4L en linux

Explicanos detalladamente cómo hacer un script de rescate usando ddrescue por si sospechas que tu disco de origen tiene daños físicos que G4L no puede saltar en G4L en linux

Cuando tienes un disco con daño físico severo (sectores defectuosos o ruidos mecánicos), herramientas de clonación basadas en archivos (como G4L, Clonezilla o cp) a menudo fallan. Se bloquean intentando leer un sector dañado, se congelan y la operación entera aborta.

Aquí es donde entra GNU ddrescue (no confundir con dd_rescue). ddrescue está diseñado explícitamente para hardware defectuoso: lee los sectores sanos primero a máxima velocidad y luego, de forma inteligente, intenta recuperar los sectores dañados en múltiples pasadas, saltándose los errores en lugar de colgarse.

A continuación, te detallo cómo crear un script de rescate robusto usando ddrescue.

1. El Concepto Clave: El Archivo de Mapa (Mapfile)

La magia de ddrescue reside en el mapfile (antiguamente llamado logfile). Este archivo de texto registra exactamente qué sectores ya se han copiado con éxito y cuáles dieron error.

Esto permite interrumpir el script en cualquier momento, apagar el equipo (para evitar que el disco dañado se sobrecaliente) y, al volver a ejecutar el mismo comando, ddrescue retomará el trabajo exactamente donde lo dejó, sin tener que volver a copiar los bloques sanos.

2. Preparación del Entorno

Debes ejecutar este procedimiento desde un entorno Live USB (como SystemRescueCD, Ubuntu Live, o el entorno base de G4L si te permite salir a la terminal). Nunca intentes clonar el disco desde el cual has arrancado el sistema.

Identifica tus discos:

Bash


sudo lsblk

Supongamos que /dev/sda es el disco dañado (origen).

Supongamos que /dev/sdb es el disco nuevo/sano (destino). Debe ser de tamaño igual o mayor al original.

Instala ddrescue (si no está en tu Live CD):

Bash


sudo apt update && sudo apt install gddrescue -y # En Ubuntu/Debian

sudo dnf install ddrescue -y # En Fedora/RHEL


1.Fase 1: Extraer lo sano lo más rápido posible:

La Fase Rápida (Sin reintentos).

El objetivo aquí es rescatar la mayor cantidad de datos posible antes de que el disco muera por completo, saltando inmediatamente cualquier error.

Bash

sudo ddrescue -n -d /dev/sda /dev/sdb /root/rescate.map

-n (no-scrape): Evita la fase de "rascado" (no intenta recuperar bloques defectuosos). Si encuentra un error, lo marca en el mapa y salta al siguiente bloque.

-d (direct): Usa acceso directo al disco, ignorando la caché del kernel de Linux. Es vital para discos moribundos.

/dev/sda: Disco origen (dañado).

/dev/sdb: Disco destino. (Nota: Todo en /dev/sdb será borrado).

/root/rescate.map: El archivo de mapa. Cuidalo con tu vida.

2.Fase 2: Intentar leer los sectores difíciles (3 pasadas):

La Fase de Recuperación.


Una vez que has asegurado el 90-95% de los datos sanos, usamos el mismo comando y el mismo mapa, pero activamos los reintentos para luchar por los bloques problemáticos.

Bash

sudo ddrescue -r 3 -d /dev/sda /dev/sdb /root/rescate.map

-r 3 (retries): Intenta leer cada sector defectuoso hasta 3 veces antes de rendirse definitivamente.

Nota que volvemos a usar exactamente el mismo archivo rescate.map. ddrescue leerá este archivo, verá qué bloques fallaron en la Fase 1, y se dirigirá exclusivamente a ellos.3.

Fase 2 Alternativa: Invertir la dirección de lectura:

Si la Fase 2 es muy lenta.


Si el disco tiene un daño físico severo al principio del plato (por ejemplo, el cabezal aterriza siempre en el mismo sector malo y se atasca), puedes indicarle a ddrescue que intente leer el disco de atrás hacia adelante.

Bash

sudo ddrescue -R -r 3 -d /dev/sda /dev/sdb /root/rescate.map

-R (reverse): Lee los sectores desde el final del disco hacia el principio. A menudo, esto desatasca cabezales mecánicos que se bloquean en lectura secuencial normal.

3. Automatizando el Proceso: El Script Bash

Si deseas dejar esto automatizado para no tener que ejecutar los comandos manualmente (por ejemplo, si vas a dejar la máquina trabajando toda la noche), puedes empaquetarlo en un sencillo script.

Crea el archivo:

Bash


sudo nano /root/script_rescate.sh

Pega el siguiente código, modificando las variables ORIGEN y DESTINO según tu caso:

Bash

#!/bin/bash

# ========================================================
# Script de Rescate con GNU ddrescue
# ========================================================


ORIGEN="/dev/sda"
DESTINO="/dev/sdb"
MAPFILE="/root/rescate.map"


echo "======================================================"
echo "INICIANDO RESCATE CON DDRESCUE"
echo "Origen: $ORIGEN"
echo "Destino: $DESTINO"
echo "======================================================"
echo "¡ADVERTENCIA! Todo en $DESTINO será destruido."
read -p "Presiona ENTER para continuar o Ctrl+C para abortar..."


echo "------------------------------------------------------"
echo "[FASE 1] Extrayendo datos sanos rápidamente..."
echo "------------------------------------------------------"
ddrescue -n -d $ORIGEN $DESTINO $MAPFILE


echo "------------------------------------------------------"
echo "[FASE 2] Recuperación profunda de sectores dañados..."
echo "------------------------------------------------------"
ddrescue -d -r 3 $ORIGEN $DESTINO $MAPFILE


echo "======================================================"
echo "RESCATE FINALIZADO"
echo "======================================================"


Hazlo ejecutable y lánzalo:
 
Bash

sudo chmod +x /root/script_rescate.sh

sudo /root/script_rescate.sh


4. Notas Críticas Post-Rescate

El destino será idéntico al origen: Si /dev/sdb (el destino) es más grande que /dev/sda (el origen), el espacio sobrante quedará "no asignado". Podrás expandir la partición después usando herramientas como gparted.

Comprobación del sistema de archivos: Tras la clonación, el sistema de archivos en el disco destino estará en estado "sucio" (dirty), especialmente si hubo sectores que no se pudieron recuperar. Debes ejecutar un fsck en las particiones del disco destino antes de intentar montar o arrancar desde él.

Bash

# Ejemplo para revisar la partición principal de Linux


sudo fsck -f -y /dev/sdb1

¿Quieres saber cómo usar ddrescue para crear una imagen en lugar de clonar de disco a disco?

Cómo resolver problemas de PostFix en linux

 Le preguntamos a Gemini, la inteligencia artificial de Google, nos explique cómo resolver problemas de PostFix en linux

Explicanos detalladamente cómo resolver problemas de PostFix en linux

Cuando Postfix presenta problemas, la gran ventaja es que no hay cajas negras: su sistema de registro es extremadamente detallado y te dirá exactamente en qué punto de la transacción SMTP falló el proceso.

Para diagnosticar y resolver problemas en Postfix, debes dominar tres áreas: la lectura de logs, la gestión de la cola de mensajes y la auditoría de configuración.

1. El Centro de Mando: Leer los Logs

Casi cualquier problema de entrega o recepción dejará un rastro en el archivo de registro principal de correo. En Ubuntu/Debian, este archivo suele ser /var/log/mail.log o /var/log/syslog (en sistemas más recientes se lee con journalctl -u postfix).

Para ver los eventos en tiempo real mientras haces una prueba de envío:

Bash

sudo tail -f /var/log/mail.log

Fíjate siempre en la variable status= al final de cada línea de transacción:

EstadoSignificadoDónde buscar la solución
sentÉxito. Postfix entregó el correo.Si el usuario no lo ve, el problema no es Postfix. Dile que revise su carpeta de Spam.
deferredAplazado. Hubo un error temporal y Postfix reintentará enviarlo más tarde.Suele ser un problema de red (puerto 25 bloqueado), firewall, o que el servidor destino no responde.
bouncedRechazado permanentemente.El servidor destino rechazó el mensaje activamente (falta de registros DNS, IP en lista negra o buzón inexistente). Lee el mensaje de error adjunto en el log.
rejectTu servidor bloqueó el correo entrante.Verifica tus restricciones en main.cf (ej. smtpd_recipient_restrictions).

2. Gestión de la Cola de Correo (Mail Queue)

Cuando los correos tienen el estado deferred, no se pierden inmediatamente; se quedan atascados en la "cola" del servidor.

Ver los correos atascados:

Bash


mailq

# O su equivalente moderno:

postqueue -p

Esto te mostrará una lista con el ID del mensaje (un código alfanumérico como 3A4B5C6D), el remitente, el destinatario y el motivo por el cual está atascado.

Forzar el reenvío de toda la cola:

Si el internet se cayó o el firewall estaba bloqueando la salida y ya lo arreglaste, puedes obligar a Postfix a procesar la cola inmediatamente sin esperar al ciclo automático:

Bash

sudo postqueue -f

Eliminar un correo problemático:Si un bot generó miles de correos y están colapsando tu servidor, bórralos usando su ID:

Bash

sudo postsuper -d

# Para borrar TODA la cola sin piedad:

sudo postsuper -d ALL

3. Comandos de Auditoría de Configuración

Si editaste /etc/postfix/main.cf y el servidor no arranca o se comporta de forma errática, usa las herramientas integradas de validación:

Revisión de sintaxis y permisos:

Bash


sudo postfix check

Si no devuelve nada (silencio), la sintaxis y los permisos de los directorios son correctos. Si hay un error tipográfico o de permisos, te alertará.

Ver solo tu configuración personalizada:

El archivo main.cf tiene cientos de variables por defecto ocultas. Para ver exactamente qué valores están activos y sobrescritos en tu servidor, usa:

Bash

postconf -n

4. Errores Comunes y Soluciones Rápidas

Error: Connection timed out (Status: deferred)


El problema: Postfix intenta enviar un correo hacia internet, pero la conexión se agota.

La causa: El 99% de las veces, tu proveedor de nube (AWS, Google Cloud, DigitalOcean, Azure) tiene un bloqueo físico de salida en el puerto 25 para prevenir spam.

La solución: Debes abrir un ticket de soporte con tu proveedor pidiendo que desboqueen el puerto 25 de salida, o configurar Postfix para que enrute los correos a través de un servicio externo (un Relay Host como SendGrid o Mailgun).

Error: Relay access denied

El problema: Alguien intenta enviar un correo a través de tu servidor hacia internet, y Postfix le cierra la puerta.

La causa: Postfix está haciendo bien su trabajo. Si permitiera que cualquiera enviara correos, serías un "Open Relay" (un paraíso para spammers).

La solución: Si el correo lo genera una aplicación web tuya, asegúrate de que la IP del servidor web esté incluida en la variable mynetworks dentro de main.cf. Si es un usuario final, necesitas configurar autenticación SASL (para que inicien sesión con usuario y contraseña antes de enviar).

Error: 550 5.7.1 Unauthenticated email is not accepted (Status: bounced)

El problema: Gmail o Microsoft rechazan de tajo tu correo.

La causa: No confían en tu servidor. Tu IP no tiene un registro inverso configurado (rDNS), o tu dominio carece de firmas criptográficas.

La solución: Debes configurar el registro PTR en tu proveedor de hosting y añadir registros SPF, DKIM y DMARC en la zona DNS de tu dominio.

¿Quieres aprender a configurar los registros SPF y DKIM para evitar la carpeta de spam?

Cómo instalar y configurar PostFix en linux

 Le pedimos a Gemini, la inteligencia artificial de Google, nos explique cómo instalar y configurar PostFix en linux

Explicanos detalladamente cómo instalar y configurar PostFix en linux

Postfix es el Agente de Transferencia de Correo (MTA) más popular, rápido y seguro en entornos Linux. A diferencia de las soluciones "todo en uno" que revisamos antes (como Mail-in-a-Box u Open-Xchange), Postfix hace una sola cosa, pero la hace excepcionalmente bien: enrutar y entregar correos (SMTP).

Por sí solo, Postfix solo envía correos o los recibe y los guarda en un archivo de texto en el servidor (/var/mail/). No tiene base de datos, ni interfaz web, ni IMAP.

Para levantar un servidor funcional desde cero, utilizaremos Ubuntu/Debian como referencia.

Requisitos Previos Críticos

Un FQDN válido: Tu servidor debe tener un nombre de host completo (ej. mail.tudominio.com).

Registros DNS : Debes tener un registro A apuntando a tu IP, y un registro MX apuntando a mail.tudominio.com.

Puerto 25 abierto: Tu proveedor de VPS/Red debe permitir el tráfico de salida por el puerto 25 (muchos proveedores modernos como AWS, DigitalOcean o Google Cloud lo bloquean por defecto para evitar spam).

1. Preparar la identidad del servidor:

Configurar el Hostname local.


Postfix depende en gran medida del nombre del host para presentarse a otros servidores de correo en internet (el saludo EHLO). Si este nombre no coincide con tu DNS, tus correos serán rechazados por Gmail o Microsoft.

Bash

sudo hostnamectl set-hostname mail.tudominio.com

Edita el archivo de resolución local:

Bash

sudo nano /etc/hosts

Añade la IP pública de tu servidor vinculada al nombre:

Plaintext

# Reemplaza 12.34.56.78 por tu IP real

12.34.56.78 mail.tudominio.com mail


2. Instalar los paquetes base:

Selección del modo 'Sitio de Internet'.


Instalaremos el núcleo de Postfix junto con mailutils, un paquete que nos dará herramientas para enviar correos directamente desde la terminal.

Bash

sudo apt update

sudo apt install postfix mailutils -y

Durante la instalación en Ubuntu/Debian, aparecerá una pantalla interactiva (debconf). Responde lo siguiente:

General type of mail configuration: Selecciona Internet Site (Sitio de Internet).

System mail name: Escribe tu dominio principal (ej. tudominio.com, NO mail.tudominio.com).

3. Configurar el motor principal (main.cf):

Modificar variables de enrutamiento y origen.


Toda la lógica de enrutamiento de Postfix vive en un solo archivo: /etc/postfix/main.cf. Haz una copia de seguridad y edítalo:

Bash

sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

sudo nano /etc/postfix/main.cf


Busca y asegúrate de que estas variables estén configuradas exactamente así (modificando tu dominio):

Ini, TOML

# El nombre del servidor que envía físicamente el correo

myhostname = mail.tudominio.com

# El dominio que se adjuntará a los correos enviados sin dominio

myorigin = /etc/mailname

# IMPORTANTE: Los dominios para los que este servidor ACEPTARÁ correos finales

# Si alguien envía un correo a admin@tudominio.com, Postfix sabrá que es para él y no lo reenviará.

mydestination = $myhostname, tudominio.com, localhost.localdomain, localhost

# Interfaces donde Postfix escuchará (all = todas las IPs del servidor)

inet_interfaces = all

inet_protocols = ipv4

4. Asegurar el parámetro 'mynetworks':

Evitar convertirte en un nodo de SPAM.


Este es el paso de seguridad más crítico. La variable mynetworks define quién tiene permiso para enviar correos a través de tu servidor hacia internet sin proporcionar contraseña.

Si dejas esto abierto, redes de bots usarán tu servidor para enviar spam masivo. Asegúrate de que solo incluya tu red local (loopback):

Ini, TOML

# En el mismo archivo main.cf, la línea debe verse así:

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

(Si vas a instalar un cliente webmail o un CRM en otro servidor, deberás añadir la IP de ese servidor a esta lista).

5. Aplicar cambios y probar el flujo de salida:

Enviar un mensaje a tu cuenta personal.


Guarda el archivo (Ctrl+O, Enter, Ctrl+X) y reinicia el demonio de Postfix para cargar la nueva configuración.

Bash

sudo systemctl restart postfix

sudo systemctl enable postfix


Ahora, dispara un correo de prueba hacia tu cuenta personal (Gmail/Outlook) para verificar que el tráfico de salida hacia internet funciona:

Bash

echo "Este es el cuerpo del mensaje. El servidor Postfix está vivo y enrutando." | mail -s "Prueba desde la consola Linux" tu_correo_real@gmail.com

Dónde buscar si el correo no llega

Si ejecutas la prueba del Paso 5 y el correo no llega a tu bandeja (ni siquiera a la carpeta de Spam), el registro del sistema te dirá exactamente el motivo del fallo.

Abre el archivo de registro en tiempo real:

Bash


sudo tail -f /var/log/mail.log

Busca el bloque que corresponde a tu envío y fíjate en la variable status=:

status=sent ➔ Postfix entregó el correo exitosamente al servidor de Google/Microsoft. (Si no lo ves, está en Spam).

status=bounced ➔ El servidor receptor lo rechazó (generalmente porque te faltan los registros SPF/DKIM o tu IP no tiene reputación).

status=deferred ➔ Postfix no puede salir hacia internet. Esto confirma casi al 100% que tu proveedor de VPS tiene un firewall bloqueando el puerto 25 de salida.

¿Quieres integrar IMAP para poder leer los correos en tu móvil/PC?

Cómo resolver problemas de Open-Xchange en linux

 Le pedimos a Gemini, la inteligencia artificial de Google, nos explique cómo resolver problemas de Open-Xchange en linux

Explicanos detalladamente cómo resolver problemas de Open-Xchange en linux

A diferencia de un cliente de correo tradicional, Open-Xchange (OX App Suite) es una arquitectura distribuida de tres capas: el Frontend (Apache/Nginx), el Middleware (un entorno Java/OSGi) y el Backend de Almacenamiento/Datos (MariaDB, Dovecot y el Filestore).

Cuando OX falla, el 90% del trabajo consiste en determinar en cuál de esas tres capas se rompió la cadena. Aquí tienes la guía sistemática para aislar y resolver los problemas más habituales en servidores Linux.

1. El Mapa de Logs: Dónde buscar la causa raíz

El Middleware en Java genera registros de depuración muy detallados. Ante cualquier anomalía, estos son los archivos que debes inspeccionar primero:

CapaArchivo de Log / Comando¿Qué indica este registro?
Middleware Java/var/log/open-xchange/open-xchange.log.0Excepciones de Java, fallos de módulos OSGi, problemas de autenticación o errores de conexión a MariaDB.
Servidor de Aplicaciónjournalctl -u open-xchange -fEstado de arranque del demonio, fallos al iniciar la JVM o errores de memoria.
Frontend Apache/var/log/apache2/error.logErrores de comunicación AJP/HTTP (proxy: AJP: attempt to connect failed).
Integridad de Red/var/log/mail.log o /var/log/dovecot.logRechazos de conexión cuando OX intenta leer el correo por IMAP/SMTP.

2. Fallos Frecuentes y Soluciones Tácticas

Problema A: Error "502 Bad Gateway" o "503 Service Unavailable" en la Web

Este síntoma indica que Apache funciona correctamente, pero no puede comunicarse con el motor Java de Open-Xchange (puerto AJP 8009 o HTTP 8008).

Paso 1: Verificar si el proceso Java está escuchando

Bash


sudo ss -tlpn | grep 8009

Si el puerto no devuelve ningún resultado, el Middleware se ha caído o está bloqueado durante el arranque.

Paso 2: Inspeccionar la memoria de la Máquina Virtual de Java (JVM)

OX App Suite requiere bastante memoria RAM. Si la JVM se queda sin memoria (Java Heap Space), el recolector de basura congelará el proceso o el sistema cerrará el servicio (Out of Memory).

Diagnóstico: Busca en /var/log/open-xchange/open-xchange.log.0 la línea java.lang.OutOfMemoryError: Java heap space.

Solución: Aumenta el límite de memoria asignado a la JVM editando el archivo de entorno /etc/open-xchange/ox-scriptconf.sh (o /etc/default/open-xchange según la versión):

Bash

# Modifica o añade la variable asignando más memoria (ejemplo: 4GB)


JAVA_XMX="4096M"

Reinicia el servicio para aplicar los cambios:Bashsudo systemctl restart open-xchange

Problema B: El usuario entra al panel web, pero la pestaña "Correo" da error

Este es un error común de desacoplamiento:
el inicio de sesión web valida contra la base de datos de OX, pero al abrir la pestaña de Correo, OX actúa como un cliente IMAP/SMTP que intenta conectar al servidor Mail (Dovecot/Postfix).

Síntomas en el log (open-xchange.log.0):com.openxchange.mail.mailreader.AuthorizationException: Authentication failed o Connection refused.

Solución:

Comprobar la conectividad desde el servidor OX hacia el servidor IMAP:

Bash

telnet localhost 143

# O si usas SSL/TLS:

openssl s_client -connect localhost:993

Corregir la configuración de host en el Contexto de OX:

Si el servidor IMAP cambió de IP o nombre, debes actualizar los datos del contexto usando las herramientas CLI de /opt/open-xchange/sbin/:

Bash

sudo /opt/open-xchange/sbin/changecontext \

   --contextid=1001 \

   --imaphost=127.0.0.1 \

   --imapport=143 \

   --smtphost=127.0.0.1 \

   --smtpport=25 \

   --adminuser=oxadmin \

   --adminpass=ClaveMaestraAdmin

Problema C: Fallos al subir archivos adjuntos o usar OX Drive

Si los usuarios pueden redactar correos pero reciben un error al adjuntar archivos o al guardar documentos en la nube de OX Drive, el problema casi siempre es de permisos en el sistema de archivos (Filestore).

Solución:

El directorio donde OX guarda los adjuntos físicos (por defecto /var/spool/open-xchange/filestore) debe pertenecer estrictamente al usuario de sistema open-xchange.

Revisa los permisos y corrige la propiedad de la carpeta:

Bash


sudo chown -R open-xchange:open-xchange /var/spool/open-xchange/filestore

sudo chmod -R 770 /var/spool/open-xchange/filestore


Verifica si el disco se ha quedado sin espacio disponible:Bashdf -h /var/spool/open-xchange/filestore

Problema D: Corrupción de Esquema o Bloqueos en MariaDB

Si realizaste una actualización del paquete open-xchange o el servidor sufrió un apagón repentino, la base de datos de configuración (configdb) o las bases de datos de contexto pueden quedar fuera de sintaxis o bloqueadas.

Herramientas internas de diagnóstico de DB:

Escanear la salud y coherencia de las bases de datos de OX:

Bash

sudo /opt/open-xchange/sbin/checkdatabase \

   --adminuser=oxadmin \

   --adminpass=ClaveMaestraAdmin

Desbloquear un contexto que se quedó en modo mantenimiento:Si una tarea administrativa falló a medio camino, el contexto puede quedar marcado como "bloqueado". Puedes verificar su estado y liberarlo con:

Bash

# Ver lista de contextos y su estado

sudo /opt/open-xchange/sbin/listcontext --adminuser=oxadmin --adminpass=ClaveMaestraAdmin

# Desbloquear el contexto afectado (ej. 1001)

sudo /opt/open-xchange/sbin/unlockcontext --contextid=1001 --adminuser=oxadmin --adminpass=ClaveMaestraAdmin

3. Resumen del Protocolo de Emergencia

Cuando todo falle y la interfaz web no responda:

Bash

# 1. Revisa errores graves en tiempo real

sudo tail -n 100 -f /var/log/open-xchange/open-xchange.log.0 | grep -E "ERROR|SEVERE"

# 2. Reinicia la secuencia en orden jerárquico

sudo systemctl restart mariadb

sudo systemctl restart open-xchange

sudo systemctl restart apache2


¿Quieres analizar un mensaje de error específico de tus logs de Open-Xchange para interpretarlo?

Cómo instalar y configurar Open Xchange en linux

 Le pedimos a Gemini, la inteligencia artificial de Google, nos explique cómo instalar y configurar Open Xchange en linux

Explicanos detalladamente cómo instalar y configurar Open Xchange en linux

Open-Xchange ( OX App Suite ) es una plataforma de groupware de nivel empresarial. A diferencia de clientes de webmail más sencillos (como Roundcube) o de soluciones todo en uno integradas, Open-Xchange está diseñado para escalar masivamente y se divide en tres capas bien definidas:

Frontend: Una interfaz rica en HTML5/JS servida a través de Apache.

Middleware: Un motor en Java corriendo sobre un runtime OSGi (open-xchange-core) que gestiona la lógica de negocio, reglas y APIs.

Almacenamiento y Correo: MariaDB para metadatos y preferencias, junto con un servidor IMAP/SMTP externo (usualmente Dovecot + Postfix).

Esa arquitectura modular hace que su instalación sea un proceso secuencial muy técnico. A continuación tienes la guía detallada para desplegarlo en un sistema basado en Debian/Ubuntu.

Requisitos Previos

Sistema Operativo: Debian 12 o Ubuntu 22.04 LTS (limpio).

Recursos: Mínimo 4 GB de RAM (se recomiendan 8 GB, ya que el motor Java de OX es exigente con la memoria).

Servicios base: Servidor MariaDB y un servidor IMAP (como Dovecot) previamente configurado y funcionando.

FQDN: Tu servidor debe responder a un nombre FQDN válido (ej. ox.tuempresa.com).

1

1. Configurar las fuentes de paquetes


Añadir los repositorios oficiales de OX

Open-Xchange requiere registrar sus llaves GPG y repositorios oficiales. Descarga las llaves de repositorio e inclúyelas en tu gestor de paquetes.

Bash

sudo apt update && sudo apt install wget gnupg2 -y

# Importar la clave GPG oficial de Open-Xchange

wget -qO - https://software.open-xchange.com/oxbuildkey.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/open-xchange.gpg

# Agregar el repositorio de OX App Suite (reemplaza 'DebianBookworm' según tu distribución)

echo "deb https://software.open-xchange.com/products/appsuite/stable/backend/DebianBookworm/ /" | sudo tee /etc/apt/sources.list.d/open-xchange.list

echo "deb https://software.open-xchange.com/products/appsuite/stable/appsuiteui/DebianBookworm/ /" | sudo tee -a /etc/apt/sources.list.d/open-xchange.list

sudo apt update


2

2. Preparar MariaDB


Optimizar InnoDB para transacciones de OX

Open-Xchange realiza un uso intensivo de transacciones en la base de datos. Debes ajustar el archivo de configuración de MariaDB

(/etc/mysql/mariadb.conf.d/50-server.cnf).

Asegúrate de configurar los siguientes parámetros dentro de la sección [mysqld]:

Ini, TOML


[mysqld]

max_allowed_packet = 16M

group_concat_max_len = 16384

innodb_buffer_pool_size = 2G

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci


Reinicia MariaDB y crea el usuario administrativo para OX:

Bash


sudo systemctl restart mariadb

# Accede a MySQL para crear los accesos

sudo mysql -u root -p -e "CREATE USER 'openxchange'@'localhost' IDENTIFIED BY 'TuClaveSeguraDB';"

sudo mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'openxchange'@'localhost' WITH GRANT OPTION;"

sudo mysql -u root -p -e "FLUSH PRIVILEGES;"


3

3. Instalar el Middleware y Frontend

Motor Java + Interfaz Web


Instala los paquetes principales del backend (Java), los módulos de autenticación por base de datos y la interfaz web.

Bash

sudo apt install -y \

     open-xchange \

     open-xchange-authentication-database \

     open-xchange-grizzly \

     open-xchange-admin \

     open-xchange-appsuite-ui \

     apache2 libapache2-mod-dnssd

4

4. Inicializar la Base de Datos y el Servidor

Esquemas de configuración del Middleware


Open-Xchange incluye herramientas CLI ubicadas en /opt/open-xchange/sbin/ para construir la estructura de la base de datos e inicializar el middleware.

Bash

# 1. Inicializar la base de datos de configuración (configdb)


sudo /opt/open-xchange/sbin/initconfigdb \

    --configdb-pass=TuClaveSeguraDB \

    --configdb-user=openxchange \

    --configdb-host=localhost \

    --configdb-port=3306

# 2. Asignar contraseña al usuario maestro del sistema (oxadmin)

sudo /opt/open-xchange/sbin/oxinstaller \

    --oxadmin-password=ClaveMaestraAdmin \

    --configdb-pass=TuClaveSeguraDB \

    --soffice-path=/usr/bin/soffice

# 3. Registrar el servidor actual en el clúster local de OX

sudo /opt/open-xchange/sbin/registerserver \

    --name=oxserver \

    --adminuser=oxadmin \

    --adminpass=ClaveMaestraAdmin

# 4. Registrar la base de datos de usuarios (database)

sudo /opt/open-xchange/sbin/registerdatabase \

    --name=oxdatabase \

    --db-is-master=true \

    --dbhost=localhost \

    --dbuser=openxchange \

    --dbpasswd=TuClaveSeguraDB \

    --adminuser=oxadmin \

    --adminpass=ClaveMaestraAdmin

5

5. Configurar el Servidor Web (Apache)

Proxy de Apache hacia la API de Java


Habilita los módulos de proxy de Apache para que reenvíen las solicitudes de la interfaz pública hacia el puerto interno del Middleware (por defecto el puerto 8009 AJP o 8008 HTTP).

Bash

sudo a2enmod proxy proxy_http proxy_ajp rewrite headers expires deflator

# Aplica la configuración por defecto que viene empaquetada con OX

sudo cp /opt/open-xchange/etc/groupware_apache.conf /etc/apache2/sites-available/ox.conf

sudo a2ensite ox.conf

sudo systemctl restart apache2

sudo systemctl start open-xchange


6

6. Aprovisionar el primer 'Contexto'

Creación de Contextos y Usuarios


Open-Xchange es un sistema multitenant nativo. Todo se organiza mediante Contextos (que representan a una empresa o dominio) identificados por un número ID (ej. 1001).

Bash

# 1. Crear un contexto ligado a tu servidor IMAP/SMTP


sudo /opt/open-xchange/sbin/createcontext \

    --contextid=1001 \

    --contextname="TuEmpresa" \

    --quota=1024 \

    --access-combination-name=groupware_standard \

    --displayname="Admin TuEmpresa" \

    --givenname="Admin" \

    --surname="General" \

    --email="admin@tuempresa.com" \

    --username="admin" \

    --password="ClaveUsuarioAdmin" \

    --imaphost="localhost" \

    --imapport=143 \

    --smtphost="localhost" \

    --smtpport=25 \

    --adminuser=oxadmin \

    --adminpass=ClaveMaestraAdmin

# 2. Crear un usuario adicional dentro del contexto 1001

sudo /opt/open-xchange/sbin/createuser \

    --contextid=1001 \

    --username="juan" \

    --givenname="Juan" \

    --surname="Pérez" \

    --displayname="Juan Pérez" \

    --email="juan@tuempresa.com" \

    --password="ClaveDeJuan" \

    --imaplogin="juan@tuempresa.com" \

    --adminuser=oxadmin \

    --adminpass=ClaveMaestraAdmin

El concepto clave: "Contextos" en Open-Xchange

El punto que más suele confundir al administrar Open-Xchange por primera vez es que no puedes crear usuarios sueltos.
  • Cada dominio o cliente requiere su propio Context ID (por ejemplo, 1001 para empresaA.com, 1002 para empresaB.com).
  • Para administrar o crear cuentas en el futuro, siempre debes especificar a qué --contextid pertenece el usuario que estás modificando.
Una vez completados estos pasos, puedes abrir tu navegador en [http://ox.tuempresa.com/appsuite/](http://ox.tuempresa.com/appsuite/) e iniciar sesión con el usuario (admin o juan) y la contraseña que creaste en el paso 6.

¿Quieres ver cómo integrar Open-Xchange Documents (OX Drive/Docs) para edición colaborativa de archivos?

Ads by CJ - Linux Foundation

Share This