Upgrade iRedMail from 0.9.2 to 0.9.3

This is still a DRAFT document, do NOT apply it.

ChangeLog

We provide remote upgrade service, check the price and contact us.

General (All backends should apply these steps)

Update /etc/iredmail-release with new iRedMail version number

iRedMail stores the release version in /etc/iredmail-release after installation, it's recommended to update this file after you upgraded iRedMail, so that you can know which version of iRedMail you're running. For example:

# File: /etc/iredmail-release

0.9.3

Upgrade iRedAPD (Postfix policy server) to the latest 1.7.0

Please follow below tutorial to upgrade iRedAPD to the latest stable release: How to upgrade iRedAPD-1.4.0 or later versions to the latest stable release

Detailed release notes are available here: iRedAPD release notes.

Upgrade Roundcube webmail to the latest stable release

Please follow Roundcube official tutorial to upgrade Roundcube webmail to the latest stable release immediately: How to upgrade Roundcube

Amavisd: Fix incorrect setting which signs DKIM on inbound messages

In iRedMail-0.9.2 and earlier releases, Amavisd will signing DKIM on inbound message, this is wrong. Please follow steps below to fix it.

With below changes, Amavisd will aply policy bank 'ORIGINATING' to emails submitted through submission (port 587) by smtp authenticated user. This way we clearly separate emails submitted by authenticated users and inbound message sent by others, and Amavisd won't sign DKIM on inbound message anymore.

$inet_socket_port = [10024, 10026, 9998];
$interface_policy{'10026'} = 'ORIGINATING';

We will configure Postfix to pipe email submitted by authenticated user through port 10026, others through port 10024. And port 9998 is used to manage quarantined mails.

  #forward_method => 'smtp:[127.0.0.1]:10027',
$originating = 1;
#$policy_blank{'MYUSERS'} = {
#   ...
#}
submission inet n       -       n       -       -       smtpd
  ... [omit other settings here] ...
  -o content_filter=smtp-amavis:[127.0.0.1]:10026

Dovecot: Fix incorrect quota warning priorities

iRedMail configures Dovecot to send warning message to local user when the mailbox quota is 85%, 90% or 95% full, but the priorities is wrong. Please fix it with steps below.

    quota_warning = storage=85%% quota-warning 85 %u
    quota_warning2 = storage=90%% quota-warning 90 %u
    quota_warning3 = storage=95%% quota-warning 95 %u

quota_warning has the highest priority, quota_warning3 has the lowest priority. Only the command for the first exceeded limit is executed, so we must configure the highest limit first.

With above setting, when the mailbox quota goes from 70% to 98% directly, it sends warning message to notify user that the quota is 85% full, this is wrong, it's expected to be warned as 95% full instead.

    quota_warning = storage=95%% quota-warning 95 %u
    quota_warning2 = storage=90%% quota-warning 90 %u
    quota_warning3 = storage=85%% quota-warning 85 %u

Restart Dovecot service is required.

For more details, please read Dovecot document: Quota Configuration

Dovecot-2.2: Add more special folders as alias folders

Note: This is applicable to Dovecot-2.2.x. if you're running Dovecot-2.1.x or earlier versions, please skip this step.

Check Dovecot version number with below command first:

# dovecot --version

Open Dovecot config file /etc/dovecot/dovecot.conf (Linux/OpenBSD) or /usr/local/etc/dovecot/dovecot.conf (FreeBSD), find below setting:

namespace {
    type = private
    ...
    inbox = yes
    ...
}

Add below alias folders inside the same namespace {} block:

    mailbox "Sent Items" {
        auto = no
        special_use = \Sent
    }

    mailbox "Deleted Messages" {
        auto = no
        special_use = \Trash
    }

    mailbox "Deleted Messages" {
        auto = no
        special_use = \Trash
    }

    # Archive
    mailbox Archive {
        auto = subscribe
        special_use = \Archive
    }
    mailbox Archives {
        auto = no
        special_use = \Archive
    }

Restart Dovecot service is required.

SOGo: The Dovecot Master User used by SOGo doesn't work due to incorrect username.

Note: you can skip this step if you don't run SOGo groupware, and iRedMail doesn't install SOGo on FreeBSD due to missing required ports in official ports tree.

The Dovecot Master User created by iRedMail and used by SOGo doesn't contain a mail domain name, this will cause login failure.

If you don't append a (non-exist) mail domain name in Dovecot Master User account, Dovecot will use the domain name of your login username. For example, if your real user is myuser@mydomain.com, when you try to access this user's mailbox as Dovecot Master User myuser@mydomain.com*my_master_user, it will trigger Dovecot to verify user my_master_user@mydomain.com which doesn't exist on your server, then this login attempt fails.

Please follow steps below to fix it.

sogo_sieve_master:...
sogo_sieve_master@not-exist.com:...
sogo_sieve_master@not-exist.com:...

That's all.

[OPTIONAL] Fixed: Not preserve the case of ${extension} while delivering message to mailbox

With iRedMail-0.9.2 and earlier releases, email sent to user username+Ext@domain.com (upper case E) will be delivered to folder ext (lower case e) of username@domain.com's mailbox. This fix will preserve the case of address extension.

# Use dovecot deliver program as LDA.
dovecot unix    -       n       n       -       -      pipe
    flags=DRhu ...
    flags=DRh ...

OpenLDAP backend special

Fixed: Dovecot Master User doesn't work with ACL plugin

iRedMail has both Dovecot Master User and Dovecot acl plugin enabled by default, if acl plugin is enabled, the Master User is still subject to ACLs just like any other user, which means that by default the Master User has no access to any mailboxes of the user. Please fix this issue by following steps below.

user_attrs      = mail=user, ...
user_attrs      = mail=master_user,mail=user, ...

Add new SQL table outbound_wblist in amavisd database

We need a new SQL table outbound_wblist in amavisd database, it's used to store white/blacklists for outbound message, required by iRedAPD plugin amavisd_wblist.

Please connect to MySQL server as MySQL root user, create new table:

$ mysql -uroot -p
mysql> USE amavisd;
mysql> CREATE TABLE outbound_wblist (rid integer unsigned NOT NULL, sid integer unsigned NOT NULL, wb varchar(10) NOT NULL, PRIMARY KEY (rid,sid));

After table created, please restart iRedAPD service.

MySQL/MariaDB backend special

Add new SQL columns in vmail database: alias.is_alias, alias.alias_to

iRedMail-0.9.3 offers per-user alias address support, that means mail user john.smith@domain.com can have additional email addresses like john@domain.com, js@domain.com and more, all emails sent to these addresses will be delivered to same mailbox. With per-user alias address support, you don't need to create many mail alias accounts anymore.

Per-user alias address requires 2 new SQL columns:

Please follow steps below to create required SQL columns:

$ mysql -uroot -p
sql> USE vmail;
sql> ALTER TABLE alias ADD COLUMN is_alias TINYINT(1) NOT NULL DEFAULT 0;
sql> ALTER TABLE alias ADD COLUMN alias_to VARCHAR(255) NOT NULL DEFAULT '';
sql> ALTER TABLE alias ADD INDEX (is_alias);
sql> ALTER TABLE alias ADD INDEX (alias_to);

Add new SQL table outbound_wblist in amavisd database

We need a new SQL table outbound_wblist in amavisd database, it's used to store white/blacklists for outbound message, required by iRedAPD plugin amavisd_wblist.

Please connect to MySQL server as MySQL root user, create new table:

$ mysql -uroot -p
mysql> USE amavisd;
mysql> CREATE TABLE outbound_wblist (rid integer unsigned NOT NULL, sid integer unsigned NOT NULL, wb varchar(10) NOT NULL, PRIMARY KEY (rid,sid));

After table created, please restart iRedAPD service.

PostgreSQL backend special

Add new SQL columns in vmail database: alias.is_alias, alias.alias_to

iRedMail-0.9.3 offers per-user alias address support, that means mail user john.smith@domain.com can have additional email addresses like john@domain.com, js@domain.com and more, all emails sent to these addresses will be delivered to same mailbox. With per-user alias address support, you don't need to create many mail alias accounts anymore.

Per-user alias address requires 2 new SQL columns:

Please follow steps below to create required SQL columns:

# su - postgres
$ psql -d vmail
sql> ALTER TABLE alias ADD COLUMN is_alias INT2 NOT NULL DEFAULT 0;
sql> ALTER TABLE alias ADD COLUMN alias_to alias_to VARCHAR(255) NOT NULL DEFAULT '';
sql> CREATE INDEX idx_alias_is_alias ON alias (is_alias);
sql> CREATE INDEX idx_alias_alias_to ON alias (alias_to);

Add new SQL table outbound_wblist in amavisd database

We need a new SQL table outbound_wblist in amavisd database, it's used to store white/blacklists for outbound message, required by iRedAPD plugin amavisd_wblist.

Please switch to PostgreSQL daemon user, then execute SQL commands to import it:

* On Linux, PostgreSQL daemon user is `postgres`.
* On FreeBSD, PostgreSQL daemon user is `pgsql`.
* On OpenBSD, PostgreSQL daemon user is `_postgresql`.
# su - postgres
$ psql -d cluebringer -d amavisd
sql> CREATE TABLE outbound_wblist (rid integer NOT NULL CHECK (rid >= 0), sid integer NOT NULL CHECK (sid >= 0), wb varchar(10) NOT NULL, PRIMARY KEY (rid,sid));

After table created, please restart iRedAPD service.

Document published under a CC BY-ND 3.0 license. If you found something wrong, please do contact us to fix it.