[RESOLU][Postfix & Exchange][SMTP relay & Recipients]

[SMTP relay & Recipients] [RESOLU][Postfix & Exchange] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 09-11-2007 à 09:27:41    

Bonjour,
 
J'ai réussi à créer un automatisme pour mettre à jour les recipients autorisés pour Postfix sur un serveur Linux / Debian en DMZ, à partir d'un serveur Exchange SBS 2003 en LAN.
 
Pour ceux que ça peut intéresser voici ma solution:
 
Un script VB qui scanne l'arborescence de l'annuaire LDAP d'Active Directory, récupère les Alias de messageries et toutes les adresses emails SMTP associées (script original quelque peu modifié par mes soins).
Pensez à modifier cette ligne Set Container = GetObject("LDAP://OU=xxxxxxxx,DC=xxxxxxxx,DC=xxxxxx" ) en fonction de l'organisation de votre AD.
 

Code :
  1. ' Export all valid recipients (= proxyAddresses) into a
  2. ' file virtual.txt
  3. '
  4. ' Ferdinand Hoffmann & Patrick Koetter
  5. ' 20021100901
  6. ' Shamelessly stolen from
  7. ' http://www.microsoft.com/windows2000/techinfo/ \
  8. ' planning/activedirectory/bulksteps.asp
  9. 'Global variables
  10. Dim Container
  11. Dim OutPutFile
  12. Dim FileSystem
  13. 'Initialize global variables
  14. Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject" )
  15. Set OutPutFile = FileSystem.CreateTextFile("recipients.data", True)
  16. Set Container = GetObject("LDAP://OU=Societe,DC=terre-et-decor,DC=local" )
  17. 'Enumerate Container
  18. EnumerateUsers Container
  19. 'Clean up
  20. OutPutFile.Close
  21. Set FileSystem = Nothing
  22. Set Container = Nothing
  23. WScript.Quit(0)
  24. 'List all Users
  25. Sub EnumerateUsers(Cont)
  26. Dim User
  27. 'Go through all Users and select them
  28. For Each User In Cont
  29.  Select Case LCase(User.Class)
  30.  Case "user", "group"
  31.    'Select all proxyAddresses
  32.    Dim Alias
  33.    If Not IsEmpty(User.proxyAddresses) Then
  34.      For Each Alias in User.proxyAddresses
  35.    If InStr(1,Alias,"smtp",1) > 0 Then
  36.     OutPutFile.WriteLine Alias & "~~" & " " & User.DisplayName
  37.    End If
  38.    Next
  39.    End If
  40.  Case "organizationalunit" , "container"
  41.   EnumerateUsers User
  42.  End Select
  43. Next
  44. End Sub


 
Ensuite je récupère le résultat de ce script que je pousse avec Putty sur le serveur Debian.
 

Code :
  1. pscp -l root -pw xxxxxxx C:\BAT\recipients.data root@gecko:/var/lib/postfix/recipients.data


 
Pensez à modifier xxxxxxx par le mot de passe root, et gecko par le nom de votre passerelle Debian.
 
Puis je lance toujours avec Putty, un script Shell hébergé sur le serveur Exchange  :D  
 

Code :
  1. putty -load gecko -l root -pw xxxxxxxx -m C:\BAT\pushMailRecipients.sh


 
Là aussi pensez à adapter le script
 
Voici le script Shell, il parse simplement le fichier envoyé en supprimant la mention smpt:. Puis il hash le résultat avec postmap pour qu'il soit exploitable par Postfix.
 

Code :
  1. # NE JAMAIS EDITER AVEC LE BLOC NOTE, il intégre des sauts de lignes à l'enregistrement qui
  2. # perturbent le script
  3. awk -F"~~" '{$1=substr($1,6,length($1)); print $1 $2}' /var/lib/postfix/recipients.data > /etc/postfix/relayRecipients
  4. postmap /etc/postfix/relayRecipients
  5. rm /var/lib/postfix/recipients.data
  6. rm /etc/postfix/relayRecipients
  7. exit


 
Il ne me reste qu'à modifier le main.cf de Postfix pour intégrer ces données :
 

Code :
  1. relay_recipient_maps = hash:/etc/postfix/relayRecipients


 
Et voici le bat final schedulé sur le serveur Exchange qui fait le chef d'orchestre de tout ça.
A chaque mise à jour de mes utilisateurs sur Exchange, je suis sur que la passerelle en aura connaissance.
 

Code :
  1. @echo off
  2. exportMailRecipients.vbs
  3. pscp -l root -pw xxxxxx C:\BAT\recipients.data root@gecko:/var/lib/postfix/recipients.data
  4. putty -load gecko -l root -pw xxxxxxx -m C:\BAT\pushMailRecipients.sh
  5. erase recipients.data


 
Bonne journée, Théo

Reply

Marsh Posté le 09-11-2007 à 09:27:41   

Reply

Marsh Posté le 14-07-2014 à 19:58:22    

Deroma1, pourriez-vous me dire  svp comment pourrai-je exécuter le script vb  qui scanne l'arborescence de l'annuaire LDAP d'Active Directory :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed