Add database table for catchall destinations
Catch-all aliases are stored for a domain. Since there can be multiple
destinations per domain, this is done using a 1:n relation on the gid.
This commit extends the SQL schema definition and also provides appropriate
upgrade DDL.
Installation PrerequisitesYou should already have installed and configured Postfix, Dovecot andPostgreSQL.The Virtual Mail Manager depends on:- Python (>= 2.4.0)- Psycopg 2¹ or pyPgSQL²If you are using Python <= 2.5.0:- if you want to store your users' passwords as PLAIN-MD4 digest in the database, vmm will try to use Crypto.Hash.MD4 from PyCrypto³.- if you are using Dovecot >= v1.1.0 and you want to store your users' passwords as SHA256 or SSHA256 hashes, vmm will try to use Crypto.Hash.SHA256 from PyCrypto². For SHA256/SSHA256 you should have at least use PyCrypto in version 2.1.0alpha1. When the Crypto.Hash module couldn't be imported, vmm will use dovecotpw/doveadm, if the misc.password_scheme setting in the vmm.cfg is set to PLAIN-MD4, SHA256 or SSHA256[1] Psycopg: <http://initd.org/psycopg/> (Debian: python-psycopg2)[2] pyPgSQL: <http://pypgsql.sourceforge.net/> (Debian: python-pgsql)[3] PyCrypto: <http://www.pycrypto.org/> (Debian: python-crypto)Configuring PostgreSQL(for more details see: http://vmm.localdomain.org/PreparingPostgreSQL)* /etc/postgresql/8.4/main/pg_hba.conf [ if you prefer to connect via TCP/IP ] # IPv4 local connections: host mailsys +mailsys 127.0.0.1/32 md5 [ if you want to connect through a local Unix-domain socket ] # "local" is for Unix domain socket connections only local mailsys +mailsys md5 # reload configuration /etc/init.d/postgresql-8.4 force-reload* Create a DB user if necessary: DB Superuser: createuser -s -d -r -E -e -P $USERNAME DB User: createuser -d -E -e -P $USERNAME* Create Database and db users for vmm, Postfix and Dovecot connecting to PostgreSQL: psql template1 # create users, group and the database CREATE USER vmm ENCRYPTED PASSWORD 'DB PASSWORD for vmm'; CREATE USER dovecot ENCRYPTED password 'DB PASSWORD for Dovecot'; CREATE USER postfix ENCRYPTED password 'DB PASSWORD for Postfix'; CREATE ROLE mailsys WITH USER postfix, dovecot, vmm; CREATE DATABASE mailsys WITH OWNER vmm ENCODING 'UTF8'; \q # connect to the new database psql mailsys vmm -W -h 127.0.0.1 # either import the database structure for Dovecot v1.0.x/v1.1.x \i /path/to/create_tables.pgsql # or import the database structure for Dovecot v1.2.x \i /path/to/create_tables-dovecot-1.2.x.pgsql # set permissions GRANT SELECT ON dovecot_password, dovecot_user TO dovecot; GRANT SELECT ON postfix_alias, postfix_gid, postfix_maildir, postfix_relocated, postfix_transport, postfix_uid TO postfix; # leave psql \qCreate directory for your mails mkdir /srv/mail cd /srv/mail/ mkdir 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z chmod 771 /srv/mail chmod 751 /srv/mail/*Configuring Dovecot* /etc/dovecot/dovecot.conf # all your other settings #disable_plaintext_auth = no mail_location = maildir:~/Maildir first_valid_uid = 70000 first_valid_gid = 70000 protocol lda { postmaster_address = postmaster@YOUR-DOMAIN.TLD } auth default { mechanisms = cram-md5 login plain passdb sql { args = /etc/dovecot/dovecot-sql.conf } userdb sql { args = /etc/dovecot/dovecot-sql.conf } user = nobody socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 } client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } }* /etc/dovecot/dovecot-sql.conf driver = pgsql connect = host=localhost dbname=mailsys user=dovecot password=$Dovecot_PASS default_pass_scheme = PLAIN password_query = SELECT "user", password FROM dovecot_password WHERE "user"='%Lu' AND %Ls user_query = SELECT home, uid, gid, mail FROM dovecot_user WHERE userid = '%Lu'Provide a root SETUID copy of Dovecot's deliver agent for Postfix mkdir -p /usr/local/lib/dovecot chmod 700 /usr/local/lib/dovecot chown nobody /usr/local/lib/dovecot cp /usr/lib/dovecot/deliver /usr/local/lib/dovecot/ chown root:`id -g nobody` /usr/local/lib/dovecot/deliver chmod u+s,o-rwx /usr/local/lib/dovecot/deliverStart or restart DovecotConfiguring Postfix's master.cf # Add Dovecot's deliver agent dovecot unix - n n - - pipe flags=DORhu user=nobody argv=/usr/local/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -n -m ${extension}Configuring Postfix's main.cf # relocated users from the database #relocated_maps = pgsql:/etc/postfix/pgsql-relocated_maps.cf # virtual domains virtual_mailbox_domains = pgsql:/etc/postfix/pgsql-virtual_mailbox_domains.cf virtual_alias_maps = pgsql:/etc/postfix/pgsql-virtual_alias_maps.cf transport_maps = pgsql:/etc/postfix/pgsql-transport.cf virtual_minimum_uid = 70000 virtual_uid_maps = pgsql:/etc/postfix/pgsql-virtual_uid_maps.cf virtual_gid_maps = pgsql:/etc/postfix/pgsql-virtual_gid_maps.cf virtual_mailbox_base = / virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual_mailbox_maps.cf # dovecot LDA dovecot_destination_recipient_limit = 1 virtual_transport = dovecot: # dovecot SASL smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes # Keep smtpd_sasl_local_domain identical to Dovecot's auth_default_realm: # empty. Both are empty by default. Let it commented out. # Read more at: http://wiki.dovecot.org/Authentication/Mechanisms/DigestMD5 #smtpd_sasl_local_domain = smtpd_sasl_security_options = noplaintext, noanonymous #smtpd_sasl_security_options = noanonymous #broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destinationInstalling the Virtual Mail Manager and configure the rest Installing from Mercurial or vmm-x.y.z.tar.bz2 after cloning from the hg repo or extracting the archive change into the new directory and type: ./install.sh edit all the pgsql-*.cf files in /etc/postfix reload postfix # configure the Virtual Mail Manager vmm configure # for help type vmm help