iRedMail

Actualizar iRedMail

Pasos previos

Backups

Realizar backup si es posible de la máquina entera (en el caso de máquina virtual).

Realizar backup de las Bases de datos de iRedMail como:

amavisd

iredadmin

iredapd

roundcubemail

sogo

vmail

Realizar backup de la propias bases de datos de Mysql (permisos y usuarios)

Actualización

El proceso de actualización de iRedMail se ejecuta siguiendo los siguientes pasos:

Versión de iRedMail

Actualizar el fichero /etc/iredmail-release con el nuevo número de versión de iRedMail

nano /etc/iredmail-release

iRedMail almacena la versión en el fichero /etc/iredmail-release después de la instalación. Esto nos permitirá saber la versión de iRedMail que estamos ejecutando. Por ejemplo

root@mx01:~#cat /etc/iredmail-release
1.0.1

iRedMail no dispone como tal en muchos casos de una versión, sino que se trata de múltiples productos gestionados por un paquete de instalación. Este número nos permite conocer la versión del instalador (y por lo tanto de los módulos instalados)

Actualizar iRedAPD

Actualizamos iRedAPD (servidor de políticas Postfix) a la última versión estable. Para ello ejecutaremos los siguientes procesos. Es importante conocer la versión de iRedAPD correspondiente con el la base sobre la que estamos instalando

cd /root
wget https://dl.iredmail.org/yum/misc/iRedAPD-X.Y.tar.bz2
tar xjf iRedAPD-X.Y.tar.bz2
cd iRedAPD-X.Y/tools
bash upgrade_iredapd.sh
service iredapd restart

Actualizar iRedAdmin

Actualizamos iRedAdmin (la versión de código abierto) a la última versión estable

cd /root
wget https://dl.iredmail.org/yum/misc/iRedAdmin-A.B.tar.bz2
tar xjf iRedAdmin-A.B.tar.bz2
cd iRedAdmin-A.B/tools
bash upgrade_iredadmin.sh

Actualizar iRedAdmin Pro

Actualizamos iRedAdmin Pro (la versión de pago) a la última versión estable

cd /root
tar xjf iRedAdmin-Pro-SQL-X.Y.Z.tar.bz2
cd iRedAdmin-Pro-SQL-X.Y.Z/
cd tools
bash upgrade_iredadmin.sh

Actualización de otros

Comprobar en la documentación si hay que realizar la actualización de otros subsistemas como por ejemplo roundcube, sogo, netdata, amavisd, mlmmjadmin, etc

Script de actualización

Vamos a ver un pequeño script de automatización de las tareas comentadas

#Procedure for upgrading iRedMail


cd /root
wget https://dl.iredmail.org/yum/misc/iRedAPD-X.X.tar.bz2
tar xjf iRedAPD-X.X.tar.bz2
cd iRedAPD-X.X/tools
bash upgrade_iredapd.sh
service iredapd restart
cd /root
wget https://dl.iredmail.org/yum/misc/iRedAdmin-X.X.tar.bz2
tar xjf iRedAdmin-X.X.tar.bz2
cd iRedAdmin-X.X/tools
bash upgrade_iredadmin.sh
cd /root
tar xjf iRedAdmin-Pro-SQL-X.X.x.tar.bz2
cd iRedAdmin-Pro-SQL-X.X.X/
cd tools
bash upgrade_iredadmin.sh
cd /root
wget https://dl.iredmail.org/yum/misc/roundcubemail-X.X.C-complete.tar.gz
tar xf roundcubemail-1.4.2-complete.tar
cd roundcubemail-1.4.2/bin
./installto.sh /opt/www/roundcubemail

Agregar Nodo Cluster iRedMail

Para agregar un nodo a una instalación existente de iRedMail, deberemos de seguir los siguientes pasos

Instalar Debian

Configurar el cliente de NTP

Comprobar el fichero de hosts, que contiene la información correcta del nombre del host

instalamos la herramienta de descompresión:

apt-get install bzip2

descargamos la version de ieRdMail a instalar

en este caso

iRedMail-1.3.2.tar.gz

descomprimimos el tar.gz

tar -xvf iRedMail-1.3.2.tar.gz

Se instala cliente del almacenamiento compartido (glusterfs, ceph o NFS)

se configura /etc/fstab

Por ejemplo:

gluster01:/gv0 /mnt/mailstore glusterfs defaults,_netdev 0 0

Reiniciamos o hacemos un mount -a se copia el fichero config de otro de los nodos (estará en root/iredmail0.0...) al nuevo, al directorio de instalación

se ejecuta lo siguiente:
USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='IP_DEL_GALERA' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='root' \
    MYSQL_ROOT_PASSWD='MIPASSWORD' \
    MYSQL_GRANT_HOST='%' \
    INITIALIZE_SQL_DATA=NO \
    bash iRedMail.sh

Se lanza la instalacion

aplica permisos , esto tarda (hacer un mod para eliminar el cambio de permisos)

Luego pregunta , respondemos N

termina y reboot

CERTIFICADOS

el archivo de configuracion esta en:

nano /etc/nginx/templates/ssl.tmpl

COPIAMOS en /etc/ la carpeta cert que contiene una carpeta /micertificado , ahi estaran nuestro pem y nuestro key

en /etc/ssl/private renombremos iredmail.key y subimos nuestro .key para renombrarlo como iRedMail.key

en /etc/ssl/certs renombremos iredmail.crt y subimos nuestro .pem para renombrarlo como iRedMail.crt

Hacemos un ln

ln -s /etc/ssl/certs/micertificado.crt /etc/ssl/certs/iRedMail.crt
ln -s /etc/ssl/private/micertificado.key /etc/ssl/private/iRedMail.key

REDIRECCION DEL WEBMAIL POR DEFECTO

ponemos la redireccion hacia sogo por defecto, en:

nano /var/www/html/index.html

sustituimos mail por sogo

reiniciamos el servicio ngnix

INSTALAR IREDADMIN

Copiamos el  tar iRedAPD-4.6.tar.gz a /root

Descomprimimos

tar -czvf iRedAPD-4.6.tar.gz

Ejecutamos

cd /root/
tar xjf iRedAdmin-Pro-x.y.z.tar.bz2
cd iRedAdmin-Pro-x.y.z/tools/
bash upgrade_iredadmin.sh

Repetimos la operación con el IredAPD

descargamos el iRedAPD-4.6.tar.gz

descomprimimos

vamos a tools/

bash upgrade_iredadmin.sh

MAQUETAR SOGO

nano /etc/sogo/sogo.conf

Modificamos para que coincida con el de producción. modificamos workers

nano /etc/default/sogo

PREFORK=500 (o lo que ponga en pro)

CONFIGURAMOS MEMCACHED

nano /etc/memcached.conf

lo dejamos como en produccion

REVISAR POSTFIX

nano /etc/postfix/main.cf

nano /etc/postfix/main.cf

cotejar con produccion

subimos nuestros ficheros a :

/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css

/usr/lib/GNUstep/SOGo/WebServerResources/img/sogo-full.svg

Comandos SQL iRedMail

Actualizar todos las quotas de los buzones

use vmail;
update mailbox set quota =25620;

También se puede hacer por dominio

update mailbox set quota =25620 where username like '%@midominio%';

Actualizar la zona horaria y el idioma

update mailbox set settings ='timezone:Europe/Madrid;';
update mailbox set language ='es_ES';

Deshabilitar sogo para un dominio

Existen 4 campos nuevos en la tabla vmail.mailbox, denominados

enablesogo

enablesogowebmail

enablesogocalendar

enablesogoactivesync

update mailbox set enablesogo = 0 where username like '%@midominio%';
update mailbox set enablesogowebmail = 'n' where username like '%@midominio%';
update mailbox set enablesogocalendar = 'n' where username like '%@midominio%';
update mailbox set enablesogoactivesync = 'n' where username like '%@midominio%';

DKIM en iRedMail

Generar claves DKIM

amavisd-new genrsa /var/lib/dkim/dominio.com.pem 2048
chown amavis:amavis /var/lib/dkim/dominio.com.pem
chmod 0400 /var/lib/dkim/dominio.com.pem

Agregar claves DKIM al fichero de configuración de amavis

nano /etc/amavis/conf.d/50-user

Buscar:

# Add dkim_key here.
dkim_key('dominio1.es', 'dkim', '/var/lib/dkim/dominio1.es.pem');
dkim_key('dominio2.com', 'dkim', '/var/lib/dkim/dominio2.pem');

Un poco más adelante en:

