Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
543 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  réseaux et sécurité

  [Résolu] Postfix + restreindre domaine d'expédition depuis mon serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Postfix + restreindre domaine d'expédition depuis mon serveur

n°1381400
K-ny13
Posté le 24-09-2015 à 12:16:57  profilanswer
 

Bonjour,
 
Je voudrais que les envois autorisés depuis mon serveur postfix soient autorisés qu'à la condition que l'adresse de l'expéditeur soit bien une adresse de mon domaine.
Plus simplement, que personne ne puisse utiliser mon serveur pour envoyer des mails avec comme expéditeur un autre domaine que le mien.
 
 
En effet, lorsqu'un compte utilisateur se fait piraté les pirates s'authentifient avec le compte compromis pour diffuser du spam bien souvent l'adresse expéditrice et autre que celle de mon domaine. Donc je voudrais bloquer cela en imposant que l'envoi depuis mon serveur se fasse par une adresse du domaine.
 
 
Voici une partie de main.cf
------------------------------------------------------------------------------------------------------------------------
# Regles sur les adresses de destination
# permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifie
# reject_non_fqdn_recipient : Refuser les adresses de destinations invalides (non FQDN)
smtpd_recipient_restrictions =
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_non_fqdn_recipient,
     reject_unauth_destination,
     reject_unknown_recipient_domain,
     check_recipient_access hash:/configuration/postfix/recipient_access,
     reject_rbl_client zen.spamhaus.org,
     reject_rbl_client dnsbl.njabl.net,
     reject_rbl_client dnsbl.sorbs.net,
     reject_rbl_client bl.spamcop.net
 
 
# Regles sur l'echange HELO qui survient avant la connexion
# reject_invalid_helo_hostname : Refuser les echanges HELO invalides
# reject_non_fqdn_helo_hostname : Refuser les noms d'hote invalides (non FQDN)
# reject_unknown_helo_hostname : Refuser les noms d'hote qui n'ont pas de champ DNS A ou MX dans leurs DNS.
smtpd_helo_restrictions =
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_invalid_helo_hostname,
     reject_non_fqdn_helo_hostname,
     # reject_unknown_helo_hostname  
 
 
# Regles de connexion des clients
# permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifie
# reject_plaintext_session : Refuser les connexions non securisees
# reject_unauth_pipelining : Refuser les defauts lors de la connexion
# reject_unkown_client : Refuser les machines sans DNS inverse
smtpd_client_restrictions =
     permit_mynetworks,
     permit_inet_interfaces,
     permit_sasl_authenticated,
     reject_unkown_client,
     # reject_plaintext_session,
     # reject_unauth_pipelining
 
 
# Regles sur les expediteurs
# reject_non_fqdn_sender : Refuser les expediteurs invalides (non FQDN)
# reject_unknown_sender_domain : Refuser les expediteurs qui n'ont pas de champ DNS A ou MX dans leurs DNS.
smtpd_sender_restrictions =
     reject_non_fqdn_sender,
     reject_unknown_sender_domain,
     check_sender_access regexp:/configuration/postfix/sender_access
 
 
------------------------------------------------------------------------------------------------------------------------
   
 
Merci d'avance pour votre aide.


Message édité par K-ny13 le 14-10-2015 à 11:54:08
mood
Publicité
Posté le 24-09-2015 à 12:16:57  profilanswer
 

n°1381455
h3bus
Troll Inside
Posté le 25-09-2015 à 11:17:04  profilanswer
 

Il faut que tu règles smtpd_sender_login_maps (et rajoute au début de smtpd_recipient_restrictions: reject_authenticated_sender_login_mismatch).

 

Pour ce que u veux faire, une regexp fera l'affaire, mais tu peux aller beaucoup plus loin. Par exemple chez moi le login map utilise LDAP pour vérifier si un utilisateur a le droit d'utiliser une adresse (dans le cas ou le nom d'utilisateur ne correspond pas forcément à son adresse, ou qu'un utilisateur peut utiliser plusieurs adresses).


Message édité par h3bus le 25-09-2015 à 12:01:33

---------------
sheep++
n°1381468
K-ny13
Posté le 25-09-2015 à 15:45:43  profilanswer
 

Bonjour,
 
Merci beaucoup pour ta réponse.
 
C'est une très bonne idée de faire une vérification par le LDAP.
Mais j'ai une erreur...
NOQUEUE: reject: RCPT from unknown[xx.xx.xx.xx]: 553 5.7.1 <julien.roux@entreprise.fr>: Sender address rejected: not owned by user jroux@entreprise.fr; from=<julien.roux@entreprise.fr> to=<julien.roux@entreprise.fr> proto=ESMTP helo=<xx.xx.xx.xx>
 
 
J'ai modifié main.cf :
----------------------------------------------------------------------
smtpd_sender_login_maps = ldap:/configuration/postfix/ldap-loginsasl.cf
 
