From 36d31784660bc5f7718f464783cdebfb311ab73c Mon Sep 17 00:00:00 2001 From: Zhang Huangbin Date: Tue, 6 Feb 2018 11:53:46 +0800 Subject: [PATCH] New: integration.mlmmj.mysql.html, integration.mlmmj.pgsql.html. --- .../integrations/0-integration.mlmmj.ldap.md | 41 +- .../integrations/0-integration.mlmmj.mysql.md | 393 +++++++++++++++++ .../integrations/0-integration.mlmmj.pgsql.md | 394 +++++++++++++++++ en_US/integrations/_links.md | 5 +- html/index.html | 5 +- html/integration.mlmmj.ldap.html | 64 ++- html/integration.mlmmj.mysql.html | 416 +++++++++++++++++ html/integration.mlmmj.pgsql.html | 417 ++++++++++++++++++ 8 files changed, 1694 insertions(+), 41 deletions(-) create mode 100644 en_US/integrations/0-integration.mlmmj.mysql.md create mode 100644 en_US/integrations/0-integration.mlmmj.pgsql.md create mode 100644 html/integration.mlmmj.mysql.html create mode 100644 html/integration.mlmmj.pgsql.html diff --git a/en_US/integrations/0-integration.mlmmj.ldap.md b/en_US/integrations/0-integration.mlmmj.ldap.md index 31975622..79a7b2d9 100644 --- a/en_US/integrations/0-integration.mlmmj.ldap.md +++ b/en_US/integrations/0-integration.mlmmj.ldap.md @@ -29,7 +29,8 @@ We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial. ## Backup LDAP data first -Before you do any changes, please backup existing LDAP data first. +Although we don't modify any existing LDAP data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists. * For OpenLDAP, please run command `bash /var/vmail/backup/backup_openldap.sh` to backup. * For OpenBSD ldapd, please run command `bash /var/vmail/backup/backup_ldapd.sh` to backup. @@ -73,6 +74,12 @@ mlmmj unix - n n - - pipe flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop} ``` +* Add line below in Postfix config file `/etc/postfix/main.cf`: + +``` +mlmmj_destination_recipient_limit = 1 +``` + * Open file `/etc/postfix/ldap/virtual_group_maps.cf`, replace the `query_filter` line by below one. It will query old mailing list and new mlmmj mailing list. @@ -92,6 +99,14 @@ query_filter = (&(|(objectClass=mailUser)(&(objectClass=mailList)(enabledServ * Run commands below to create file `/usr/bin/mlmmj-amime-receive` (Linux) or `/usr/local/bin/mlmmj-amime-receive` (Linux/FreeBSD): +!!! attention + + mlmmj doesn't support signature signing very well, so we follow mlmmj + official document and create this script to sign signature properly with + command `altermime`. All iRedMail installation should have command + `altermime` (package `AlterMIME`) available, so you don't need to install + it manually + On Linux: ``` @@ -131,12 +146,11 @@ $inet_socket_port = [10024, 10026, 10027, 9998]; ``` * Add lines below in Amavisd config file. It creates a new policy bank called - `MLMMJ` for emails submitted by mlmmj from port 10027. - - Note: This policy bank doesn't perform spam/virus/banned/bad-header checks - because emails sent to mailing list will be scanned either on port 10024 - (incoming email from external senders) or 10026 (outgoing email sent by - smtp authenticated users). + `MLMMJ` for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users). ``` $interface_policy{'10027'} = 'MLMMJ'; @@ -161,9 +175,9 @@ fully integrated. We will setup `mlmmjadmin` to make managing mailing lists easi * Download the latest mlmmjadmin release: , upload to iRedMail server. We assume it's uploaded to `/root/` directory. -!!! attention + !!! attention - NOTE: We use `mlmmjadmin-1.0` for example below. + We use `mlmmjadmin-1.0` for example below. * Extract downloaded mlmmjadmin package to `/opt/` directory, and create a symbol link: @@ -224,11 +238,12 @@ backend_cli = 'bk_iredmail_ldap' * Add extra required parameters in `/opt/mlmmjadmin/settings.py`, so that mlmmjadmin can manage mailing lists stored in LDAP server. -!!! attention + !!! attention - * You can find LDAP URI, basedn, bind_dn, bind_password in iRedAdmin - config file. - * LDAP bind dn must have read and write privilege to access LDAP server. + You can find LDAP URI, basedn, bind_dn, bind_password in iRedAdmin + config file, the bind dn must have both read and write privileges to + manage LDAP server, iRedMail server usually use bind dn + `cn=vmailadmin,dc=xx,dc=xx` for this purpose. ``` iredmail_ldap_uri = 'ldap://127.0.0.1' diff --git a/en_US/integrations/0-integration.mlmmj.mysql.md b/en_US/integrations/0-integration.mlmmj.mysql.md new file mode 100644 index 00000000..d5ced6e4 --- /dev/null +++ b/en_US/integrations/0-integration.mlmmj.mysql.md @@ -0,0 +1,393 @@ +# Integrate mlmmj mailing list manager in iRedMail (MySQL/MariaDB backends) + +[TOC] + +## Summary + +In iRedMail-0.9.8, we integrate [mlmmj](http://mlmmj.org) - a simple and slim +mailing list manager. It uses very few resources, and requires no daemons, easy +to install, configure and manage. if offers a great set of features, including: + +* Archive +* Subject prefix +* Subscribers only posting +* Moderators only posting +* Moderation functionality +* Custom headers / footer +* Fully automated bounce handling +* Complete requeueing functionality +* Regular expression access control +* Delivery Status Notification (RFC1891) support +* Rich, customisable texts for automated operations +* and more + +iRedMail team also developes a simple RESTful API server called `mlmmjadmin` +to help manage mailing lists, it also offers script tool to manage mailing +lists from command line. + +We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial. + +## Backup SQL database first + +Although we don't modify any existing SQL data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists. + +Please run command `bash /var/vmail/backup/backup_mysql.sh` to backup SQL +databases. + +## Create required system account + +mlmmj will be ran as user `mlmmj` and group `mlmmj`, all mailing list data will +be stored under its home directory `/var/vmail/mlmmj`: + +On Linux or OpenBSD: + +``` +groupadd mlmmj +useradd -m -d /var/vmail/mlmmj -s /sbin/nologin mlmmj +chown -R mlmmj:mlmmj /var/vmail/mlmmj +chmod -R 0700 /var/vmail/mlmmj +``` + +On FreeBSD: + +``` +pw groupadd mlmmj +pw useradd -m -g mlmmj -s /sbin/nologin -d /var/vmail/mlmmj mlmmj +chown -R mlmmj:mlmmj /var/vmail/mlmmj +chmod -R 0700 /var/vmail/mlmmj +``` + +## Update SQL tables in `vmail` database + +We need some updates in `vmail` SQL database: + +* new SQL table `maillists`: used to store profile of mailing list. +* new SQL column `forwardings.is_maillist` +* new SQL column `domain.maillists`: used to set per-domain limit of mailing + list accounts. This column is mostly used by iRedAdmin-Pro. + +Now apply the SQL changes with SQL commands below: + +``` +cd /tmp +wget https://bitbucket.org/zhb/iredmail/raw/default/extra/update/0.9.8/mlmmj.mysql +mysql vmail < mlmmj.mysql +``` + +## Postfix integration + +* Please add lines below in Postfix config file `/etc/postfix/master.cf`: + + !!! attention + + * Command `/usr/bin/mlmmj-amime-receive` doesn't exist yet, we will + create it later. + * On FreeBSD and OpenBSD, it should be + `/usr/local/usr/bin/mlmmj-amime-receive` instead. + +``` +# ${nexthop} is '%d/%u' in transport ('mlmmj:%d/%u') +mlmmj unix - n n - - pipe + flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop} +``` + +* Add line below in Postfix config file `/etc/postfix/main.cf`: + +``` +mlmmj_destination_recipient_limit = 1 +``` + +* Open Postfix config file `/etc/postfix/main.cf`, update existing parameter + `transport_maps`, add new sql lookup like below. We will create required sql + lookup file later. + +``` +transport_maps = + proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf + proxy:mysql:/etc/postfix/mysql/transport_maps_maillist.cf # <- Add this line + ... +``` + +* Now create file `/etc/postfix/mysql/mlmmj_maillists_maps.cf`: + +!!! warning + + Please update the `password =` line with the real password of SQL user + `vmail`, you can find it in files under `/etc/postfix/mysql/`. + +``` +user = vmail +password = qsescZvV03f6YUtTMN2bQTejmjatzz +hosts = 127.0.0.1 +port = 3306 +dbname = vmail +query = SELECT maillists.transport FROM maillists,domain WHERE maillists.address='%s' AND maillists.active=1 AND maillists.domain = domain.domain AND domain.active=1 +``` + +* Run commands below to create file `/usr/bin/mlmmj-amime-receive` (Linux) or + `/usr/local/bin/mlmmj-amime-receive` (Linux/FreeBSD): + +!!! attention + + mlmmj doesn't support signature signing very well, so we follow mlmmj + official document and create this script to sign signature properly with + command `altermime`. All iRedMail installation should have command + `altermime` (package `AlterMIME`) available, so you don't need to install + it manually + +On Linux: + +``` +cd /usr/bin/ +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive +chown mlmmj:mlmmj mlmj-amime-receive +chmod 0550 mlmmj-amime-receive +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/bin/mlmmj-receive#g' mlmmj-amime-receive +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/bin/altermime#g' mlmmj-amime-receive +``` + +On FreeBSD or OpenBSD: + +``` +cd /usr/local/bin/ +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive +chown mlmmj:mlmmj mlmj-amime-receive +chmod 0550 mlmmj-amime-receive +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/local/bin/mlmmj-receive#g' mlmmj-amime-receive +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/local/bin/altermime#g' mlmmj-amime-receive +``` + +## Amavisd Integration + +We need Amavisd to listen on one more port `10027`, it will be used to scan +spam/virus for emails posted to mailing list. + +* Please open Amavisd config file, find parameter `$inet_socket_port`, add new + port number `10027` in the list, like below: + - On RHEL/CentOS, it's `/etc/amavisd/amavisd.conf`. + - On Debian/Ubuntu, it's `/etc/amavis/conf.d/50-user`. + - On OpenBSD, it's `/etc/amavisd.conf`. + - On FreeBSD, it's `/usr/local/etc/amavisd.conf`. + +``` +$inet_socket_port = [10024, 10026, 10027, 9998]; +``` + +* Add lines below in Amavisd config file. It creates a new policy bank called + `MLMMJ` for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users). + +``` +$interface_policy{'10027'} = 'MLMMJ'; +$policy_bank{'MLMMJ'} = { + originating => 1, # declare that mail was submitted by our smtp client + allow_disclaimers => 0, # mailing list should use footer text instead. + enable_dkim_signing => 1, # sign DKIm signature + smtpd_discard_ehlo_keywords => ['8BITMIME'], + terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option + bypass_spam_checks_maps => [1], # don't check spam + bypass_virus_checks_maps => [1], # don't check virus + bypass_banned_checks_maps => [1], # don't check banned file names and types + bypass_header_checks_maps => [1], # don't check bad header +}; +``` + +Now restart Amavisd and Postfix servivce, mlmmj mailing list manager is now +fully integrated. + +We will setup `mlmmjadmin` program to make managing mailing lists easier. + +## Setup mlmmjadmin: RESTful API server used to manage mlmmj mailing lists + +* Download the latest mlmmjadmin release: , + and upload to iRedMail server. We assume it's uploaded to `/root/` directory. + + !!! attention + + We use `mlmmjadmin-1.0` for example below. + +* Extract downloaded mlmmjadmin package to `/opt/` directory, and create a + symbol link: + +``` +tar xjf /root/mlmmjadmin-1.0.tar.bz2 -C /opt +ln -s /opt/mlmmjadmin-1.0 /opt/mlmmjadmin +``` + +* Generate config file by copying sample file, `settings.py.sample`: + +``` +cd /opt/mlmmjadmin +cp settings.py.sample settings.py +chown mlmmj:mlmmj settings.py +chmod 0400 settings.py +``` + +* Generate a random, long string as API auth token, it will be used by your + API client. For example: + +``` +$ echo $RANDOM | md5sum +43a89b7aa34354089e629ed9f9be0b3b +``` + +* Add this string in `/opt/mlmmjadmin/settings.py`, parameter `api_auth_tokens` + like below: + +``` +api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b'] +``` + +You can add as many token as you want for different API clients. For example: + +``` +api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b', '703ed37b20243d7c51c56ce6cd90e94c'] +``` + +* if you manage mail accounts __WITH__ iRedAdmin-Pro, please set values of + parameters `backend_api` and `backend_cli` in `/opt/mlmmjadmin/settings.py` + like below: + +``` +backend_api = 'bk_none' +backend_cli = 'bk_iredmail_sql' +``` + +* if you do __NOT__ manage mail accounts with iRedAdmin-Pro, please set values + of parameters `backend_api` and `backend_cli` in `/opt/mlmmjadmin/settings.py` + like below: + +``` +backend_api = 'bk_iredmail_sql' +backend_cli = 'bk_iredmail_sql' +``` + +* Add extra required parameters in `/opt/mlmmjadmin/settings.py`, so that + mlmmjadmin can connect to SQL server and manage mailing lists. + + !!! attention + + You can find SQL server address, port, database name, SQL username and + password in iRedAdmin config file, the SQL user must have both read and + write privileges to manage `vmail` database. iRedMail server usually + use SQL user `vmailadmin` for this purpose. + +``` +iredmail_sql_db_type = 'mysql' +iredmail_sql_db_server = '127.0.0.1' +iredmail_sql_db_port = 3306 +iredmail_sql_db_name = 'vmail' +iredmail_sql_db_user = 'vmailadmin' +iredmail_sql_db_password = '' +``` + +* Copy rc/systemd scripts for service control: + +``` +# +# For RHEL/CentOS +# +cp /opt/mlmmjadmin/rc_scripts/systemd/rhel.service /lib/systemd/system/mlmmjadmin.service +chmod 0644 /lib/systemd/system/mlmmjadmin.service +systemctl daemon-reload +systemctl enable mlmmjadmin + +# +# For Debian 9 and Ubuntu 16.04 which uses systemd +# +cp /opt/mlmmjadmin/rc_scripts/systemd/debian.service /lib/systemd/system/mlmmjadmin.service +chmod 0644 /lib/systemd/system/mlmmjadmin.service +systemctl daemon-reload +systemctl enable mlmmjadmin + +# +# For FreeBSD +# +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.freebsd /usr/local/etc/rc.d/mlmmjadmin +chmod 0755 /usr/local/etc/rc.d/mlmmjadmin +echo 'mlmmjadmin_enable=YES' >> /etc/rc.conf.local + +# +# For OpenBSD +# +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.openbsd /etc/rc.d/mlmmjadmin +chmod 0755 /etc/rc.d/mlmmjadmin +rcctl enable mlmmjadmin +``` + + +* Create directory used to store mlmmjadmin log file. mlmmjadmin is + configured to log to syslog directly. + +``` +# +# For RHEL/CentOS +# +mkdir /var/log/mlmmjadmin +chown root:root /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin + +# +# For Debian/Ubuntu +# +mkdir /var/log/mlmmjadmin +chown syslog:adm /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin + +# +# For OpenBSD/FreeBSD +# +mkdir /var/log/mlmmjadmin +chown root:wheel /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin +``` + +* Update syslog daemon config file to log mlmmjadmin to dedicated log file: + +For Linux + +``` +cp /opt/mlmmjadmin/samples/rsyslog/mlmmjadmin.conf /etc/rsyslog.d/ +service rsyslog restart +``` + +For OpenBSD, please append below lines in `/etc/syslog.conf`: + +``` +!!mlmmjadmin +local5.* /var/log/mlmmjadmin/mlmmjadmin.log +``` + +For FreeBSD, please append below lines in `/etc/syslog.conf`: + +``` +!mlmmjadmin +local5.* /var/log/mlmmjadmin/mlmmjadmin.log +``` + +* Now it's ok to start `mlmmjadmin` service: + +``` +# +# On Linux/FreeBSD: +# +service mlmmjadmin restart + +# +# On OpenBSD +# +rcctl start mlmmjadmin +``` + +## References + +* iRedMail: +* Mlmmj: + * Tunable parameters: + * Postfix integration: +* mlmmjadmin: RESTful API server used to manage mlmmj mailing lists. Developed + and maintained by iRedMail team. diff --git a/en_US/integrations/0-integration.mlmmj.pgsql.md b/en_US/integrations/0-integration.mlmmj.pgsql.md new file mode 100644 index 00000000..1a7b98a3 --- /dev/null +++ b/en_US/integrations/0-integration.mlmmj.pgsql.md @@ -0,0 +1,394 @@ +# Integrate mlmmj mailing list manager in iRedMail (PostgreSQL backend) + +[TOC] + +## Summary + +In iRedMail-0.9.8, we integrate [mlmmj](http://mlmmj.org) - a simple and slim +mailing list manager. It uses very few resources, and requires no daemons, easy +to install, configure and manage. if offers a great set of features, including: + +* Archive +* Subject prefix +* Subscribers only posting +* Moderators only posting +* Moderation functionality +* Custom headers / footer +* Fully automated bounce handling +* Complete requeueing functionality +* Regular expression access control +* Delivery Status Notification (RFC1891) support +* Rich, customisable texts for automated operations +* and more + +iRedMail team also developes a simple RESTful API server called `mlmmjadmin` +to help manage mailing lists, it also offers script tool to manage mailing +lists from command line. + +We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial. + +## Backup SQL database first + +Although we don't modify any existing SQL data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists. + +Please run command `bash /var/vmail/backup/backup_pgsql.sh` to backup SQL +databases. + +## Create required system account + +mlmmj will be ran as user `mlmmj` and group `mlmmj`, all mailing list data will +be stored under its home directory `/var/vmail/mlmmj`: + +On Linux or OpenBSD: + +``` +groupadd mlmmj +useradd -m -d /var/vmail/mlmmj -s /sbin/nologin mlmmj +chown -R mlmmj:mlmmj /var/vmail/mlmmj +chmod -R 0700 /var/vmail/mlmmj +``` + +On FreeBSD: + +``` +pw groupadd mlmmj +pw useradd -m -g mlmmj -s /sbin/nologin -d /var/vmail/mlmmj mlmmj +chown -R mlmmj:mlmmj /var/vmail/mlmmj +chmod -R 0700 /var/vmail/mlmmj +``` + +## Update SQL tables in `vmail` database + +We need some updates in `vmail` SQL database: + +* new SQL table `maillists`: used to store profile of mailing list. +* new SQL column `forwardings.is_maillist` +* new SQL column `domain.maillists`: used to set per-domain limit of mailing + list accounts. This column is mostly used by iRedAdmin-Pro. + +Now apply the SQL changes with SQL commands below: + +``` +cd /tmp +wget https://bitbucket.org/zhb/iredmail/raw/default/extra/update/0.9.8/mlmmj.pgsql +su - postgres +psql -d vmail < /tmp/mlmmj.pgsql +``` + +## Postfix integration + +* Please add lines below in Postfix config file `/etc/postfix/master.cf`: + + !!! attention + + * Command `/usr/bin/mlmmj-amime-receive` doesn't exist yet, we will + create it later. + * On FreeBSD and OpenBSD, it should be + `/usr/local/usr/bin/mlmmj-amime-receive` instead. + +``` +# ${nexthop} is '%d/%u' in transport ('mlmmj:%d/%u') +mlmmj unix - n n - - pipe + flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop} +``` + +* Add line below in Postfix config file `/etc/postfix/main.cf`: + +``` +mlmmj_destination_recipient_limit = 1 +``` + +* Open Postfix config file `/etc/postfix/main.cf`, update existing parameter + `transport_maps`, add new sql lookup like below. We will create required sql + lookup file later. + +``` +transport_maps = + proxy:pgsql:/etc/postfix/pgsql/transport_maps_user.cf + proxy:pgsql:/etc/postfix/pgsql/transport_maps_maillist.cf # <- Add this line + ... +``` + +* Now create file `/etc/postfix/pgsql/mlmmj_maillists_maps.cf`: + +!!! warning + + Please update the `password =` line with the real password of SQL user + `vmail`, you can find it in files under `/etc/postfix/pgsql/`. + +``` +user = vmail +password = qsescZvV03f6YUtTMN2bQTejmjatzz +hosts = 127.0.0.1 +port = 3306 +dbname = vmail +query = SELECT maillists.transport FROM maillists,domain WHERE maillists.address='%s' AND maillists.active=1 AND maillists.domain = domain.domain AND domain.active=1 +``` + +* Run commands below to create file `/usr/bin/mlmmj-amime-receive` (Linux) or + `/usr/local/bin/mlmmj-amime-receive` (Linux/FreeBSD): + +!!! attention + + mlmmj doesn't support signature signing very well, so we follow mlmmj + official document and create this script to sign signature properly with + command `altermime`. All iRedMail installation should have command + `altermime` (package `AlterMIME`) available, so you don't need to install + it manually + +On Linux: + +``` +cd /usr/bin/ +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive +chown mlmmj:mlmmj mlmj-amime-receive +chmod 0550 mlmmj-amime-receive +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/bin/mlmmj-receive#g' mlmmj-amime-receive +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/bin/altermime#g' mlmmj-amime-receive +``` + +On FreeBSD or OpenBSD: + +``` +cd /usr/local/bin/ +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive +chown mlmmj:mlmmj mlmj-amime-receive +chmod 0550 mlmmj-amime-receive +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/local/bin/mlmmj-receive#g' mlmmj-amime-receive +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/local/bin/altermime#g' mlmmj-amime-receive +``` + +## Amavisd Integration + +We need Amavisd to listen on one more port `10027`, it will be used to scan +spam/virus for emails posted to mailing list. + +* Please open Amavisd config file, find parameter `$inet_socket_port`, add new + port number `10027` in the list, like below: + - On RHEL/CentOS, it's `/etc/amavisd/amavisd.conf`. + - On Debian/Ubuntu, it's `/etc/amavis/conf.d/50-user`. + - On OpenBSD, it's `/etc/amavisd.conf`. + - On FreeBSD, it's `/usr/local/etc/amavisd.conf`. + +``` +$inet_socket_port = [10024, 10026, 10027, 9998]; +``` + +* Add lines below in Amavisd config file. It creates a new policy bank called + `MLMMJ` for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users). + +``` +$interface_policy{'10027'} = 'MLMMJ'; +$policy_bank{'MLMMJ'} = { + originating => 1, # declare that mail was submitted by our smtp client + allow_disclaimers => 0, # mailing list should use footer text instead. + enable_dkim_signing => 1, # sign DKIm signature + smtpd_discard_ehlo_keywords => ['8BITMIME'], + terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option + bypass_spam_checks_maps => [1], # don't check spam + bypass_virus_checks_maps => [1], # don't check virus + bypass_banned_checks_maps => [1], # don't check banned file names and types + bypass_header_checks_maps => [1], # don't check bad header +}; +``` + +Now restart Amavisd and Postfix servivce, mlmmj mailing list manager is now +fully integrated. + +We will setup `mlmmjadmin` program to make managing mailing lists easier. + +## Setup mlmmjadmin: RESTful API server used to manage mlmmj mailing lists + +* Download the latest mlmmjadmin release: , + and upload to iRedMail server. We assume it's uploaded to `/root/` directory. + + !!! attention + + We use `mlmmjadmin-1.0` for example below. + +* Extract downloaded mlmmjadmin package to `/opt/` directory, and create a + symbol link: + +``` +tar xjf /root/mlmmjadmin-1.0.tar.bz2 -C /opt +ln -s /opt/mlmmjadmin-1.0 /opt/mlmmjadmin +``` + +* Generate config file by copying sample file, `settings.py.sample`: + +``` +cd /opt/mlmmjadmin +cp settings.py.sample settings.py +chown mlmmj:mlmmj settings.py +chmod 0400 settings.py +``` + +* Generate a random, long string as API auth token, it will be used by your + API client. For example: + +``` +$ echo $RANDOM | md5sum +43a89b7aa34354089e629ed9f9be0b3b +``` + +* Add this string in `/opt/mlmmjadmin/settings.py`, parameter `api_auth_tokens` + like below: + +``` +api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b'] +``` + +You can add as many token as you want for different API clients. For example: + +``` +api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b', '703ed37b20243d7c51c56ce6cd90e94c'] +``` + +* if you manage mail accounts __WITH__ iRedAdmin-Pro, please set values of + parameters `backend_api` and `backend_cli` in `/opt/mlmmjadmin/settings.py` + like below: + +``` +backend_api = 'bk_none' +backend_cli = 'bk_iredmail_sql' +``` + +* if you do __NOT__ manage mail accounts with iRedAdmin-Pro, please set values + of parameters `backend_api` and `backend_cli` in `/opt/mlmmjadmin/settings.py` + like below: + +``` +backend_api = 'bk_iredmail_sql' +backend_cli = 'bk_iredmail_sql' +``` + +* Add extra required parameters in `/opt/mlmmjadmin/settings.py`, so that + mlmmjadmin can connect to SQL server and manage mailing lists. + + !!! attention + + You can find SQL server address, port, database name, SQL username and + password in iRedAdmin config file, the SQL user must have both read and + write privileges to manage `vmail` database. iRedMail server usually + use SQL user `vmailadmin` for this purpose. + +``` +iredmail_sql_db_type = 'pgsql' +iredmail_sql_db_server = '127.0.0.1' +iredmail_sql_db_port = 3306 +iredmail_sql_db_name = 'vmail' +iredmail_sql_db_user = 'vmailadmin' +iredmail_sql_db_password = '' +``` + +* Copy rc/systemd scripts for service control: + +``` +# +# For RHEL/CentOS +# +cp /opt/mlmmjadmin/rc_scripts/systemd/rhel.service /lib/systemd/system/mlmmjadmin.service +chmod 0644 /lib/systemd/system/mlmmjadmin.service +systemctl daemon-reload +systemctl enable mlmmjadmin + +# +# For Debian 9 and Ubuntu 16.04 which uses systemd +# +cp /opt/mlmmjadmin/rc_scripts/systemd/debian.service /lib/systemd/system/mlmmjadmin.service +chmod 0644 /lib/systemd/system/mlmmjadmin.service +systemctl daemon-reload +systemctl enable mlmmjadmin + +# +# For FreeBSD +# +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.freebsd /usr/local/etc/rc.d/mlmmjadmin +chmod 0755 /usr/local/etc/rc.d/mlmmjadmin +echo 'mlmmjadmin_enable=YES' >> /etc/rc.conf.local + +# +# For OpenBSD +# +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.openbsd /etc/rc.d/mlmmjadmin +chmod 0755 /etc/rc.d/mlmmjadmin +rcctl enable mlmmjadmin +``` + + +* Create directory used to store mlmmjadmin log file. mlmmjadmin is + configured to log to syslog directly. + +``` +# +# For RHEL/CentOS +# +mkdir /var/log/mlmmjadmin +chown root:root /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin + +# +# For Debian/Ubuntu +# +mkdir /var/log/mlmmjadmin +chown syslog:adm /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin + +# +# For OpenBSD/FreeBSD +# +mkdir /var/log/mlmmjadmin +chown root:wheel /var/log/mlmmjadmin +chmod 0755 /var/log/mlmmjadmin +``` + +* Update syslog daemon config file to log mlmmjadmin to dedicated log file: + +For Linux + +``` +cp /opt/mlmmjadmin/samples/rsyslog/mlmmjadmin.conf /etc/rsyslog.d/ +service rsyslog restart +``` + +For OpenBSD, please append below lines in `/etc/syslog.conf`: + +``` +!!mlmmjadmin +local5.* /var/log/mlmmjadmin/mlmmjadmin.log +``` + +For FreeBSD, please append below lines in `/etc/syslog.conf`: + +``` +!mlmmjadmin +local5.* /var/log/mlmmjadmin/mlmmjadmin.log +``` + +* Now it's ok to start `mlmmjadmin` service: + +``` +# +# On Linux/FreeBSD: +# +service mlmmjadmin restart + +# +# On OpenBSD +# +rcctl start mlmmjadmin +``` + +## References + +* iRedMail: +* Mlmmj: + * Tunable parameters: + * Postfix integration: +* mlmmjadmin: RESTful API server used to manage mlmmj mailing lists. Developed + and maintained by iRedMail team. diff --git a/en_US/integrations/_links.md b/en_US/integrations/_links.md index 3fce17f2..1f756d26 100644 --- a/en_US/integrations/_links.md +++ b/en_US/integrations/_links.md @@ -2,9 +2,10 @@ * CentOS 6: [MySQL](./sogo-centos-6-mysql.html), [OpenLDAP](./sogo-centos-6-openldap.html). -* Integrate mlmmj mailing list manager: +* Integrate mlmmj mailing list manager (mlmmj is a core component since iRedMail-0.9.8): * [For LDAP backends](./integration.mlmmj.ldap.html) - * [For MySQL backends](./integration.mlmmj.mysql.html) + * [For MySQL/MariaDB backend](./integration.mlmmj.mysql.html) + * [For PostgreSQL backend](./integration.mlmmj.pgsql.html) Documents contributed by iRedMail users: diff --git a/html/index.html b/html/index.html index 9ae96258..235c9515 100644 --- a/html/index.html +++ b/html/index.html @@ -159,10 +159,11 @@
  • -

    Integrate mlmmj mailing list manager:

    +

    Integrate mlmmj mailing list manager (mlmmj is a core component since iRedMail-0.9.8):

  • diff --git a/html/integration.mlmmj.ldap.html b/html/integration.mlmmj.ldap.html index 8bd2cc0e..c69f15aa 100644 --- a/html/integration.mlmmj.ldap.html +++ b/html/integration.mlmmj.ldap.html @@ -53,7 +53,8 @@ to help manage mailing lists, it also offers script tool to manage mailing lists from command line.

    We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial.

    Backup LDAP data first

    -

    Before you do any changes, please backup existing LDAP data first.

    +

    Although we don't modify any existing LDAP data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists.

    • For OpenLDAP, please run command bash /var/vmail/backup/backup_openldap.sh to backup.
    • For OpenBSD ldapd, please run command bash /var/vmail/backup/backup_ldapd.sh to backup.
    • @@ -92,6 +93,12 @@ mlmmj unix - n n - - pipe flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop} +
        +
      • Add line below in Postfix config file /etc/postfix/main.cf:
      • +
      +
      mlmmj_destination_recipient_limit = 1
      +
      +
      • Open file /etc/postfix/ldap/virtual_group_maps.cf, replace the query_filter line by below one. It will query old mailing list and new @@ -112,6 +119,14 @@ mlmmj unix - n n - - pipe
      • Run commands below to create file /usr/bin/mlmmj-amime-receive (Linux) or /usr/local/bin/mlmmj-amime-receive (Linux/FreeBSD):
      +
      +

      Attention

      +

      mlmmj doesn't support signature signing very well, so we follow mlmmj +official document and create this script to sign signature properly with +command altermime. All iRedMail installation should have command +altermime (package AlterMIME) available, so you don't need to install +it manually

      +

      On Linux:

      cd /usr/bin/
       wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive
      @@ -147,14 +162,12 @@ spam/virus for emails posted to mailing list.

        -
      • -

        Add lines below in Amavisd config file. It creates a new policy bank called - MLMMJ for emails submitted by mlmmj from port 10027.

        -

        Note: This policy bank doesn't perform spam/virus/banned/bad-header checks -because emails sent to mailing list will be scanned either on port 10024 -(incoming email from external senders) or 10026 (outgoing email sent by -smtp authenticated users).

        -
      • +
      • Add lines below in Amavisd config file. It creates a new policy bank called + MLMMJ for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users).
      $interface_policy{'10027'} = 'MLMMJ';
       $policy_bank{'MLMMJ'} = {
      @@ -174,16 +187,18 @@ $policy_bank{'MLMMJ'} = {
       fully integrated. We will setup mlmmjadmin to make managing mailing lists easier.

      Setup mlmmjadmin: a RESTful API server used to manage mlmmj mailing lists

      +
    • +

      Download the latest mlmmjadmin release: https://github.com/iredmail/mlmmjadmin/releases, + upload to iRedMail server. We assume it's uploaded to /root/ directory.

      Attention

      -

      NOTE: We use mlmmjadmin-1.0 for example below.

      +

      We use mlmmjadmin-1.0 for example below.

      -
        -
      • Extract downloaded mlmmjadmin package to /opt/ directory, and create a - symbol link:
      • + +
      • +

        Extract downloaded mlmmjadmin package to /opt/ directory, and create a + symbol link:

        +
      tar xjf /root/mlmmjadmin-1.0.tar.bz2 -C /opt
       ln -s /opt/mlmmjadmin-1.0 /opt/mlmmjadmin
      @@ -236,17 +251,18 @@ backend_cli = 'bk_iredmail_ldap'
       
        -
      • Add extra required parameters in /opt/mlmmjadmin/settings.py, so that - mlmmjadmin can manage mailing lists stored in LDAP server.
      • -
      +
    • +

      Add extra required parameters in /opt/mlmmjadmin/settings.py, so that + mlmmjadmin can manage mailing lists stored in LDAP server.

      Attention

      -
        -
      • You can find LDAP URI, basedn, bind_dn, bind_password in iRedAdmin - config file.
      • -
      • LDAP bind dn must have read and write privilege to access LDAP server.
      • -
      +

      You can find LDAP URI, basedn, bind_dn, bind_password in iRedAdmin +config file, the bind dn must have both read and write privileges to +manage LDAP server, iRedMail server usually use bind dn +cn=vmailadmin,dc=xx,dc=xx for this purpose.

      +
    • +
    iredmail_ldap_uri = 'ldap://127.0.0.1'
     iredmail_ldap_basedn = 'o=domains,dc=XXX,dc=XXX'
     iredmail_ldap_bind_dn = 'cn=vmailadmin,dc=XXX,dc=XXX'
    diff --git a/html/integration.mlmmj.mysql.html b/html/integration.mlmmj.mysql.html
    new file mode 100644
    index 00000000..4a36a068
    --- /dev/null
    +++ b/html/integration.mlmmj.mysql.html
    @@ -0,0 +1,416 @@
    +
    +
    +    
    +        
    +        Integrate mlmmj mailing list manager in iRedMail (MySQL/MariaDB backends)
    +        
    +    
    +    
    +    
    +    

    Integrate mlmmj mailing list manager in iRedMail (MySQL/MariaDB backends)

    + +

    Summary

    +

    In iRedMail-0.9.8, we integrate mlmmj - a simple and slim +mailing list manager. It uses very few resources, and requires no daemons, easy +to install, configure and manage. if offers a great set of features, including:

    +
      +
    • Archive
    • +
    • Subject prefix
    • +
    • Subscribers only posting
    • +
    • Moderators only posting
    • +
    • Moderation functionality
    • +
    • Custom headers / footer
    • +
    • Fully automated bounce handling
    • +
    • Complete requeueing functionality
    • +
    • Regular expression access control
    • +
    • Delivery Status Notification (RFC1891) support
    • +
    • Rich, customisable texts for automated operations
    • +
    • and more
    • +
    +

    iRedMail team also developes a simple RESTful API server called mlmmjadmin +to help manage mailing lists, it also offers script tool to manage mailing +lists from command line.

    +

    We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial.

    +

    Backup SQL database first

    +

    Although we don't modify any existing SQL data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists.

    +

    Please run command bash /var/vmail/backup/backup_mysql.sh to backup SQL +databases.

    +

    Create required system account

    +

    mlmmj will be ran as user mlmmj and group mlmmj, all mailing list data will +be stored under its home directory /var/vmail/mlmmj:

    +

    On Linux or OpenBSD:

    +
    groupadd mlmmj
    +useradd -m -d /var/vmail/mlmmj -s /sbin/nologin mlmmj
    +chown -R mlmmj:mlmmj /var/vmail/mlmmj
    +chmod -R 0700 /var/vmail/mlmmj
    +
    + +

    On FreeBSD:

    +
    pw groupadd mlmmj
    +pw useradd -m -g mlmmj -s /sbin/nologin -d /var/vmail/mlmmj mlmmj
    +chown -R mlmmj:mlmmj /var/vmail/mlmmj
    +chmod -R 0700 /var/vmail/mlmmj
    +
    + +

    Update SQL tables in vmail database

    +

    We need some updates in vmail SQL database:

    +
      +
    • new SQL table maillists: used to store profile of mailing list.
    • +
    • new SQL column forwardings.is_maillist
    • +
    • new SQL column domain.maillists: used to set per-domain limit of mailing + list accounts. This column is mostly used by iRedAdmin-Pro.
    • +
    +

    Now apply the SQL changes with SQL commands below:

    +
    cd /tmp
    +wget https://bitbucket.org/zhb/iredmail/raw/default/extra/update/0.9.8/mlmmj.mysql
    +mysql vmail < mlmmj.mysql
    +
    + +

    Postfix integration

    +
      +
    • +

      Please add lines below in Postfix config file /etc/postfix/master.cf:

      +
      +

      Attention

      +
        +
      • Command /usr/bin/mlmmj-amime-receive doesn't exist yet, we will + create it later.
      • +
      • On FreeBSD and OpenBSD, it should be + /usr/local/usr/bin/mlmmj-amime-receive instead.
      • +
      +
      +
    • +
    +
    # ${nexthop} is '%d/%u' in transport ('mlmmj:%d/%u')
    +mlmmj   unix  -       n       n       -       -       pipe
    +    flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop}
    +
    + +
      +
    • Add line below in Postfix config file /etc/postfix/main.cf:
    • +
    +
    mlmmj_destination_recipient_limit = 1
    +
    + +
      +
    • Open Postfix config file /etc/postfix/main.cf, update existing parameter + transport_maps, add new sql lookup like below. We will create required sql + lookup file later.
    • +
    +
    transport_maps =
    +    proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf
    +    proxy:mysql:/etc/postfix/mysql/transport_maps_maillist.cf   # <- Add this line
    +    ...
    +
    + +
      +
    • Now create file /etc/postfix/mysql/mlmmj_maillists_maps.cf:
    • +
    +
    +

    Warning

    +

    Please update the password = line with the real password of SQL user +vmail, you can find it in files under /etc/postfix/mysql/.

    +
    +
    user        = vmail
    +password    = qsescZvV03f6YUtTMN2bQTejmjatzz
    +hosts       = 127.0.0.1
    +port        = 3306
    +dbname      = vmail
    +query       = SELECT maillists.transport FROM maillists,domain WHERE maillists.address='%s' AND maillists.active=1 AND maillists.domain = domain.domain AND domain.active=1
    +
    + +
      +
    • Run commands below to create file /usr/bin/mlmmj-amime-receive (Linux) or + /usr/local/bin/mlmmj-amime-receive (Linux/FreeBSD):
    • +
    +
    +

    Attention

    +

    mlmmj doesn't support signature signing very well, so we follow mlmmj +official document and create this script to sign signature properly with +command altermime. All iRedMail installation should have command +altermime (package AlterMIME) available, so you don't need to install +it manually

    +
    +

    On Linux:

    +
    cd /usr/bin/
    +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive
    +chown mlmmj:mlmmj mlmj-amime-receive
    +chmod 0550 mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/bin/mlmmj-receive#g' mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/bin/altermime#g' mlmmj-amime-receive
    +
    + +

    On FreeBSD or OpenBSD:

    +
    cd /usr/local/bin/
    +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive
    +chown mlmmj:mlmmj mlmj-amime-receive
    +chmod 0550 mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/local/bin/mlmmj-receive#g' mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/local/bin/altermime#g' mlmmj-amime-receive
    +
    + +

    Amavisd Integration

    +

    We need Amavisd to listen on one more port 10027, it will be used to scan +spam/virus for emails posted to mailing list.

    +
      +
    • Please open Amavisd config file, find parameter $inet_socket_port, add new + port number 10027 in the list, like below:
        +
      • On RHEL/CentOS, it's /etc/amavisd/amavisd.conf.
      • +
      • On Debian/Ubuntu, it's /etc/amavis/conf.d/50-user.
      • +
      • On OpenBSD, it's /etc/amavisd.conf.
      • +
      • On FreeBSD, it's /usr/local/etc/amavisd.conf.
      • +
      +
    • +
    +
    $inet_socket_port = [10024, 10026, 10027, 9998];
    +
    + +
      +
    • Add lines below in Amavisd config file. It creates a new policy bank called + MLMMJ for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users).
    • +
    +
    $interface_policy{'10027'} = 'MLMMJ';
    +$policy_bank{'MLMMJ'} = {
    +    originating => 1,           # declare that mail was submitted by our smtp client
    +    allow_disclaimers => 0,     # mailing list should use footer text instead.
    +    enable_dkim_signing => 1,   # sign DKIm signature
    +    smtpd_discard_ehlo_keywords => ['8BITMIME'],
    +    terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
    +    bypass_spam_checks_maps => [1],     # don't check spam
    +    bypass_virus_checks_maps => [1],    # don't check virus
    +    bypass_banned_checks_maps => [1],   # don't check banned file names and types
    +    bypass_header_checks_maps => [1],   # don't check bad header
    +};
    +
    + +

    Now restart Amavisd and Postfix servivce, mlmmj mailing list manager is now +fully integrated.

    +

    We will setup mlmmjadmin program to make managing mailing lists easier.

    +

    Setup mlmmjadmin: RESTful API server used to manage mlmmj mailing lists

    +
      +
    • +

      Download the latest mlmmjadmin release: https://github.com/iredmail/mlmmjadmin/releases, + and upload to iRedMail server. We assume it's uploaded to /root/ directory.

      +
      +

      Attention

      +

      We use mlmmjadmin-1.0 for example below.

      +
      +
    • +
    • +

      Extract downloaded mlmmjadmin package to /opt/ directory, and create a + symbol link:

      +
    • +
    +
    tar xjf /root/mlmmjadmin-1.0.tar.bz2 -C /opt
    +ln -s /opt/mlmmjadmin-1.0 /opt/mlmmjadmin
    +
    + +
      +
    • Generate config file by copying sample file, settings.py.sample:
    • +
    +
    cd /opt/mlmmjadmin
    +cp settings.py.sample settings.py
    +chown mlmmj:mlmmj settings.py
    +chmod 0400 settings.py
    +
    + +
      +
    • Generate a random, long string as API auth token, it will be used by your + API client. For example:
    • +
    +
    $ echo $RANDOM | md5sum
    +43a89b7aa34354089e629ed9f9be0b3b
    +
    + +
      +
    • Add this string in /opt/mlmmjadmin/settings.py, parameter api_auth_tokens + like below:
    • +
    +
    api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b']
    +
    + +

    You can add as many token as you want for different API clients. For example:

    +
    api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b', '703ed37b20243d7c51c56ce6cd90e94c']
    +
    + +
      +
    • if you manage mail accounts WITH iRedAdmin-Pro, please set values of + parameters backend_api and backend_cli in /opt/mlmmjadmin/settings.py + like below:
    • +
    +
    backend_api = 'bk_none'
    +backend_cli = 'bk_iredmail_sql'
    +
    + +
      +
    • if you do NOT manage mail accounts with iRedAdmin-Pro, please set values + of parameters backend_api and backend_cli in /opt/mlmmjadmin/settings.py + like below:
    • +
    +
    backend_api = 'bk_iredmail_sql'
    +backend_cli = 'bk_iredmail_sql'
    +
    + +
      +
    • +

      Add extra required parameters in /opt/mlmmjadmin/settings.py, so that + mlmmjadmin can connect to SQL server and manage mailing lists.

      +
      +

      Attention

      +

      You can find SQL server address, port, database name, SQL username and +password in iRedAdmin config file, the SQL user must have both read and +write privileges to manage vmail database. iRedMail server usually +use SQL user vmailadmin for this purpose.

      +
      +
    • +
    +
    iredmail_sql_db_type = 'mysql'
    +iredmail_sql_db_server = '127.0.0.1'
    +iredmail_sql_db_port = 3306
    +iredmail_sql_db_name = 'vmail'
    +iredmail_sql_db_user = 'vmailadmin'
    +iredmail_sql_db_password = '<password>'
    +
    + +
      +
    • Copy rc/systemd scripts for service control:
    • +
    +
    #
    +# For RHEL/CentOS
    +#
    +cp /opt/mlmmjadmin/rc_scripts/systemd/rhel.service /lib/systemd/system/mlmmjadmin.service
    +chmod 0644 /lib/systemd/system/mlmmjadmin.service
    +systemctl daemon-reload
    +systemctl enable mlmmjadmin
    +
    +#
    +# For Debian 9 and Ubuntu 16.04 which uses systemd
    +#
    +cp /opt/mlmmjadmin/rc_scripts/systemd/debian.service /lib/systemd/system/mlmmjadmin.service
    +chmod 0644 /lib/systemd/system/mlmmjadmin.service
    +systemctl daemon-reload
    +systemctl enable mlmmjadmin
    +
    +#
    +# For FreeBSD
    +#
    +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.freebsd /usr/local/etc/rc.d/mlmmjadmin
    +chmod 0755 /usr/local/etc/rc.d/mlmmjadmin
    +echo 'mlmmjadmin_enable=YES' >> /etc/rc.conf.local
    +
    +#
    +# For OpenBSD
    +#
    +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.openbsd /etc/rc.d/mlmmjadmin
    +chmod 0755 /etc/rc.d/mlmmjadmin
    +rcctl enable mlmmjadmin
    +
    + +
      +
    • Create directory used to store mlmmjadmin log file. mlmmjadmin is + configured to log to syslog directly.
    • +
    +
    #
    +# For RHEL/CentOS
    +#
    +mkdir /var/log/mlmmjadmin
    +chown root:root /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    +#
    +# For Debian/Ubuntu
    +#
    +mkdir /var/log/mlmmjadmin
    +chown syslog:adm /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    +#
    +# For OpenBSD/FreeBSD
    +#
    +mkdir /var/log/mlmmjadmin
    +chown root:wheel /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    + +
      +
    • Update syslog daemon config file to log mlmmjadmin to dedicated log file:
    • +
    +

    For Linux

    +
    cp /opt/mlmmjadmin/samples/rsyslog/mlmmjadmin.conf /etc/rsyslog.d/
    +service rsyslog restart
    +
    + +

    For OpenBSD, please append below lines in /etc/syslog.conf:

    +
    !!mlmmjadmin
    +local5.*            /var/log/mlmmjadmin/mlmmjadmin.log
    +
    + +

    For FreeBSD, please append below lines in /etc/syslog.conf:

    +
    !mlmmjadmin
    +local5.*            /var/log/mlmmjadmin/mlmmjadmin.log
    +
    + +
      +
    • Now it's ok to start mlmmjadmin service:
    • +
    +
    #
    +# On Linux/FreeBSD:
    +#
    +service mlmmjadmin restart
    +
    +#
    +# On OpenBSD
    +#
    +rcctl start mlmmjadmin
    +
    + +

    References

    + + + + + \ No newline at end of file diff --git a/html/integration.mlmmj.pgsql.html b/html/integration.mlmmj.pgsql.html new file mode 100644 index 00000000..2e2f6800 --- /dev/null +++ b/html/integration.mlmmj.pgsql.html @@ -0,0 +1,417 @@ + + + + + Integrate mlmmj mailing list manager in iRedMail (PostgreSQL backend) + + + + +

    Integrate mlmmj mailing list manager in iRedMail (PostgreSQL backend)

    + +

    Summary

    +

    In iRedMail-0.9.8, we integrate mlmmj - a simple and slim +mailing list manager. It uses very few resources, and requires no daemons, easy +to install, configure and manage. if offers a great set of features, including:

    +
      +
    • Archive
    • +
    • Subject prefix
    • +
    • Subscribers only posting
    • +
    • Moderators only posting
    • +
    • Moderation functionality
    • +
    • Custom headers / footer
    • +
    • Fully automated bounce handling
    • +
    • Complete requeueing functionality
    • +
    • Regular expression access control
    • +
    • Delivery Status Notification (RFC1891) support
    • +
    • Rich, customisable texts for automated operations
    • +
    • and more
    • +
    +

    iRedMail team also developes a simple RESTful API server called mlmmjadmin +to help manage mailing lists, it also offers script tool to manage mailing +lists from command line.

    +

    We will show you how to integrate both mlmmj and mlmmjadmin in this tutorial.

    +

    Backup SQL database first

    +

    Although we don't modify any existing SQL data in this tutorial, but it's +a good idea to backup it now before you adding any new mailing lists.

    +

    Please run command bash /var/vmail/backup/backup_pgsql.sh to backup SQL +databases.

    +

    Create required system account

    +

    mlmmj will be ran as user mlmmj and group mlmmj, all mailing list data will +be stored under its home directory /var/vmail/mlmmj:

    +

    On Linux or OpenBSD:

    +
    groupadd mlmmj
    +useradd -m -d /var/vmail/mlmmj -s /sbin/nologin mlmmj
    +chown -R mlmmj:mlmmj /var/vmail/mlmmj
    +chmod -R 0700 /var/vmail/mlmmj
    +
    + +

    On FreeBSD:

    +
    pw groupadd mlmmj
    +pw useradd -m -g mlmmj -s /sbin/nologin -d /var/vmail/mlmmj mlmmj
    +chown -R mlmmj:mlmmj /var/vmail/mlmmj
    +chmod -R 0700 /var/vmail/mlmmj
    +
    + +

    Update SQL tables in vmail database

    +

    We need some updates in vmail SQL database:

    +
      +
    • new SQL table maillists: used to store profile of mailing list.
    • +
    • new SQL column forwardings.is_maillist
    • +
    • new SQL column domain.maillists: used to set per-domain limit of mailing + list accounts. This column is mostly used by iRedAdmin-Pro.
    • +
    +

    Now apply the SQL changes with SQL commands below:

    +
    cd /tmp
    +wget https://bitbucket.org/zhb/iredmail/raw/default/extra/update/0.9.8/mlmmj.pgsql
    +su - postgres
    +psql -d vmail < /tmp/mlmmj.pgsql
    +
    + +

    Postfix integration

    +
      +
    • +

      Please add lines below in Postfix config file /etc/postfix/master.cf:

      +
      +

      Attention

      +
        +
      • Command /usr/bin/mlmmj-amime-receive doesn't exist yet, we will + create it later.
      • +
      • On FreeBSD and OpenBSD, it should be + /usr/local/usr/bin/mlmmj-amime-receive instead.
      • +
      +
      +
    • +
    +
    # ${nexthop} is '%d/%u' in transport ('mlmmj:%d/%u')
    +mlmmj   unix  -       n       n       -       -       pipe
    +    flags=ORhu user=mlmmj argv=/usr/bin/mlmmj-amime-receive -L /var/vmail/mlmmj/${nexthop}
    +
    + +
      +
    • Add line below in Postfix config file /etc/postfix/main.cf:
    • +
    +
    mlmmj_destination_recipient_limit = 1
    +
    + +
      +
    • Open Postfix config file /etc/postfix/main.cf, update existing parameter + transport_maps, add new sql lookup like below. We will create required sql + lookup file later.
    • +
    +
    transport_maps =
    +    proxy:pgsql:/etc/postfix/pgsql/transport_maps_user.cf
    +    proxy:pgsql:/etc/postfix/pgsql/transport_maps_maillist.cf   # <- Add this line
    +    ...
    +
    + +
      +
    • Now create file /etc/postfix/pgsql/mlmmj_maillists_maps.cf:
    • +
    +
    +

    Warning

    +

    Please update the password = line with the real password of SQL user +vmail, you can find it in files under /etc/postfix/pgsql/.

    +
    +
    user        = vmail
    +password    = qsescZvV03f6YUtTMN2bQTejmjatzz
    +hosts       = 127.0.0.1
    +port        = 3306
    +dbname      = vmail
    +query       = SELECT maillists.transport FROM maillists,domain WHERE maillists.address='%s' AND maillists.active=1 AND maillists.domain = domain.domain AND domain.active=1
    +
    + +
      +
    • Run commands below to create file /usr/bin/mlmmj-amime-receive (Linux) or + /usr/local/bin/mlmmj-amime-receive (Linux/FreeBSD):
    • +
    +
    +

    Attention

    +

    mlmmj doesn't support signature signing very well, so we follow mlmmj +official document and create this script to sign signature properly with +command altermime. All iRedMail installation should have command +altermime (package AlterMIME) available, so you don't need to install +it manually

    +
    +

    On Linux:

    +
    cd /usr/bin/
    +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive
    +chown mlmmj:mlmmj mlmj-amime-receive
    +chmod 0550 mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/bin/mlmmj-receive#g' mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/bin/altermime#g' mlmmj-amime-receive
    +
    + +

    On FreeBSD or OpenBSD:

    +
    cd /usr/local/bin/
    +wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/mlmmj/mlmmj-amime-receive
    +chown mlmmj:mlmmj mlmj-amime-receive
    +chmod 0550 mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_MLMMJ_RECEIVE#/usr/local/bin/mlmmj-receive#g' mlmmj-amime-receive
    +perl -pi -e 's#PH_CMD_ALTERMIME#/usr/local/bin/altermime#g' mlmmj-amime-receive
    +
    + +

    Amavisd Integration

    +

    We need Amavisd to listen on one more port 10027, it will be used to scan +spam/virus for emails posted to mailing list.

    +
      +
    • Please open Amavisd config file, find parameter $inet_socket_port, add new + port number 10027 in the list, like below:
        +
      • On RHEL/CentOS, it's /etc/amavisd/amavisd.conf.
      • +
      • On Debian/Ubuntu, it's /etc/amavis/conf.d/50-user.
      • +
      • On OpenBSD, it's /etc/amavisd.conf.
      • +
      • On FreeBSD, it's /usr/local/etc/amavisd.conf.
      • +
      +
    • +
    +
    $inet_socket_port = [10024, 10026, 10027, 9998];
    +
    + +
      +
    • Add lines below in Amavisd config file. It creates a new policy bank called + MLMMJ for emails submitted by mlmmj from port 10027. The purpose is signing + DKIM key on outgoing emails sent by mailing list, but disable + spam/virus/banned/bad-header checks, because emails sent to mailing list will + be scanned either on port 10024 (incoming email from external senders) or + 10026 (outgoing email sent by smtp authenticated users).
    • +
    +
    $interface_policy{'10027'} = 'MLMMJ';
    +$policy_bank{'MLMMJ'} = {
    +    originating => 1,           # declare that mail was submitted by our smtp client
    +    allow_disclaimers => 0,     # mailing list should use footer text instead.
    +    enable_dkim_signing => 1,   # sign DKIm signature
    +    smtpd_discard_ehlo_keywords => ['8BITMIME'],
    +    terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
    +    bypass_spam_checks_maps => [1],     # don't check spam
    +    bypass_virus_checks_maps => [1],    # don't check virus
    +    bypass_banned_checks_maps => [1],   # don't check banned file names and types
    +    bypass_header_checks_maps => [1],   # don't check bad header
    +};
    +
    + +

    Now restart Amavisd and Postfix servivce, mlmmj mailing list manager is now +fully integrated.

    +

    We will setup mlmmjadmin program to make managing mailing lists easier.

    +

    Setup mlmmjadmin: RESTful API server used to manage mlmmj mailing lists

    +
      +
    • +

      Download the latest mlmmjadmin release: https://github.com/iredmail/mlmmjadmin/releases, + and upload to iRedMail server. We assume it's uploaded to /root/ directory.

      +
      +

      Attention

      +

      We use mlmmjadmin-1.0 for example below.

      +
      +
    • +
    • +

      Extract downloaded mlmmjadmin package to /opt/ directory, and create a + symbol link:

      +
    • +
    +
    tar xjf /root/mlmmjadmin-1.0.tar.bz2 -C /opt
    +ln -s /opt/mlmmjadmin-1.0 /opt/mlmmjadmin
    +
    + +
      +
    • Generate config file by copying sample file, settings.py.sample:
    • +
    +
    cd /opt/mlmmjadmin
    +cp settings.py.sample settings.py
    +chown mlmmj:mlmmj settings.py
    +chmod 0400 settings.py
    +
    + +
      +
    • Generate a random, long string as API auth token, it will be used by your + API client. For example:
    • +
    +
    $ echo $RANDOM | md5sum
    +43a89b7aa34354089e629ed9f9be0b3b
    +
    + +
      +
    • Add this string in /opt/mlmmjadmin/settings.py, parameter api_auth_tokens + like below:
    • +
    +
    api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b']
    +
    + +

    You can add as many token as you want for different API clients. For example:

    +
    api_auth_tokens = ['43a89b7aa34354089e629ed9f9be0b3b', '703ed37b20243d7c51c56ce6cd90e94c']
    +
    + +
      +
    • if you manage mail accounts WITH iRedAdmin-Pro, please set values of + parameters backend_api and backend_cli in /opt/mlmmjadmin/settings.py + like below:
    • +
    +
    backend_api = 'bk_none'
    +backend_cli = 'bk_iredmail_sql'
    +
    + +
      +
    • if you do NOT manage mail accounts with iRedAdmin-Pro, please set values + of parameters backend_api and backend_cli in /opt/mlmmjadmin/settings.py + like below:
    • +
    +
    backend_api = 'bk_iredmail_sql'
    +backend_cli = 'bk_iredmail_sql'
    +
    + +
      +
    • +

      Add extra required parameters in /opt/mlmmjadmin/settings.py, so that + mlmmjadmin can connect to SQL server and manage mailing lists.

      +
      +

      Attention

      +

      You can find SQL server address, port, database name, SQL username and +password in iRedAdmin config file, the SQL user must have both read and +write privileges to manage vmail database. iRedMail server usually +use SQL user vmailadmin for this purpose.

      +
      +
    • +
    +
    iredmail_sql_db_type = 'pgsql'
    +iredmail_sql_db_server = '127.0.0.1'
    +iredmail_sql_db_port = 3306
    +iredmail_sql_db_name = 'vmail'
    +iredmail_sql_db_user = 'vmailadmin'
    +iredmail_sql_db_password = '<password>'
    +
    + +
      +
    • Copy rc/systemd scripts for service control:
    • +
    +
    #
    +# For RHEL/CentOS
    +#
    +cp /opt/mlmmjadmin/rc_scripts/systemd/rhel.service /lib/systemd/system/mlmmjadmin.service
    +chmod 0644 /lib/systemd/system/mlmmjadmin.service
    +systemctl daemon-reload
    +systemctl enable mlmmjadmin
    +
    +#
    +# For Debian 9 and Ubuntu 16.04 which uses systemd
    +#
    +cp /opt/mlmmjadmin/rc_scripts/systemd/debian.service /lib/systemd/system/mlmmjadmin.service
    +chmod 0644 /lib/systemd/system/mlmmjadmin.service
    +systemctl daemon-reload
    +systemctl enable mlmmjadmin
    +
    +#
    +# For FreeBSD
    +#
    +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.freebsd /usr/local/etc/rc.d/mlmmjadmin
    +chmod 0755 /usr/local/etc/rc.d/mlmmjadmin
    +echo 'mlmmjadmin_enable=YES' >> /etc/rc.conf.local
    +
    +#
    +# For OpenBSD
    +#
    +cp /opt/mlmmjadmin/rc_scripts/mlmmjadmin.openbsd /etc/rc.d/mlmmjadmin
    +chmod 0755 /etc/rc.d/mlmmjadmin
    +rcctl enable mlmmjadmin
    +
    + +
      +
    • Create directory used to store mlmmjadmin log file. mlmmjadmin is + configured to log to syslog directly.
    • +
    +
    #
    +# For RHEL/CentOS
    +#
    +mkdir /var/log/mlmmjadmin
    +chown root:root /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    +#
    +# For Debian/Ubuntu
    +#
    +mkdir /var/log/mlmmjadmin
    +chown syslog:adm /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    +#
    +# For OpenBSD/FreeBSD
    +#
    +mkdir /var/log/mlmmjadmin
    +chown root:wheel /var/log/mlmmjadmin
    +chmod 0755 /var/log/mlmmjadmin
    +
    + +
      +
    • Update syslog daemon config file to log mlmmjadmin to dedicated log file:
    • +
    +

    For Linux

    +
    cp /opt/mlmmjadmin/samples/rsyslog/mlmmjadmin.conf /etc/rsyslog.d/
    +service rsyslog restart
    +
    + +

    For OpenBSD, please append below lines in /etc/syslog.conf:

    +
    !!mlmmjadmin
    +local5.*            /var/log/mlmmjadmin/mlmmjadmin.log
    +
    + +

    For FreeBSD, please append below lines in /etc/syslog.conf:

    +
    !mlmmjadmin
    +local5.*            /var/log/mlmmjadmin/mlmmjadmin.log
    +
    + +
      +
    • Now it's ok to start mlmmjadmin service:
    • +
    +
    #
    +# On Linux/FreeBSD:
    +#
    +service mlmmjadmin restart
    +
    +#
    +# On OpenBSD
    +#
    +rcctl start mlmmjadmin
    +
    + +

    References

    + + + + + \ No newline at end of file