@dkim_signature_options_bysender_maps = ({
    # 'd' defaults to a domain of an author/sender address,
    # 's' defaults to whatever selector is offered by a matching key

    # Per-domain dkim key
    #"domain.com"  => { d => "domain.com", a => 'rsa-sha256', ttl => 10*24*3600 },

Agregamos (aunque esto ya estará)

 # catch-all (one dkim key for all domains)
    '.' => {d => 'dominio1.es',
            a => 'rsa-sha256',
            c => 'relaxed/simple',
            ttl => 30*24*3600 },
 "dominio2.com" => { d=> 'dominio2.com',a =>  'rsa-sha256',c => 'relaxed/simple', ttl => 30*24*3600 },

Debemos comprobar que termina en

});

Comprobar que el la configuración es correcta

Para comprobar ejecutamos

 amavisd-new showkeys

Nos aparecerá lo siguiente

; key#1 2048 bits, i=dkim, d=dominio1.es, /var/lib/dkim/dominio1.es.pem
dkim._dominio1.mail365.es.	3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsKiLwJouZh6vqHn1QYWg"
  "XXXXXXX".........
  "7wIDAQAB"); 
key#2 2048 bits, i=dkim, d=dominio2.com, /var/lib/dkim/dominio2.com.pem
dkim._domainkey.dominio2.com.	3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA03gU5SjyduyGFPILfTQh"
  ""XXXXXXX".........
  "lwIDAQAB")

Agregar los registros DNS

A continuación iremos a nuestra configuración dns y agregaremos el registro (en este caso dkim._domainkey.dominio2.com)

El registro contendrá:

"v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA03gU5SjyduyGFPILfTQhXXXXXXX.......lwIDAQAB"

Es decir la palabra clave v=DKIM1; p= y la clave sin retornos de carro ni comillas

Testar los registros DNS

root@mail:/#  amavisd-new testkeys
TESTING#1 dominio1.es: dkim._domainkey.dominio1.es => pass
TESTING#2 dominio2.com: dkim._domainkey.dominio2.com => invalid (public key: not available)

En este caso nos da error puesto que todavía no se han replicado los registros DNS

Estructura Tablas Sogo

La estructura de las tablas en SoGo es la siguiente:

