Alias virtuel ne marche pas avec POSTFIXADMIN

Bonjour à tous,

C’est un plaisir de rejoindre votre communauté,
Je me suis amusé à installer un serveur smtp postfix avec un raspberry pi 3 et dovecot
Tout fonctionne parfaitement sauf que les alias que je crée avec postfixadmin ne sont pas pris en compte
je reçois un mailer daemon comme si un utilisateur réel n’existait pas

<toto@xxxx.fr>: host smtp.xxxx.fr[109.26.xxx.xxx] said: 550 5.1.1
<toto@xxxx.fr>: Recipient address rejected: User unknown in virtual mailbox table (in reply to RCPT TO command)

J’ai testé en mettant mes alias en manuel sans passer par postfixadmin et là ça marche sans aucun problème

dans /etc/postfix/main.cf

canonical_maps = hash:/etc/postfix/canonical

(le fichier canonical contenant mes alias)

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

tout le reste fonctionne à merveille, il n’y a que les alias dans la base de données qui ne passent pas
et pourtant quand je teste mon alias avec

postmap -q

le résultat est correct

Avez vous une idée ?

Je me doute qu’il doit pas etre facile de pouvoir répondre sans voir de logs, mais étant relativement novice
quel log devrai je vous montrer pour comprendre ce problème ?

merci de votre réponse

Cordialement
Jean-Pierre

Je ne connaissais pas postfixadmin, mais de ce que je vois, ça s’occupe uniquement des utilisateurs et domaines >virtuels< de postfix.
Du coup, si tu as un utilisateur >réel< toto, mais que tu n’as pas défini de >boite< toto sur le domaine xxxx.fr, c’est normal que ton serveur réponde qu’il ne connait pas de destinataire avec cette adresse, non ?

C’est ton postfixadmin qui utilise ce rewrite là que je ne connaissais pas ?
Parceque moi, j’utilise plutôt virtual_alias_maps
https://postfix.traduc.org/index.php/postconf.5.html#virtual_alias_maps
Mais on ne parle peut être pas de réécrire la même chose, note.

non, je n’avais pas d’utlisateur réel qui porte le nom de toto
la connexion avec la base de données est correcte
ce n’est que les alias virtuels qui ne marche pas en les rentrant dans la db

Bonjour,

Quelle est la requête SQL qui correspond à la directive virtual_alias_maps de postfix ?

Bonjour Bruno,

Cette requête, je la trouve dans main.cf ?

Voici mon main.cf

  GNU nano 3.2                                                              /etc/postfix/main.cf                                                                        

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = smtp.xxxx.fr

canonical_maps = hash:/etc/postfix/canonical

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, raspberrypi, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination

# recommandé pour avoir des details dans les logs
smtp_tls_loglevel = 1
smtp_tls_exclude_ciphers = NULL, aNULL, RC4, 3DES, eNULL, DHE_EXPORT
smtp_tls_mandatory_ciphers = high
smtp_tls_ciphers = medium
smtp_tls_protocols = !SSLv2, !SSLv3

Non une requête SQL est effectué par l’intermédiaire d’un client SQL ou d’une librairie à l’intention du serveur SQL hébergeant la base de donnée de l’applicatif (dans ce cas c’est mysql hébergeant la base de postfix-admin), tu doit donc avoir un serveur SQL d’installé et configuré et il doit y avoir une requête SQL lorsque tu interroge la partie alias virtuel … la question est quel est-elle ?

root@xxxx:/home# postmap -q toto@xxxx.fr mysql:/etc/postfix/mysql-virtual-alias-maps.cf

redir_ok@xxxx.fr

Le résultat est bien l’email cible de redirection

alors pourquoi cela ne marche pas en utilisation réelle ?

Merci clochette,

Où puis je la trouver cette requête ?

Je réédite, s’agit t’il de ceci ?

/etc/postfix/mysql-virtual_mailboxes.cf
user = mailuser
password = ********
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM mailbox WHERE username='%s'

Tu n’as pas de directive virtual_alias_maps (cf. http://www.postfix.org/VIRTUAL_README.html) postfix ne peut donc pas établir de correspondances entre adresses de courriel (alias). Par exemple toto@example.org est un alias de tata@example.com.

Quant à cette directive :

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

elle est censée permettre à Postfix d’établir la correspondance entre les adresse de courriels et l’emplacement où sont stockés les courriel. Par exemple savoir que les courriels de toto@example.com sont stockés dans

/srv/mail/example.com/toto

Mais avec cette requête :

query = SELECT 1 FROM mailbox WHERE username=’%s’

je doute que cela fonctionne…

EDIT : puisqu’il s’agit de postfixadmin, je précise que toute la configuration est indiquée dans la doc fournie : /usr/share/doc/postfixadmin/DOCUMENTS/

Merci, il n’y avait pas de directive virtual_alias_maps
le problème est résolu, tout fonctionne

query = SELECT 1 FROM mailbox WHERE username=’%s’

Cette requete fonctionne parfaitement

d’ailleurs, j’ai mis la même dans mysql-virtual-mailbox-maps.cf

PROBLEME RESOLU !

Tant mieux pour toi si cela fonctionne mais je suis très étonné car cette requête ne peut renvoyer le résultat attendu. Elle renvoie 1 si l’utilisateur existe dans la table mailbox et rien sinon.
C’est en totale contradiction avec le résultat de ta commande postmap du message 6 qui renvoie bien l’alias.

Salut Bruno,

non, en fait j’ai due me tromper soit dans la copie soit dans l’édition
j’ai ceci dans virtual-alias-maps.cf

user = mailuser
password = ********
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address=’%s’

Je préfère le préciser pour ne pas induire d’autres utilisateurs en erreur !

Là, je suis d’accord cette requête est correcte :slightly_smiling_face: