Modoboa : serveur postfix relais
Par défaut la configuration psql de modoboa n'écoute pas sur le réseau (et c'est une bonne pratique au niveau sécurité), nous devons cependant modifier celà pour que notre postfix relais puisse faire des requêtes sur le serveur central
su - postgres psql -- creer l'utilisateur CREATE USER remotepostfix WITH PASSWORD 'xxxxxxxxxxxx' NOCREATEDB; -- on passe sur la base modoboa \c modoboa -- donner les droits en lecture aux tables ... GRANT SELECT ON TABLE admin_alias,modoboa_admin_aliasrecipient,admin_alias,modoboa_admin_aliasrecipient, postfix_autoreply_transport, admin_domain, admin_domainalias, admin_mailbox, admin_mailboxoperation, postfix_relay_domains_relaydomain, postfix_relay_domains_service, modoboa_admin_aliasrecipient, admin_senderaddress, core_user TO remotepostfix; -- verification des droits \dp exit
Ensuite, en tant que postgres on ajoute l'autorisation de se connecter sur le réseau local a la base modoboa pour l'utilisateur remotepostfix
cat >> /etc/postgresql/9.6/main/pg_hba.conf << EOF host modoboa remotepostfix 192.168.12.1/24 md5 EOF
Enfin il faut ajouter ou modifier la ligne suivante dans le fichier /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = '*'
Maintenant sur le serveur postfix relais nous pouvons faire un test après avoir installé le minimum
apt install postfix-pgsql postgresql-client psql -h 192.168.12.1 -U remotepostfix -W modoboa
Il faut ensuite configurer le serveur postfix pour qu'il s'appuie sur la base de données de modoboa, pour celà il suffit de s'inspirer des fichiers de configuration du postfix de modoboa, par exemple:
- main.cf
## Proxy maps proxy_read_maps = proxy:unix:passwd.byname proxy:pgsql:/etc/postfix/sql-domains.cf proxy:pgsql:/etc/postfix/sql-domain-aliases.cf proxy:pgsql:/etc/postfix/sql-aliases.cf proxy:pgsql:/etc/postfix/sql-relaydomains.cf proxy:pgsql:/etc/postfix/sql-relaydomains-transport.cf proxy:pgsql:/etc/postfix/sql-relaydomain-aliases-transport.cf proxy:pgsql:/etc/postfix/sql-autoreplies-transport.cf proxy:pgsql:/etc/postfix/sql-maintain.cf proxy:pgsql:/etc/postfix/sql-relay-recipient-verification.cf proxy:pgsql:/etc/postfix/sql-sender-login-mailboxes.cf proxy:pgsql:/etc/postfix/sql-sender-login-aliases.cf proxy:pgsql:/etc/postfix/sql-sender-login-mailboxes-extra.cf proxy:pgsql:/etc/postfix/sql-spliteddomains-transport.cf ## Relay domains #oui on demande a modoboa quels sont les domaines qu'on gere relay_domains = proxy:pgsql:/etc/postfix/sql-relaydomains.cf #on laisse faire le serveur principal de modoboa pour ca transport_maps = proxy:pgsql:/etc/postfix/sql-relaydomains-transport.cf # proxy:pgsql:/etc/postfix/sql-spliteddomains-transport.cf # proxy:pgsql:/etc/postfix/sql-autoreplies-transport.cf # Recipient restriction rules #serveur de mail entrant, on refuse donc ce qui est du reseau local smtpd_recipient_restrictions = permit_mynetworks check_recipient_access proxy:pgsql:/etc/postfix/sql-maintain.cf proxy:pgsql:/etc/postfix/sql-relay-recipient-verification.cf reject_unauth_destination reject_non_fqdn_sender reject_non_fqdn_recipient reject_non_fqdn_helo_hostname #liste des adresses mails existantes relay_recipient_maps = proxy:pgsql:/etc/postfix/sql-sender-login-mailboxes.cf proxy:pgsql:/etc/postfix/sql-sender-login-aliases.cf proxy:pgsql:/etc/postfix/sql-sender-login-mailboxes-extra.cf
- exemple d'un fichier SQL (tous les autres sont modifiés de la même manière par rapport aux fichiers livrés sur modoboa) /etc/postfix/sql-maintain.cf
user = remotepostfix password = xxxxxxxxxxxx dbname = modoboa hosts = 192.168.12.1 query = SELECT '450 Requested mail action not taken: mailbox unavailable' FROM admin_mailbox mb INNER JOIN admin_domain dom ON mb.domain_id=dom.id INNER JOIN admin_mailboxoperation mbop ON mbop.mailbox_id=mb.id WHERE dom.name='%d' AND mb.address='%u' LIMIT 1