------------------------------------------------------------
-- Fully-Unicode compliant SOGo MySQL schema
--
-- Required MySQL version: >= 5.5.5
-- Required SOGo version: >= 4.0.0
--
-- This schema includes some specific table creation
-- parameters needed for complete Unicode coverage
-- (required for emoji character support, for instance).
--
-- Note: SOGo automagically creates those tables on start,
-- but *without* full Unicode compliance.  So this schema
-- must be imported before SOGo runs for the first time.
--
-- Strongly suggested MySQL configuration settings
-- (innodb* parameters are mandatory):
--
--   [client]
--   default-character-set          = utf8mb4
--
--   [mysql]
--   default-character-set          = utf8mb4
--
--   [mysqld]
--   character-set-client-handshake = FALSE
--   character-set-server           = utf8mb4
--   collation-server               = utf8mb4_unicode_ci
--   innodb_file_per_table          = TRUE
--   innodb_file_format             = barracuda
--   innodb_large_prefix            = TRUE
--
-- This schema assumes the SOGo table names are configured
-- like the following; adjust if needed:
--
--   OCSAclURL               -> sogo_acl
--   OCSCacheFolderURL       -> sogo_cache_folder
--   OCSEMailAlarmsFolderURL -> sogo_alarms_folder
--   OCSFolderInfoURL        -> sogo_folder_info
--   OCSSessionsFolderURL    -> sogo_sessions_folder
--   OCSStoreURL             -> sogo_store
--   SOGoProfileURL          -> sogo_user_profile
--
-- SOGo needs to know MySQL has full Unicode coverage;
-- the following needs to be put in sogo.conf:
--
--   MySQL4Encoding = "utf8mb4";
--
------------------------------------------------------------
CREATE TABLE sogo_acl (
	c_folder_id int(11)      NOT NULL,
	c_object    varchar(255) NOT NULL,
	c_uid       varchar(255) NOT NULL,
	c_role      varchar(80)  NOT NULL,
	KEY sogo_acl_c_folder_id_idx (c_folder_id),
	KEY sogo_acl_c_uid_idx (c_uid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_alarms_folder (
	c_path          varchar(255) NOT NULL,
	c_name          varchar(255) NOT NULL,
	c_uid           varchar(255) NOT NULL,
	c_recurrence_id int(11)      DEFAULT NULL,
	c_alarm_number  int(11)      NOT NULL,
	c_alarm_date    int(11)      NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_cache_folder (
	c_uid          varchar(255) NOT NULL,
	c_path         varchar(255) NOT NULL,
	c_parent_path  varchar(255) DEFAULT NULL,
	c_type         tinyint(3)   unsigned NOT NULL,
	c_creationdate int(11)      NOT NULL,
	c_lastmodified int(11)      NOT NULL,
	c_version      int(11)      NOT NULL DEFAULT '0',
	c_deleted      tinyint(4)   NOT NULL DEFAULT '0',
	c_content      longtext,
	PRIMARY KEY (c_uid,c_path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_folder_info (
	c_folder_id      bigint(20)    unsigned NOT NULL AUTO_INCREMENT,
	c_path           varchar(255)  NOT NULL,
	c_path1          varchar(255)  NOT NULL,
	c_path2          varchar(255)  DEFAULT NULL,
	c_path3          varchar(255)  DEFAULT NULL,
	c_path4          varchar(255)  DEFAULT NULL,
	c_foldername     varchar(255)  NOT NULL,
	c_location       varchar(2048) DEFAULT NULL,
	c_quick_location varchar(2048) DEFAULT NULL,
	c_acl_location   varchar(2048) DEFAULT NULL,
	c_folder_type    varchar(255)  NOT NULL,
	PRIMARY KEY (c_path),
	UNIQUE KEY c_folder_id (c_folder_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_quick_appointment (
	c_folder_id      int(11)       NOT NULL,
	c_name           varchar(255)  NOT NULL,
	c_uid            varchar(255)  NOT NULL,
	c_startdate      int(11)       DEFAULT NULL,
	c_enddate        int(11)       DEFAULT NULL,
	c_cycleenddate   int(11)       DEFAULT NULL,
	c_title          varchar(1000) NOT NULL,
	c_participants   text,
	c_isallday       int(11)       DEFAULT NULL,
	c_iscycle        int(11)       DEFAULT NULL,
	c_cycleinfo      text,
	c_classification int(11)       NOT NULL,
	c_isopaque       int(11)       NOT NULL,
	c_status         int(11)       NOT NULL,
	c_priority       int(11)       DEFAULT NULL,
	c_location       varchar(255)  DEFAULT NULL,
	c_orgmail        varchar(255)  DEFAULT NULL,
	c_partmails      text,
	c_partstates     text,
	c_category       varchar(255)  DEFAULT NULL,
	c_sequence       int(11)       DEFAULT NULL,
	c_component      varchar(10)   NOT NULL,
	c_nextalarm      int(11)       DEFAULT NULL,
	c_description    text,
	PRIMARY KEY (c_folder_id,c_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_quick_contact (
	c_folder_id       int(11)      NOT NULL,
	c_name            varchar(255) NOT NULL,
	c_givenname       varchar(255) DEFAULT NULL,
	c_cn              varchar(255) DEFAULT NULL,
	c_sn              varchar(255) DEFAULT NULL,
	c_screenname      varchar(255) DEFAULT NULL,
	c_l               varchar(255) DEFAULT NULL,
	c_mail            text         DEFAULT NULL,
	c_o               varchar(255) DEFAULT NULL,
	c_ou              varchar(255) DEFAULT NULL,
	c_telephonenumber varchar(255) DEFAULT NULL,
	c_categories      varchar(255) DEFAULT NULL,
	c_component       varchar(10)  NOT NULL,
	c_hascertificate  int(11)      DEFAULT 0,
	PRIMARY KEY (c_folder_id,c_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_sessions_folder (
	c_id           varchar(255) NOT NULL,
	c_value        varchar(255) NOT NULL,
	c_creationdate int(11)      NOT NULL,
	c_lastseen     int(11)      NOT NULL,
	PRIMARY KEY (c_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_store (
	c_folder_id    int(11)      NOT NULL,
	c_name         varchar(255) NOT NULL DEFAULT '',
	c_content      mediumtext   NOT NULL,
	c_creationdate int(11)      NOT NULL,
	c_lastmodified int(11)      NOT NULL,
	c_version      int(11)      NOT NULL,
	c_deleted      int(11)      DEFAULT NULL,
	PRIMARY KEY (c_folder_id,c_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

CREATE TABLE sogo_user_profile (
	c_uid      varchar(255) NOT NULL,
	c_defaults longtext,
	c_settings longtext,
	PRIMARY KEY (c_uid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

Instalar iRedMail

Instalación de iRedMail

Preparación del entorno

Instalaremos el servidor con una distribución de Linux Debian o RedHat. En nuestro caso usaremos Debian. Si vamos a instalar varios nodos, deberemos de disponer de una base de datos externa y de un almacenamiento compartido

Requisitos

Nombre del servidor

El nombre del servidor se debe de corresponder con el nombre asignado a nuestro servidor de correo. Por ejemplo si vamos a instalar dos o tres servidores MX, y nuestro dominio es dominio.com. Los servidores por ejemplo se podrían llamar:

mx01.dominio.com

mx02.dominio.com

mx03.dominio.com

Para ello en el fichero hosts agregaremos el nombre del servidor editando el fichero /etc/hosts

nano /etc/hosts

Normalmente este fichero contendrá la siguiente información:

127.0.0.1       localhost.localdomain       localhost

En este caso, suponiendo que la IP de nuestro primer servidor sea la 123.123.123.100 agregaremos esta información al fichero hosts

127.0.0.1           localhost.localdomain       localhost
123.123.123.100     mx01.dominio.com   mx01

Para comprobar que esta correcto ejecutaremos el comando hostname -f

root@mx01:~#hostname -f
mx01.dominio.com
root@mx01:~#
Zona horaria

Para asegurarnos de que el servidor no devuelva correos y no sean devueltos por otros, debemos de configurar la zona horaria y la hora del servidor: ejecutaremos

dpkg-reconfigure tzdata

Esto nos permitirá configurar nuestra zona horaria correctamente. A continuación instalaremos el cliente ntp

apt-get install ntp

Y procederemos a configurarlo

nano /etc/ntp.conf

Aparecerá el fichero de configuración de ntp

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

# Leap seconds definition provided by tzdata
leapfile /usr/share/zoneinfo/leap-seconds.list

# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable


# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server hora.roa.es

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst

Después de la línea 18 no habrá nada, por lo que procederemos a añadir en esta línea nuestros servidores ntp que en este caso es el hora.roa.es

Podemos agregar mas servidores de la lista de servidores ntp o bien añadir un pool o modificar el pool por defecto que aparece en las líneas 24 a 27

Instalación en el primer servidor

Instalaremos el bzip2. Nos aseguraremos de estar en la carpeta adecuada por ejemplo root

apt-get install bzip2

Descargaremos iRedMail

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-X.Y.Z.tar.bz2

Descomprimimos

tar xjf iRedMail

Ahora deberemos de instalar con el siguiente comando, para asegurarnos que la instalación utiliza la Base de Datos externa o el cluster de Base de Datos que hemos instalado

USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='192.168.250.193' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='my_user' \
    MYSQL_ROOT_PASSWD='MY_PASSWORD' \
    MYSQL_GRANT_HOST='%' \
    bash iRedMail.sh

En la instalación nos pedirá la carpeta de almacenamiento para el correo, usaremos la carpeta montada en el almacenamiento compartido que hemos creado anterioremente

Instalación en los demás servidores

Seguiremos los pasos que hemos realizado en el primer servidor, a excepción del comando de instalación, al que tenemos que notificarle que no vuelva a generar los registros de la Base de Datos.

ATENCION a la línea "INITIALIZE_SQL_DATA=NO" es vital para que use la Base de Datos existente y que no dé problemas la instalación

USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='192.168.250.193' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='my_user' \
    MYSQL_ROOT_PASSWD='MY_PASSWORD' \
    MYSQL_GRANT_HOST='%' \
    INITIALIZE_SQL_DATA=NO  \
    bash iRedMail.sh

Instalar iRedMailAPD

Descargamos el iRedMailAPD y ejecutamos

cd /root/
tar zxf iRedAPD-4.6.tar.gz
cd iRedAPD-4.6.tar.gz/tools
bash upgrade_iredadmin.sh

Instalar iRedAdminPro (Versión de pago)

Descargamos el iRedAdminPro y ejecutamos

cd /root/
tar xjf iRedAdmin-Pro-x.y.z.tar.bz2
cd iRedAdmin-Pro-x.y.z/tools/
bash upgrade_iredadmin.sh

Instalar Iredmail Cluster

Para Instalar iRedMail, lo primero que deberemos hacer es preparar el servidor

Preparación del servidor

Servicio NTP

Instalaremos y configuraremos el servicio NTP como se explica aquí Configurar NTP en Debian

Nombre del host

Es imprescindible que el host tenga un nombre canónico que resuelva correctamente para que el servicio de correo funcione. Para comprobarlo, ejecutaremos

hostname -f

Devolverá un valor que debe ser el nombre de la máquina:

mail.ateinco.es

Si no devuelve un nombre de dominio completo, deberemos editar el fichero /etc/hosts

nano /etc/hosts

Por ejemplo si tenemos en el archivo /etc/hosts lo siguiente:

127.0.0.1       localhost.localdomain       localhost

Deberemos de modificarlo para que aparezca de la siguiente forma

21.85.189.77    mail.ateinco.es             mail
127.0.0.1       localhost.localdomain       localhost
::1             localhost6.localdomain6	    localhost6

Balanceador para Galera

Necesitaremos instalar un balanceador para que los diferentes nodos de iRedMail, puedan acceder a cualquiera de los servidores de Base de Datos, hay que recordar, que en la configuración, el servidor de Base de Datos a la que apuntará nuestra instalación de iRedMail será la IP del balanceador (Zevenet, HaProxy, Barracuda, etc)

Balanceador para RoundCube, SOGo, iRedAdmin

Necesitaremos instalar un balanceador para que los servicios que dependen de nginx (RoundCube, SOGo, iRedAdmin) o los servicios como IMAP, SMTP o POP3 puedan ser accesibles desde una IP que luego distribuya a cada uno de los nodos

Instalar iRedMail

Instalar con una BBDD Externa

Instalaremos un servidor de MariaDB o un Galera Cluster de MariaDB


Inicialización de la BBDD

Crearemos un usuario que se utilizará durante la instalación. Para ello hacemos login en MariaDB

root@mail:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1883
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Y ejecutamos los siguientes comandos

GRANT ALL PRIVILEGES ON *.* TO 'admin_iredmail'@'%' IDENTIFIED BY 'la_password_que_almacenaremos' WITH GRANT OPTION;
FLUSH PRIVILEGES;
FLUSH HOSTS;
set global innodb_force_primary_key = 0;

Descarga de iRedMail

Instalamos el bzip2 que necesitaremos para descomprimir el iRedMail

apt-get install bzip2

Nos movemos a la carpeta root

cd /root

Descargamos y descomprimimos el iRedMail (en el ejemplo usamos la versión 0.9.9, deberemos de escoger la mas moderna.

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2
tar xjf iRedMail

Instalación en el primer nodo

Vamos a la carpeta del iRedMail, y ejecutamos el siguiente comando

USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='192.168.250.193' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='instalar' \
    MYSQL_ROOT_PASSWD='la_password_que_almacenaremos' \
    MYSQL_GRANT_HOST='%' \
    bash iRedMail.sh

Una vez realizado esto, tendremos el iRedMail instalado en el primer nodo, ahora realizaremos un backup de la configuración de este iRedMail que se encuentra en /root/iRedMail-0.9.9 el archivo se llama config el contenido de dicho archivo será parecido a este

export STORAGE_BASE_DIR='/var/vmail'
export WEB_SERVER='NGINX'
export BACKEND_ORIG='MARIADB'
export BACKEND='MYSQL'
export VMAIL_DB_BIND_PASSWD='yLqcXdByOCLwpX4QTesAjr1J5iq2Rn1'
export VMAIL_DB_ADMIN_PASSWD='JF3ffrmR2PbNcu6us2QIIPSbERlV4N1'
export MLMMJADMIN_API_AUTH_TOKEN='ImIUhBZT2ao3BFjjadBNjMJry1NrdO1'
export NETDATA_DB_PASSWD='RUEUyKajMR7Gak8rPjusj7V416nl5W1'
export MYSQL_ROOT_PASSWD='la_password_que_almacenaremos'
export FIRST_DOMAIN='ateinco.es'
export DOMAIN_ADMIN_PASSWD_PLAIN='la_password_del_postmaster'
export USE_IREDADMIN='YES'
export USE_ROUNDCUBE='YES'
export USE_SOGO='YES'
export USE_NETDATA='YES'
export USE_FAIL2BAN='YES'
export AMAVISD_DB_PASSWD='fbYo1C1MREBGaZutqzIzaufFayN2gZ1'
export IREDADMIN_DB_PASSWD='dT1ncixK4vj9f52PzRasiBJEezlv6h1'
export RCM_DB_PASSWD='4tnn37hzrsJzLWJSvzx1WCtPaSvlQC1'
export SOGO_DB_PASSWD='dR7tSorn6saREaEY39Qp3ZQvfc5tvZ1'
export SOGO_SIEVE_MASTER_PASSWD='owYE3LQdExTjTBGd9gnGjNpwUkj0tK1'
export IREDAPD_DB_PASSWD='iTGNks97Q2iUgOgRS3NEoMCudvKRCA1'
#EOF

Instalar el resto de los nodos

Debemos de ejecutar los mismos pasos: Instalamos el bzip2 que necesitaremos para descomprimir el iRedMail

apt-get install bzip2

Nos movemos a la carpeta root

cd /root

Descargamos y descomprimimos el iRedMail (en el ejemplo usamos la versión 0.9.9, deberemos de escoger la mas moderna.

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2
tar xjf iRedMail

Y a continuación copiamos el fichero config, que hemos recuperado el primer nodo en la carpeta /root/iRedMail-0.9.9

Ejecutamos el siguiente comando NOTA cuidado con la línea INITIALIZE_SQL_DATA=NO ES MUY IMPORTANTE, ya que si no, nos borrará todo loa que había en la base de datos, y fallará la instalación.

USE_EXISTING_MYSQL='YES' \
    MYSQL_SERVER_ADDRESS='192.168.250.40' \
    MYSQL_SERVER_PORT='3306' \
    MYSQL_ROOT_USER='instalar' \
    MYSQL_ROOT_PASSWD='la_password_que_almacenaremos' \
    MYSQL_GRANT_HOST='%' \
    INITIALIZE_SQL_DATA=NO \	
    bash iRedMail.sh

Al arrancar nos dirá que iRedMail ya está instalado, que si queremos usar la configuración previamente almacenada, a lo que diremos que sí.


Solución de problemas

Si por lo que sea, hemos cometido algún error, podemos reiniciar la instalación, para lo que previamente habrá que borrar las tablas que se han creado y empezar desde el principio en el primer nodo. Por los ue nos conectaremos al MySQL y ejecutaremos

DROP DATABASE amavisd;
DROP DATABASE iredadmin;
DROP DATABASE iredapd;
DROP DATABASE roundcubemail;
DROP DATABASE sogo;
DROP DATABASE vmail;
DROP USER 'amavisd'@'%';
DROP USER 'iredadmin'@'%';
DROP USER 'iredapd'@'%';
DROP USER 'roundcube'@'%';
DROP USER 'sogo'@'%';
DROP USER 'vmail'@'%';
DROP USER 'vmailadmin'@'%';
SELECT host,User FROM mysql.user;
delete from user where user='admin_iredmail' and host='%';

Y desde aquí volveremos a crear el usuario, ejecutamos los siguientes comandos

GRANT ALL PRIVILEGES ON *.* TO 'admin_iredmail'@'%' IDENTIFIED BY 'la_password_que_almacenaremos' WITH GRANT OPTION;
FLUSH PRIVILEGES;
FLUSH HOSTS;
set global innodb_force_primary_key = 0;

Y podemos empezar de nuevo el proceso.

Otras Configuraciones

Para que iRedMail funcione en este entorno, si vamos a usar un balanceador para los servicios https (iredadmin, roundcube, Solo, etc) deberemos de configurar algunos parámetros como el servicio de memcached, la ubicación de los adjuntos, etc.

https://docs.iredmail.org/haproxy.keepalived.glusterfs.html

iRedMail moderar listas

quitar obligacion de moderar una lista concreta:
cd /opt/mlmmjadmin/tools
python3 maillist_admin.py update test@ateinco.com only_moderator_can_post=no
python3 maillist_admin.py update test@ateinco.com moderated=no

quitar obligacion de moderar todas las listas por dominio
python3 maillist_admin.py update all@ateinco.com only_moderator_can_post=no
python3 maillist_admin.py update all@ateinco.com moderated=no

quitar obligacion de moderar todas las listas
python3 maillist_admin.py update all@ateinco.com only_moderator_can_post=no
python3 maillist_admin.py update all@ateinco.com moderated=no