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 :
- ' Export all valid recipients (= proxyAddresses) into a
- ' file virtual.txt
- '
- ' Ferdinand Hoffmann & Patrick Koetter
- ' 20021100901
- ' Shamelessly stolen from
- ' http://www.microsoft.com/windows2000/techinfo/ \
- ' planning/activedirectory/bulksteps.asp
- 'Global variables
- Dim Container
- Dim OutPutFile
- Dim FileSystem
- 'Initialize global variables
- Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject" )
- Set OutPutFile = FileSystem.CreateTextFile("recipients.data", True)
- Set Container = GetObject("LDAP://OU=Societe,DC=terre-et-decor,DC=local" )
- 'Enumerate Container
- EnumerateUsers Container
- 'Clean up
- OutPutFile.Close
- Set FileSystem = Nothing
- Set Container = Nothing
- WScript.Quit(0)
- 'List all Users
- Sub EnumerateUsers(Cont)
- Dim User
- 'Go through all Users and select them
- For Each User In Cont
- Select Case LCase(User.Class)
- Case "user", "group"
- 'Select all proxyAddresses
- Dim Alias
- If Not IsEmpty(User.proxyAddresses) Then
- For Each Alias in User.proxyAddresses
- If InStr(1,Alias,"smtp",1) > 0 Then
- OutPutFile.WriteLine Alias & "~~" & " " & User.DisplayName
- End If
- Next
- End If
- Case "organizationalunit" , "container"
- EnumerateUsers User
- End Select
- Next
- End Sub
|
Ensuite je récupère le résultat de ce script que je pousse avec Putty sur le serveur Debian.
Code :
- 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
Code :
- 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 :
- # NE JAMAIS EDITER AVEC LE BLOC NOTE, il intégre des sauts de lignes à l'enregistrement qui
- # perturbent le script
- awk -F"~~" '{$1=substr($1,6,length($1)); print $1 $2}' /var/lib/postfix/recipients.data > /etc/postfix/relayRecipients
- postmap /etc/postfix/relayRecipients
- rm /var/lib/postfix/recipients.data
- rm /etc/postfix/relayRecipients
- exit
|
Il ne me reste qu'à modifier le main.cf de Postfix pour intégrer ces données :
Code :
- 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 :
- @echo off
- exportMailRecipients.vbs
- pscp -l root -pw xxxxxx C:\BAT\recipients.data root@gecko:/var/lib/postfix/recipients.data
- putty -load gecko -l root -pw xxxxxxx -m C:\BAT\pushMailRecipients.sh
- erase recipients.data
|
Bonne journée, Théo