OVH Cloud OVH Cloud

Postfix

2 réponses
Avatar
ben64
Bonjour tout le monde, je vais tenter d'expliquer le plus clairement
possible mon problème qui est un peu complexe.

Je veux installer un serveur SMTP qui gère plusieurs domaines. Les
domaines à gérer sont les suivants :
- domain.com
- domain.net
- example.com
- other.com

Le domaine "domain.net" n'est en réalité qu'un alias vers le domaine
"domain.com". Ce qui veut dire que tout mail à destination de
toto@domain.net sera envoyé sur la boite aux lettres de toto@domain.com.
Jusque là tout va bien. Etant donné le grand nombre boites à lettre que
je veux gérer, j'utilise la base de données MySQL pour simplifier toutes
les opérations (ajout de boites au lettres, d'alias, d'alias de domaines
, ...). Toutes les personnes qui utilisent ce serveur de mail n'ont pas
de compte sur la machine, et je ne veux pas qu'elles en aient. J'utilise
donc le système de boites au lettres virtuelles.

virtual_alias_maps = mysql:/usr/local/postfix/etc/mysql-aliases.cf
virtual_mailbox_domains = mysql:/usr/local/postfix/etc/mysql-domains.cf
virtual_mailbox_maps = mysql:/usr/local/postfix/etc/mysql-mailbox.cf
virtual_transport = virtual

La table pour les alias est la table alias, celle pour les domaines est
la table domain et celle pour les boites aux lettres est la boite mailbox.
Tout cela fonctionne. Cependant les problèmes arrivent maintenant (enfin !).

Je veux que tous les messages qui arrivent à destination d'un
utilisateur inconnu, mais dans un domaine que je gère soient envoyés
dans une boite au lettre particulière. Pour faire cela, je procède de
cette facon :

Table alias :
alias | goto
-----------------------------------------
@domain.net | @domain.com
toto@domain.com | toto@domain.com
titi@example.com| titi@example.com
toto@other.com | toto@other.com
@domain.com | unknown
@example.com | unknown
@other.com | unknown


unknown étant une boite au lettre particulière.

Comment puis je procéder avec ce système pour que l'utilisateur
spam@domain.com soit totalement ignoré ?
J'ai bien essayé de rajouter une ligne du type :

Table alias :
alias | goto
---------------------------------------
spam@domain.com | |/usr/bin/ignore

/usr/bin/ignore étant un programme qui ignore tout simplement le mail ou
encore mieux qui effectue une action précise.

Cependant l'execution de programmes ne peut être faite par le programme
"virtual" (le programme "local" le peut).

Si vous avez un conseil, une idée, ou si quelque chose dans ce mécanisme
vous choque, merci de m'en faire part.

Merci d'avance

Benoît

2 réponses

Avatar
Olivier Macchioni
On Mon, 25 Aug 2003 16:32:35 +0200, ben64 wrote:

[...]


unknown étant une boite au lettre particulière.

Comment puis je procéder avec ce système pour que l'utilisateur
soit totalement ignoré ?
J'ai bien essayé de rajouter une ligne du type :

Table alias :
alias | goto
---------------------------------------
| |/usr/bin/ignore

/usr/bin/ignore étant un programme qui ignore tout simplement le mail ou
encore mieux qui effectue une action précise.

Cependant l'execution de programmes ne peut être faite par le programme
"virtual" (le programme "local" le peut).

Si vous avez un conseil, une idée, ou si quelque chose dans ce mécanisme
vous choque, merci de m'en faire part.


Je fais quelque chose d'un peu différent : j'ai une liste d'adresses
locales 'blacklistées' parce qu'elles ne recevaient plus que du spam.
J'ai donc décidé que tout mail envoyé sur une de ces adresses se solde
par une erreur 554.

La configuration est la suivante (j'ai rajouté une table) :

mysql> desc RecipientAccess;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| Recipient | varchar(255) | | PRI | | |
| Message | varchar(255) | | | | |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from RecipientAccess;
+------------------+----------------------------------+
| Recipient | Message |
+------------------+----------------------------------+
| | No more SPAM to this address |
[...]


Dans le main.cf :

smtpd_recipient_restrictions = check_recipient_access
mysql:/etc/postfix/recipient_access.cf.sql

dans recipient_access.cf.sql :

user = xxx
password = xxx
dbname = xxx
table = RecipientAccess
select_field = CONCAT("554 ", Message)
where_field = Recipient
hosts = localhost
additional_conditions
Voilàvoilà... je sais que ça répond pas à ton problème, mais en tout
cas les mails n'arriveront plus sur ton serveur.

Olivier

Avatar
ben64
Effectivement ca ne répond pas, mais c'est une solution encore meilleure
:) Donc merci beaucoup.
Sinon la solution d'Olivier Tharan permet effectivement de faire ce que
je voulais. Merci à vous deux.

Benoît

Olivier Macchioni wrote:
On Mon, 25 Aug 2003 16:32:35 +0200, ben64 wrote:


[...]


unknown étant une boite au lettre particulière.

Comment puis je procéder avec ce système pour que l'utilisateur
soit totalement ignoré ?
J'ai bien essayé de rajouter une ligne du type :

Table alias :
alias | goto
---------------------------------------
| |/usr/bin/ignore

/usr/bin/ignore étant un programme qui ignore tout simplement le mail ou
encore mieux qui effectue une action précise.

Cependant l'execution de programmes ne peut être faite par le programme
"virtual" (le programme "local" le peut).

Si vous avez un conseil, une idée, ou si quelque chose dans ce mécanisme
vous choque, merci de m'en faire part.



Je fais quelque chose d'un peu différent : j'ai une liste d'adresses
locales 'blacklistées' parce qu'elles ne recevaient plus que du spam.
J'ai donc décidé que tout mail envoyé sur une de ces adresses se solde
par une erreur 554.

La configuration est la suivante (j'ai rajouté une table) :

mysql> desc RecipientAccess;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| Recipient | varchar(255) | | PRI | | |
| Message | varchar(255) | | | | |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from RecipientAccess;
+------------------+----------------------------------+
| Recipient | Message |
+------------------+----------------------------------+
| | No more SPAM to this address |
[...]


Dans le main.cf :

smtpd_recipient_restrictions = check_recipient_access
mysql:/etc/postfix/recipient_access.cf.sql

dans recipient_access.cf.sql :

user = xxx
password = xxx
dbname = xxx
table = RecipientAccess
select_field = CONCAT("554 ", Message)
where_field = Recipient
hosts = localhost
additional_conditions >
Voilàvoilà... je sais que ça répond pas à ton problème, mais en tout
cas les mails n'arriveront plus sur ton serveur.

Olivier