diff --git a/doc/getting_started/configuration.rst b/doc/getting_started/configuration.rst index 5336e5eb8..bdfa2dae5 100644 --- a/doc/getting_started/configuration.rst +++ b/doc/getting_started/configuration.rst @@ -112,3 +112,71 @@ modifying the ``TIME_ZONE`` variable. For example:: TIME_ZONE = 'Europe/Paris' +*********************** +External authentication +*********************** + +LDAP +==== + +*Modoboa* supports external LDAP authentication using the following extra components: + +* `Python LDAP client `_ +* `Django LDAP authentication backend `_ + +If you want to use this feature, you must first install those components:: + + $ pip install python-ldap django-auth-ldap + +Then, all you have to do is to modify the *settings.py* file: + +* Add a new authentication backend to the `AUTHENTICATION_BACKENDS` + variable, like this:: + + AUTHENTICATION_BACKENDS = ( + 'django_auth_ldap.backend.LDAPBackend', + 'modoboa.lib.authbackends.SimpleBackend', + 'django.contrib.auth.backends.ModelBackend', + ) + +* Set the required parameters to establish the communication with your + LDAP server, for example:: + + import ldap + from django_auth_ldap.config import LDAPSearch + + AUTH_LDAP_BIND_DN = "" + AUTH_LDAP_BIND_PASSWORD = "" + LDAP_USER_BASE = "ou=users,dc=example,dc=com" + LDAP_USER_FILTER = "(mail=%(user)s)" + AUTH_LDAP_USER_SEARCH = LDAPSearch(LDAP_USER_BASE, + ldap.SCOPE_SUBTREE, LDAP_USER_FILTER) + +You will find a detailled documentation `here +`_. + +Once the authentication is properly configured, the users defined in +your LDAP directory will be able to connect to *Modoboa*, the associated +domain and mailboxes will be automatically created if needed. + +Users will also be able to update their LDAP password directly from +Modoboa. + +.. note:: + + Modoboa doesn't provide any synchronization mechanism once a user + is registered into the database. Any modification done from the + directory to a user account will not be reported to Modoboa (an + email address change for example). Currently, the only solution is + to manually delete the Modoboa record, it will be recreated on the + next user login. + +Available settings +------------------ + +* ``LDAP_USER_BASE`` : the distinguish name of the search base +* ``LDAP_USER_FILTER`` : the filter used to retrieve users distinguish name +* ``LDAP_PASSWORD_ATTR`` : the attribute used to store the password + (default: ``userPassword``) +* ``LDAP_ACTIVE_DIRECTORY`` : used to indicate if your directory is an + Active Directory one (default: ``False``) diff --git a/doc/getting_started/integration.rst b/doc/getting_started/integration.rst deleted file mode 100644 index 51fdc29b5..000000000 --- a/doc/getting_started/integration.rst +++ /dev/null @@ -1,354 +0,0 @@ -################################# -Integration with other components -################################# - -*********************** -External authentication -*********************** - -LDAP -==== - -*Modoboa* supports external LDAP authentication using the following extra components: - -* `Python LDAP client `_ -* `Django LDAP authentication backend `_ - -If you want to use this feature, you must first install those components:: - - $ pip install python-ldap django-auth-ldap - -Then, all you have to do is to modify the *settings.py* file: - -* Add a new authentication backend to the `AUTHENTICATION_BACKENDS` - variable, like this:: - - AUTHENTICATION_BACKENDS = ( - 'django_auth_ldap.backend.LDAPBackend', - 'modoboa.lib.authbackends.SimpleBackend', - 'django.contrib.auth.backends.ModelBackend', - ) - -* Set the required parameters to establish the communication with your - LDAP server, for example:: - - import ldap - from django_auth_ldap.config import LDAPSearch - - AUTH_LDAP_BIND_DN = "" - AUTH_LDAP_BIND_PASSWORD = "" - LDAP_USER_BASE = "ou=users,dc=example,dc=com" - LDAP_USER_FILTER = "(mail=%(user)s)" - AUTH_LDAP_USER_SEARCH = LDAPSearch(LDAP_USER_BASE, - ldap.SCOPE_SUBTREE, LDAP_USER_FILTER) - -You will find a detailled documentation `here -`_. - -Once the authentication is properly configured, the users defined in -your LDAP directory will be able to connect to *Modoboa*, the associated -domain and mailboxes will be automatically created if needed. - -Users will also be able to update their LDAP password directly from -Modoboa. - -.. note:: - - Modoboa doesn't provide any synchronization mechanism once a user - is registered into the database. Any modification done from the - directory to a user account will not be reported to Modoboa (an - email address change for example). Currently, the only solution is - to manually delete the Modoboa record, it will be recreated on the - next user login. - -Available settings ------------------- - -* ``LDAP_USER_BASE`` : the distinguish name of the search base -* ``LDAP_USER_FILTER`` : the filter used to retrieve users distinguish name -* ``LDAP_PASSWORD_ATTR`` : the attribute used to store the password - (default: ``userPassword``) -* ``LDAP_ACTIVE_DIRECTORY`` : used to indicate if your directory is an - Active Directory one (default: ``False``) - -.. _postfix: - -******* -Postfix -******* - -For *MySQL* users, define the following map files on your server (it should work with -*postfix* versions >= 2.2): - -``/etc/postfix/sql-domains.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = SELECT name FROM admin_domain WHERE name='%s' AND enabled=1 - -``/etc/postfix/sql-domain-aliases.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = SELECT dom.name FROM admin_domain dom INNER JOIN admin_domainalias domal ON dom.id=domal.target_id WHERE domal.name='%s' AND domal.enabled=1 AND dom.enabled=1 - -``/etc/postfix/sql-mailboxes.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = SELECT concat(dom.name, '/', mb.path, (SELECT value FROM lib_parameter WHERE name='admin.MAILDIR_ROOT'), '/') FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.enabled=1 AND dom.name='%d' AND user.is_active=1 AND mb.address='%u' - -``/etc/postfix/sql-aliases.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = (SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.id IN (SELECT al_mb.mailbox_id FROM admin_alias_mboxes al_mb INNER JOIN admin_alias al ON al_mb.alias_id=al.id INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE dom.name='%d' AND dom.enabled=1 AND al.address='%u' AND al.enabled=1)) UNION (SELECT al.extmboxes FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE dom.name='%d' AND dom.enabled=1 AND al.address='%u' AND al.enabled=1 AND al.extmboxes<>'') - -``/etc/postfix/sql-domain-aliases-mailboxes.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = SELECT concat(mb.address, '@', dom.name) FROM admin_domain dom INNER JOIN admin_domainalias domal ON dom.id=domal.target_id INNER JOIN admin_mailbox mb ON dom.id=mb.domain_id WHERE domal.name='%d' AND domal.enabled=1 AND mb.address='%u' - -Then, use the following configuration in the */etc/postfix/main.cf* file -(this is just one possible configuration):: - - # Stuff before - mailbox_transport = virtual - maildrop_destination_recipient_limit = 1 - virtual_minimum_uid = - virtual_gid_maps = static: - virtual_uid_maps = static: - virtual_mailbox_base = /var/vmail - - relay_domains = - virtual_mailbox_domains = mysql:/etc/postfix/sql-domains.cf - virtual_alias_domains = mysql:/etc/postfix/sql-domain-aliases.cf - virtual_mailbox_maps = mysql:/etc/postfix/sql-mailboxes.cf - virtual_alias_maps = mysql:/etc/postfix/sql-aliases.cf, - mysql:/etc/postfix/sql-domain-aliases-mailboxes.cf - # Stuff after - -.. note:: - Modoboa supports both maildir and mbox formats. You can specify - which format to use by modifying the MAILBOX_TYPE parameter available - in the admin panel. - -Optional : 'catchall' aliases -============================= - -Modoboa supports 'catchall' aliases creation. In the case you would -like to use this feature, you'll need to add specific queries to -*postfix* configuration. - -First, create the following new maps (*MySQL* users): - -``/etc/postfix/sql-email2email.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1e - query = SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.name='%d' AND dom.enabled=1 AND mb.address='%u' AND user.is_active=1 - -``/etc/postfix/sql-catchall-aliases.cf``:: - - user = - password = - dbname = - hosts = 127.0.0.1 - query = (SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.id IN (SELECT al_mb.mailbox_id FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id INNER JOIN admin_alias_mboxes al_mb ON al.id=al_mb.alias_id WHERE al.enabled=1 AND al.address='*' AND dom.name='%d' AND dom.enabled=1)) UNION (SELECT al.extmboxes FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE al.enabled='1' AND al.extmboxes<>'' AND al.address='*' AND dom.name='%d' AND dom.enabled=1) - -Once done, edit the *main.cf* configuration file and add the new maps -to the ``virtual_alias_maps`` parameter like this:: - - virtual_alias_maps = mysql:/etc/postfix/sql-aliases.cf, - mysql:/etc/postfix/sql-domain-aliases-mailboxes.cf, - mysql:/etc/postfix/sql-email2email.cf, # new - mysql:/etc/postfix/sql-catchall-aliases.cf # new - -Reload *postfix*. - -.. _dovecot_lda: - -Optional: using Dovecot's LDA -============================= - -If you are using *Dovecot* in your environnement, I recommend to use -its LDA. Doing so, you'll will be able to use extra functionalities -such as sieve filters and more. - -First, edit the */etc/postfix/main.cf* file and define (or modify if -they already exist) the following parameters:: - - virtual_transport = dovecot - dovecot_destination_recipient_limit = 1 - -Then, edit the */etc/postfix/master.cf* file and add the following -definition at the end:: - - dovecot unix - n n - - pipe - flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} - -If you have followed the :ref:`postfix` section to install your -environnement, you need to modify the SQL query corresponding to the -``virtual_mailbox_maps`` parameter. Edit the -*/etc/postfix/maps/sql-mailboxes.cf* and modify the ``query`` -parameter as follow:: - - query = SELECT concat(dom.name, '/', mb.path) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.enabled=1 AND dom.name='%d' AND user.is_active=1 AND mb.address='%u' - -Restart *Postfix*. - -.. _dovecot: - -******* -Dovecot -******* - -If you are using the *maildir* format to store mailboxes, add the -following line into Dovecot's main config file -(*/etc/dovecot/dovecot.conf*):: - - mail_location = maildir:/%h/.maildir - -The ``.maildir`` part is the previous example must match the value of -the ``MAILDIR_ROOT`` parameter. See :ref:`admin-params`. - -If you are using the mbox format, add the following:: - - mail_location = mbox:/%h/:INBOX=/%h/Inbox - -To make the authentication work, edit *dovecot.conf* and add the -following content inside:: - - auth default { - # ... stuff before - - passdb sql { - # Path for SQL configuration file, see /etc/dovecot/dovecot-sql.conf for - # example - args = /etc/dovecot/dovecot-sql.conf - } - - userdb sql { - # Path for SQL configuration file - args = /etc/dovecot/dovecot-sql.conf - } - - # ... stuff after - } - -Make sure to activate only one backend (per type) inside your configuration -(just comment the other ones). - -For *MySQL* users, edit your */etc/dovecot/dovecot-sql.conf* and modify following lines:: - - driver = mysql - connect = host= dbname= user= password= - default_pass_scheme = CRYPT - password_query = SELECT email AS user, password FROM auth_user WHERE email='%u' and is_active=1 - user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid FROM admin_mailbox mb INNER JOIN auth_user user ON mb.user_id=user.id INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' AND user.is_active=1 AND dom.enabled=1 - -Enable quotas support -===================== - -Put the following lines inside the *dovecot.conf* file:: - - protocol imap { - mail_plugins = quota imap_quota - } - -Before continuing, you need to know which quota backend must be used -(function of mailboxes format): - -* mbox : backend=dirsize, -* maildir : backend=maildir. - -If you use version prior to 1.1, add also the following configuration:: - - plugin { - # 10 MB default quota limit - quota = :storage=10240 - } - -For *MySQL* users, modify the above query inside *dovecot-sql.conf* as -follow to activate per-user quotas:: - - user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid, concat(':storage=', mb.quota / 1024) AS quota FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' - -For version >= 1.1, put the following configuration inside the *dovecot.conf* file:: - - plugin { - # Default 10M storage limit with an extra 5M limit when saving to Trash. - quota = :User quota - quota_rule = *:storage=10M - quota_rule2 = Trash:storage=5M - } - -For *MySQL* users, modify the above query inside *dovecot-sql.conf* to -activate per-user quotas:: - - user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid, concat('*:storage=', mb.quota, 'M') AS quota_rule FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' - -Enable ManageSieve/Sieve support -================================ - -.. note:: - The following configuration example should work with versions - 1.X. For versions >= 2, please refer to `Dovecot's wiki - `_. - -Edit the */etc/dovecot/dovecot.conf* file and make the following -modifications: - -* Add ``managesieve`` to the ``protocols`` variable:: - - protocols = imap imaps managesieve - -* Uncomment the ``managesieve`` section:: - - protocol managesieve { - # ... - } - -* Configure the ``lda`` protocol as follow:: - - protocol lda { - postmaster_address = postmaster@ - mail_plugins = sieve # + your other plugins - # ... - } - -* In the ``plugin`` section, uncomment the following content:: - - plugin { - # stuff before - - # Location of the active script. When ManageSieve is used this is actually - # a symlink pointing to the active script in the sieve storage directory. - sieve=~/.dovecot.sieve - - # - # The path to the directory where the personal Sieve scripts are stored. For - # ManageSieve this is where the uploaded scripts are stored. - sieve_dir=~/sieve - } - -Restart *Dovecot*. - -.. note:: - - If you're using *Postfix* as MTA, you will have to use *Dovecot*'s - local delivery agent otherwise your emails won't get filtered. See - :ref:`dovecot_lda` to get information on how to activate this. diff --git a/doc/getting_started/plugins.rst b/doc/getting_started/plugins.rst index a0bc09375..ffdf3851a 100644 --- a/doc/getting_started/plugins.rst +++ b/doc/getting_started/plugins.rst @@ -133,18 +133,44 @@ example line to root's crontab:: You are free to change the frequency. -***************** -Self-service mode -***************** - -TBD - .. note:: If you want to let users release their messages alone (not recommanded), change the value of the ``USER_CAN_RELEASE`` parameter into the admin panel. +Self-service mode +================= + +The *self-service* mode let users act on quarantined messages without +beeing authenticated. They can: + +* View messages +* Remove messages +* Release messages (or send release requests) + +To access a specific message, they only need the following information: + +* Message's unique identifier +* Message's secret identifier + +This information is controlled by *amavis*, which is in charge of +notifying users when new messages are put into quarantine. Each +notification (one per message) must embark a direct link containing +the required identifiers. + +To activate this feature, go the administration panel and set the +``SELF_SERVICE`` paramater to yes. + +The last step is to customize the notification messages *amavis* +sends. The most important is to embark a direct link. Take a look at +the `README.customize `_ file to +learn what you're allowed to do. + +Here is a link example:: + + http:///quarantine/%i/?rcpt=%R&secret_id=[:secret_id] + ******************** Graphical statistics ******************** diff --git a/doc/getting_started/upgrade.rst b/doc/getting_started/upgrade.rst index e4a195be1..04a94d514 100644 --- a/doc/getting_started/upgrade.rst +++ b/doc/getting_started/upgrade.rst @@ -109,7 +109,7 @@ requires a migration. save again #. Update your webserver configuration to make static files available - (see :ref:`webserver`) + (see :ref:`webservers`) #. **For Dovecot users only**, you need to modify the ``password_query`` (file */etc/dovecot/dovecot-sql.conf* by default diff --git a/doc/index.rst b/doc/index.rst index 9f085b022..bf5ff26bc 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -18,9 +18,19 @@ Getting started getting_started/install getting_started/upgrade getting_started/configuration - getting_started/integration getting_started/plugins +******************************** +Integration with other softwares +******************************** + +.. toctree:: + :maxdepth: 2 + + integration/smtp_servers + integration/imap_servers + integration/web_servers + ***************** Extending Modoboa ***************** @@ -38,7 +48,6 @@ Additional resource .. toctree:: :maxdepth: 2 - additional/webserver additional/migrating additional/virtualmachine diff --git a/doc/integration/imap_servers.rst b/doc/integration/imap_servers.rst new file mode 100644 index 000000000..d7ecd2af1 --- /dev/null +++ b/doc/integration/imap_servers.rst @@ -0,0 +1,146 @@ +############ +IMAP servers +############ + +.. _dovecot: + +******* +Dovecot +******* + +If you are using the *maildir* format to store mailboxes, add the +following line into Dovecot's main config file +(*/etc/dovecot/dovecot.conf*):: + + mail_location = maildir:/%h/.maildir + +The ``.maildir`` part is the previous example must match the value of +the ``MAILDIR_ROOT`` parameter. See :ref:`admin-params`. + +If you are using the mbox format, add the following:: + + mail_location = mbox:/%h/:INBOX=/%h/Inbox + +To make the authentication work, edit *dovecot.conf* and add the +following content inside:: + + auth default { + # ... stuff before + + passdb sql { + # Path for SQL configuration file, see /etc/dovecot/dovecot-sql.conf for + # example + args = /etc/dovecot/dovecot-sql.conf + } + + userdb sql { + # Path for SQL configuration file + args = /etc/dovecot/dovecot-sql.conf + } + + # ... stuff after + } + +Make sure to activate only one backend (per type) inside your configuration +(just comment the other ones). + +For *MySQL* users, edit your */etc/dovecot/dovecot-sql.conf* and modify following lines:: + + driver = mysql + connect = host= dbname= user= password= + default_pass_scheme = CRYPT + password_query = SELECT email AS user, password FROM auth_user WHERE email='%u' and is_active=1 + user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid FROM admin_mailbox mb INNER JOIN auth_user user ON mb.user_id=user.id INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' AND user.is_active=1 AND dom.enabled=1 + +Enable quota support +==================== + +Put the following lines inside the *dovecot.conf* file:: + + protocol imap { + mail_plugins = quota imap_quota + } + +Before continuing, you need to know which quota backend must be used +(function of mailboxes format): + +* mbox : backend=dirsize, +* maildir : backend=maildir. + +If you use version prior to 1.1, add also the following configuration:: + + plugin { + # 10 MB default quota limit + quota = :storage=10240 + } + +For *MySQL* users, modify the above query inside *dovecot-sql.conf* as +follow to activate per-user quotas:: + + user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid, concat(':storage=', mb.quota / 1024) AS quota FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' + +For version >= 1.1, put the following configuration inside the *dovecot.conf* file:: + + plugin { + # Default 10M storage limit with an extra 5M limit when saving to Trash. + quota = :User quota + quota_rule = *:storage=10M + quota_rule2 = Trash:storage=5M + } + +For *MySQL* users, modify the above query inside *dovecot-sql.conf* to +activate per-user quotas:: + + user_query = SELECT concat(dom.name, '/', mb.path) AS home, uid, gid, concat('*:storage=', mb.quota, 'M') AS quota_rule FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.address='%n' AND dom.name='%d' + +Enable ManageSieve/Sieve support +================================ + +.. note:: + The following configuration example should work with versions + 1.X. For versions >= 2, please refer to `Dovecot's wiki + `_. + +Edit the */etc/dovecot/dovecot.conf* file and make the following +modifications: + +* Add ``managesieve`` to the ``protocols`` variable:: + + protocols = imap imaps managesieve + +* Uncomment the ``managesieve`` section:: + + protocol managesieve { + # ... + } + +* Configure the ``lda`` protocol as follow:: + + protocol lda { + postmaster_address = postmaster@ + mail_plugins = sieve # + your other plugins + # ... + } + +* In the ``plugin`` section, uncomment the following content:: + + plugin { + # stuff before + + # Location of the active script. When ManageSieve is used this is actually + # a symlink pointing to the active script in the sieve storage directory. + sieve=~/.dovecot.sieve + + # + # The path to the directory where the personal Sieve scripts are stored. For + # ManageSieve this is where the uploaded scripts are stored. + sieve_dir=~/sieve + } + +Restart *Dovecot*. + +.. note:: + + If you're using *Postfix* as MTA, you have to use *Dovecot*'s local + delivery agent otherwise your emails won't get filtered. See + :ref:`dovecot_lda` to get information on how to activate it. diff --git a/doc/integration/smtp_servers.rst b/doc/integration/smtp_servers.rst new file mode 100644 index 000000000..a209c8e5d --- /dev/null +++ b/doc/integration/smtp_servers.rst @@ -0,0 +1,153 @@ +############ +SMTP servers +############ + +.. _postfix: + +******* +Postfix +******* + +This section gives an example about building a simple virtual hosting +configuration with *Postfix*. Refer to the `official documentation +`_ for more explanation. + +.. note:: + + The SQL queries presented below are working well with MySQL + only. To make them work with PostgreSQL, just replace (when needed) + the `concat` function call by the standard concatenation operator + (ie. `||`). + +Define the following map files on your server (it should work with +*postfix* versions >= 2.2): + +``/etc/postfix/sql-domains.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = SELECT name FROM admin_domain WHERE name='%s' AND enabled=1 + +``/etc/postfix/sql-domain-aliases.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = SELECT dom.name FROM admin_domain dom INNER JOIN admin_domainalias domal ON dom.id=domal.target_id WHERE domal.name='%s' AND domal.enabled=1 AND dom.enabled=1 + +``/etc/postfix/sql-mailboxes.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = SELECT concat(dom.name, '/', mb.path, (SELECT value FROM lib_parameter WHERE name='admin.MAILDIR_ROOT'), '/') FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.enabled=1 AND dom.name='%d' AND user.is_active=1 AND mb.address='%u' + +``/etc/postfix/sql-aliases.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = (SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.id IN (SELECT al_mb.mailbox_id FROM admin_alias_mboxes al_mb INNER JOIN admin_alias al ON al_mb.alias_id=al.id INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE dom.name='%d' AND dom.enabled=1 AND al.address='%u' AND al.enabled=1)) UNION (SELECT al.extmboxes FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE dom.name='%d' AND dom.enabled=1 AND al.address='%u' AND al.enabled=1 AND al.extmboxes<>'') + +``/etc/postfix/sql-domain-aliases-mailboxes.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = SELECT concat(mb.address, '@', dom.name) FROM admin_domain dom INNER JOIN admin_domainalias domal ON dom.id=domal.target_id INNER JOIN admin_mailbox mb ON dom.id=mb.domain_id WHERE domal.name='%d' AND domal.enabled=1 AND mb.address='%u' + +Then, use the following configuration in the */etc/postfix/main.cf* file +(this is just one possible configuration):: + + # Stuff before + mailbox_transport = virtual + maildrop_destination_recipient_limit = 1 + virtual_minimum_uid = + virtual_gid_maps = static: + virtual_uid_maps = static: + virtual_mailbox_base = /var/vmail + + relay_domains = + virtual_mailbox_domains = mysql:/etc/postfix/sql-domains.cf + virtual_alias_domains = mysql:/etc/postfix/sql-domain-aliases.cf + virtual_mailbox_maps = mysql:/etc/postfix/sql-mailboxes.cf + virtual_alias_maps = mysql:/etc/postfix/sql-aliases.cf, + mysql:/etc/postfix/sql-domain-aliases-mailboxes.cf + # Stuff after + +.. note:: + Modoboa supports both maildir and mbox formats. You can specify + which format to use by modifying the MAILBOX_TYPE parameter available + in the admin panel. + +Optional : 'catchall' aliases +============================= + +Modoboa supports 'catchall' aliases creation. In the case you would +like to use this feature, you'll need to add specific queries to +*postfix* configuration. + +First, create the following new maps (*MySQL* users): + +``/etc/postfix/sql-email2email.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1e + query = SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.name='%d' AND dom.enabled=1 AND mb.address='%u' AND user.is_active=1 + +``/etc/postfix/sql-catchall-aliases.cf``:: + + user = + password = + dbname = + hosts = 127.0.0.1 + query = (SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id WHERE mb.id IN (SELECT al_mb.mailbox_id FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id INNER JOIN admin_alias_mboxes al_mb ON al.id=al_mb.alias_id WHERE al.enabled=1 AND al.address='*' AND dom.name='%d' AND dom.enabled=1)) UNION (SELECT al.extmboxes FROM admin_alias al INNER JOIN admin_domain dom ON al.domain_id=dom.id WHERE al.enabled='1' AND al.extmboxes<>'' AND al.address='*' AND dom.name='%d' AND dom.enabled=1) + +Once done, edit the *main.cf* configuration file and add the new maps +to the ``virtual_alias_maps`` parameter like this:: + + virtual_alias_maps = mysql:/etc/postfix/sql-aliases.cf, + mysql:/etc/postfix/sql-domain-aliases-mailboxes.cf, + mysql:/etc/postfix/sql-email2email.cf, # new + mysql:/etc/postfix/sql-catchall-aliases.cf # new + +Reload *postfix*. + +.. _dovecot_lda: + +Optional: using Dovecot's LDA +============================= + +If you are using *Dovecot* in your environnement, I recommend to use +its LDA. Doing so, you'll will be able to use extra functionalities +such as sieve filters and more. + +First, edit the */etc/postfix/main.cf* file and define (or modify if +they already exist) the following parameters:: + + virtual_transport = dovecot + dovecot_destination_recipient_limit = 1 + +Then, edit the */etc/postfix/master.cf* file and add the following +definition at the end:: + + dovecot unix - n n - - pipe + flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} + +If you have followed the :ref:`postfix` section to install your +environnement, you need to modify the SQL query corresponding to the +``virtual_mailbox_maps`` parameter. Edit the +*/etc/postfix/maps/sql-mailboxes.cf* and modify the ``query`` +parameter as follow:: + + query = SELECT concat(dom.name, '/', mb.path) FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN auth_user user ON mb.user_id=user.id WHERE dom.enabled=1 AND dom.name='%d' AND user.is_active=1 AND mb.address='%u' + +Restart *Postfix*. diff --git a/doc/additional/webserver.rst b/doc/integration/web_servers.rst similarity index 94% rename from doc/additional/webserver.rst rename to doc/integration/web_servers.rst index a5472cc83..6bcfa3e69 100644 --- a/doc/additional/webserver.rst +++ b/doc/integration/web_servers.rst @@ -1,12 +1,14 @@ -.. _webserver: +.. _webservers: -####################################### -How to serve Modoboa behind a webserver -####################################### +########### +Web servers +########### -******** -Apache 2 -******** +.. _apache2: + +******* +Apache2 +******* First, make sure that both *apache2* and *mod_python* are installed on your server.