smtpd_recipient_restrictions =
     reject_authenticated_sender_login_mismatch,
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_non_fqdn_recipient,
     reject_unauth_destination,
     reject_unknown_recipient_domain,
     check_recipient_access hash:/configuration/postfix/recipient_access,
     reject_rbl_client zen.spamhaus.org,
     reject_rbl_client dnsbl.njabl.net,
     reject_rbl_client dnsbl.sorbs.net,
     reject_rbl_client bl.spamcop.net
 
----------------------------------------------------------------------
 
 
Contenu de ldap-loginsasl.cf :
----------------------------------------------------------------------
server_host = ldap://MONSERVEURLDAP
server_port = 389
bind = no
search_base = ou=MONDOMAINE,ou=XXX,o=XXX,c=fr
query_filter = (&(objectclass=inetMailUser)(|(mail=%s)(mailAlternateAddress=%s)(mailEquivalentAddress=%s)))
result_attribute = uid, mail, mailAlternateAddress, mailEquivalentAddress
version = 3
----------------------------------------------------------------------


Message édité par K-ny13 le 25-09-2015 à 15:52:34
n°1381472
h3bus
Troll Inside
Posté le 25-09-2015 à 16:25:21  profilanswer
 

Dans ldap-loginsasl.cf : result_attribute devrait être le cn ou uid je pense


---------------
sheep++
n°1381474
K-ny13
Posté le 25-09-2015 à 17:28:52  profilanswer
 

Je crois que la vérification compare login@domaine et adresse mail, donc il attend une adresse mail correspondant au login (format première lettre du prénom suivi du nom) dans les champs mail, mailAlternateAddress et mailEquivalentAddress.
 
Quand je renseigne un des deux derniers champs (mailAlternateAddress et mailEquivalentAddress) avec une adresse du style login@domaine, ça fonctionne.
 
Or mon adresse mail est de la forme prenom.nom@domaine et les deux autres champs ne sont pas toujours renseigné dans les fiches LDAP.
 
Y a t-il un autre moyen pour que ça fonctionne sans avoir à renseigner la fiche LDAP d'une adresse format login@domaine ?
 
Merci pour ton aide.

n°1381476
h3bus
Troll Inside
Posté le 25-09-2015 à 17:44:39  profilanswer
 

En fait ça fait l'inverse, %s correspond à l'adresse email utilisée, et le result_attribute doit être la listes des login autorisés utiliser cette adresse.
 
Dans ton exemple le login_map envoie julien.roux@entreprise.fr et s'attend à ce que tu lui répondes jroux@entreprise.fr (jroux est valable aussi si entreprise.fr est dans $myorigin, $mydestination, $inet_interfaces ou $proxy_interfaces)
Pour résumer result_attribute doit récupérer le champ LDAP qui contient le login.


---------------
sheep++
n°1381499
K-ny13
Posté le 26-09-2015 à 14:34:25  profilanswer
 

Merci beaucoup pour ton aide tout fonctionne très bien ! :D
 
J'ai ajouté la ligne "result_format = %u@mon_domaine.fr" dans le fichier ldap-loginsasl.cf est ça a l'air d'être bon.
 
Contenu de ldap-loginsasl.cf :
----------------------------------------------------------------------
server_host = ldap://MONSERVEURLDAP
server_port = 389
bind = no
search_base = ou=MONDOMAINE,ou=XXX,o=XXX,c=fr
query_filter = (&(objectclass=inetMailUser)(|(mail=%s)(mailAlternateAddress=%s)(mailEquivalentAddress=%s)))
result_attribute = uid, mail, mailAlternateAddress, mailEquivalentAddress
result_filter = %u@mon_domaine.fr
version = 3
----------------------------------------------------------------------
 
 
Encore merci.


Message édité par K-ny13 le 28-09-2015 à 14:35:57
n°1381526
K-ny13
Posté le 28-09-2015 à 14:34:53  profilanswer
 

Bonjour h3bus,
 
Dans le cas où je ne passerais pas par une vérification LDAP, comment faire pour vérifier le domaine de l'expéditeur seulement dans le cas où il y a une authentification ?
 
Merci.

n°1381527
h3bus
Troll Inside
Posté le 28-09-2015 à 14:52:54  profilanswer
 

Je mettrai dans le main.cf

Code :
  1. smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre


 
et dans login_maps.pcre:

Code :
  1. /^([\w-.]+@domaine.com)$/ ${1}


 
Si tu as plusieurs domaines tu peux au mettre une ligne par domaine ou mettre un choix multiple dans la regexp.


---------------
sheep++
n°1381528
gizmo15
Posté le 28-09-2015 à 15:19:51  profilanswer
 

ou une requête sql si gestion en bdd

mood
Publicité
Posté le 28-09-2015 à 15:19:51  profilanswer
 

n°1381546
K-ny13
Posté le 29-09-2015 à 10:36:00  profilanswer
 

Merci h3bus c'est parfait !
Et merci gizmo15 pour l'info :)

n°1381603
K-ny13
Posté le 01-10-2015 à 15:53:24  profilanswer
 

J'ai à nouveau des soucis... Les mails sont rejetés, il me dit que je ne suis pas propriétaire de l'adresse utilisé en expéditeur :
Sender address rejected: not owned by user uid@domaine.fr

 

Si je me trompe pas la ligne suivante : /^([\w-.]+@domaine.fr)$/ ${1}
dit que n'importe quelle adresse @domaine.fr correspond à l'adresse expéditrice (envoyé en paramètre "${1}" ??), c'est bien ça ?

 

Je vois pas trop où est le problème surtout qu'il me semblait que cela avait fonctionné.. faux positif :??: ?


Message édité par K-ny13 le 01-10-2015 à 15:54:13
n°1381605
h3bus
Troll Inside
Posté le 01-10-2015 à 16:35:30  profilanswer
 

C'est quoi ton uid/mail qui foire? Peut-être qu'il ne passe pas la regexp.
As-tu plusieurs domaines servis par postfix?


---------------
sheep++
n°1381606
K-ny13
Posté le 01-10-2015 à 16:40:30  profilanswer
 

Nom : Roux
Prénon : Julien
uid : jroux
mail : julien.roux@mon-domaine.fr
 
Un seul domaine de la forme mon-domaine.fr

n°1381607
h3bus
Troll Inside
Posté le 01-10-2015 à 16:46:30  profilanswer
 

Ah bah c'est normal, seul l'uid julien.roux fonctionne avec cette regexp.
 
Jroux peut envoyer de jroux@mon-domaine.fr uniquement


---------------
sheep++
n°1381608
h3bus
Troll Inside
Posté le 01-10-2015 à 16:49:57  profilanswer
 

Si tu veux juste vérifier le domaine,  login_maps.pcre:

Code :
  1. /^[\w-.]+@domaine.com$/ @domaine.com



---------------
sheep++
n°1381609
K-ny13
Posté le 01-10-2015 à 16:58:17  profilanswer
 

Ça ne fonctionne pas. Il faut mettre le "@" dans la deuxième partie ?
J'ai essayé avec et sans, mais toujours pas.


Message édité par K-ny13 le 01-10-2015 à 17:05:01
n°1381610
h3bus
Troll Inside
Posté le 01-10-2015 à 17:07:30  profilanswer
 

En théorie ça devrait marcher selon http://www.postfix.org/postconf.5. [...] login_maps (mais j'ai jamais essayé).
T'a bien fait un reload?
 
En tous les cas ça reste dangereux comme conf, car n'importe quel utilisateur authentifié peut utilisé n'importe quelle adresse @mon-domaine.fr
 
Sinon tu peux utiliser un hashtable, ça marche bien aussi si tu as un nombre limité d'adresses (tu dois en avoir une pour les alias maps non?).


---------------
sheep++
n°1381611
K-ny13
Posté le 01-10-2015 à 17:49:23  profilanswer
 

Oui j'ai redémarré le service postfix.

 

On gère environ 250000 boîtes avec pour la plupart 2 adresses mails.
A chaque campagne de phishing quelques personnes se font avoir et les pirates utilisent leur compte pour diffuser beaucoup de spam.
Dans 95% des cas l'adresse expéditrice de ces spams était autre qu'une adresse de notre domaine.

 

Contrôler ainsi le domaine de l'adresse expéditrice pour les utilisateurs authentifiés était une façon de bloquer en grande partie ce genre diffusion.

 

Passer par un contrôle via LDAP avait l'air de fonctionner correctement mais le problème étant donné la forme de nos adresses mail, prénom.nom, c'est que la vérification se faisait par l'uid (format "pnom" ).

 

J'ai fais à nouveau quelques tests pour une vérification par le LDAP et je pense avoir contourner ça avec la configuration suivant (en particulier avec la ligne 7) :

 
Code :
  1. server_host = ldap://ldap.in.domaine.fr
  2. server_port = 389
  3. bind = no
  4. search_base = ou=domaine,c=fr
  5. query_filter = (&(objectclass=inetMailUser)(|(mail=%s)(mailAlternateAddress=%s)(mailEquivalentAddress=%s)))
  6. result_attribute = uid, mail, mailAlternateAddress, mailEquivalentAddress
  7. result_filter = %u@domaine.fr
  8. version = 3
 

Mais j'ai un doute sur cette configuration, je ne suis pas sûr quelle fasse réellement ce que je veux et que ce soit une "coïncidence" que ça ai l'air de fonctionner.
Je vais tester différents cas de figure pour être sûr que ça fonctionne.


Message édité par K-ny13 le 01-10-2015 à 17:53:24

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  réseaux et sécurité

  [Résolu] Postfix + restreindre domaine d'expédition depuis mon serveur

 

Sujets relatifs
Comment ajouter un serveur sous linux ?Pourquoi utiliser Linux ? Utile pour créer un serveur ?
securiser son serveur de l'exterieur[Résolu] [Postfix/Dovecot] Mise en place de mon serveur Mail
Serveur FTP (Users AD Server 2012)Serveur ftp : configuration
accès site web en HTTPS via deux domaine différentsRestreindre l’accès à un fichier
Serveur RedHat 5.7 Tikanga et install GCC 
Plus de sujets relatifs à : [Résolu] Postfix + restreindre domaine d'expédition depuis mon serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR