MS Exchange Toolbox

J'ai développé rapidement un script Powershell à interface graphique permettant de regrouper sous un seul écran les divers scripts qui me servent à l'administration quotidienne d'Exchange : création de boîte aux lettres, affectation de droits OWA, etc.

Bien que je n'aie pas développé cet outil dans le but précis de le partager ou de m'améliorer en Powershell avec, je me dis que c'est un peu idiot de garder le code d'un petit outil comme celui-ci pour moi et qu'il pourra éventuellement vous servir comme base pour quelque chose de plus gros ou simplement pour récupérer quelques snippets.

Naturellement, plus d'informations sont affichées notamment les adresses SMTP ainsi que l'alias, et les accès en ouverture comme envoi sur d'autres boîtes aux lettres si l'on le souhaite.

Chaque instruction voit son retour Powershell retourné dans la console en bas de fenêtre. Le script s'exécute directement depuis l'Exchange Management Shell mais il peut être appelé depuis un Powershell standard si l'on ajoute les bonnes références en début de script.

Exchange et Powershell : liste des permissions d'un user sur les mailbox

Ce script utilisable dans l'Exchange Management Shell prend en paramètre un nom de compte AD rattaché à une mailbox afin de parcourir toutes les ACL des boîtes aux lettres rattachées l'organisation. Il affiche les adresses SMTP reliées à la boîte aux lettres, puis les boîtes aux lettres auxquels le compte à accès ainsi que celles à partir desquelles il peut faire un envoi "en tant que" (Send As).

Une version commentée de ce script est disponible sur le lien ci-dessous.

param([Parameter(Mandatory=$true)][string]$Mailbox)
Write-Host "Processing queries, this might take a while!" -ForegroundColor "Yellow"
$localMbx = Get-Mailbox $Mailbox
$allMbx = Get-Mailbox -ResultSize Unlimited | select Alias
$sam = $localMbx.samAccountName
$validAcl = @()
$validSendAs = @()
foreach($Mbx in $allMbx) {
	$aclMbx = Get-MailboxPermission $Mbx.Alias | where-Object { $_.User -like "*$sam" -and $_.IsInherited -eq $false -and $_.AccessRights -contains "FullAccess" -and $_.Deny -eq $false } 
	if($aclMbx -ne $null) {
		$aclMbx | % { $validAcl+=$_.Identity }
	}
	$sendAsMbx = Get-RecipientPermission $Mbx.Alias | Where-Object { $_.Trustee -like $localMbx.OrganizationalUnit+"/$sam" }
	if($sendAsMbx -ne $null) {
		$sendAsMbx | % { $validSendAs+=$Mbx.Alias }
	}
}
Write-Host "Done!" -ForegroundColor "Yellow"
if($?){
Write-Host "`r`nSMTP Addresses" -ForegroundColor "Cyan"
	foreach($smtpadr in $localMbx.EmailAddresses){
		if($smtpadr.ProxyAddressString.SubString(0,5) -eq "smtp:") { Write-Host $smtpadr.ProxyAddressString.SubString(5,$smtpadr.ProxyAddressString.Length-5) }
	}
	Write-Host "`r`nAccess granted to the following mailboxes:" -ForegroundColor "Cyan"	
	$validAcl | % { Write-Host $_ }
	Write-Host "`r`nMailbox is allowed to send as:" -ForegroundColor "Cyan"	
	$validSendAs | % { Write-Host $_ }
}

Exchange et Powershell : définition de quotas en envoi et réception

Ayant récemment défini des quotas concernant la taille des mails en envoi et en réception afin de séparer une population standard et une population VIP, j'ai développé un script afin de traiter la population standard composée de plusieurs centaines de boîtes aux lettres.

La règle de transport posant la limite maximale, aucune boîte aux lettres n'avait de limite fixée individuellement. Ce script applique une règle de 10 Mo pour ces boîtes.

$UnltdMbx = Get-Mailbox -ResultSize unlimited | Where-Object { $_.MaxSendSize -eq "unlimited" -and $_.MaxReceiveSize -eq "unlimited" }
$UnltdMbx | % {
	echo $_.Alias
	Set-Mailbox $_ -MaxSendSize 10MB -MaxReceiveSize 10MB
}

Ensuite, si nécessaire, il faut ajuster la configuration globale du transport. Ici, la limite sera de 20 Mo.

Set-TransportConfig -MaxReceiveSize 20MB -MaxSendSize 20MB

De même, il est nécessaire de vérifier les tailles limites spécifiées dans les connecteurs et liens AD si nécessaire :

Get-ReceiveConnector | Set-ReceiveConnector -MaxMessageSize 20MB
Get-SendConnector | Set-SendConnector -MaxMessageSize 20MB
Get-ADSiteLink | Set-ADSiteLink -MaxMessageSize 20MB

En exécutant ces commandes, je permets donc aux utilisateurs standard d'envoyer ou recevoir des mails pesant jusqu'à 10 Mo, et aux utilisateurs n'ayant aucune limite de configurée d'envoyer ou recevoir des mails jusqu'à 20 Mo.

Plusieurs choses tout de même à retenir de cela :

  • La règle de transport sera toujours prioritaire sur un quota défini au niveau d'une mailbox.
  • Mettre un quota trop élevé peut se révéler contre-productif, puisque les serveurs de messagerie sont globalement configurés pour recevoir ou émettre des mails de 20 ou 30 Mo maximum. Si les mails sont trop volumineux en sortie, les destinataires ne les recevront jamais, soit bloqués par une solution anti-spam ou bien par le serveur de messagerie lui-même !
  • Les clients de messagerie ainsi que les quotas de boîte affectés ne sont pas conçus pour recevoir des mails de 50 Mo ou plus... il est bien important de s'assurer du bon dimensionnement des serveurs de mailbox et des quotas avant d'autoriser tout un chacun à envoyer des mails volumineux, bien que ça ne soit pas nécessairement une action courante... De nombreux systèmes existent de nos jours pour partager des fichiers lourds en passant simplement par un lien envoyé dans un mail ne contenant que du texte !

Naturellement, avant une application sur un environnement de production, il sera intéressant de tester sur un environnement de recette car l'on touche bien plus qu'un simple serveur de messagerie... Il est possible qu'il ait des effets de bord sur toute la chaîne de messagerie (relai SMTP, solution antispam / antivirus, liens réseau, stockage...)

Restreindre les listes de distribution dans Exchange 2010

Dans cet article, je vais expliquer comment limiter les usages des listes de distribution dans Exchange 2010 :

  • implémenter un processus de modération ;
  • limiter qui peut émettre vers la liste de distribution ;
  • cacher qui est membre de la liste de distribution.

Afin de mettre en place une modération, il suffit de se rendre dans les propriétés de la liste de distribution dans Exchange, puis Mail Flow Settings, et Message Moderation.

En cochant la case, il devient possible d'ajouter des modérateurs ; ces derniers recevront une notification leur demandant de valider ou non l'envoi du mail à la liste de distribution. Il est possible d'ajouter cependant des exceptions dans la deuxième liste.

Moins flexible et plus directe, la possibilité de simplement refuser l'envoi depuis n'importe quelle adresse sauf exceptions existe. Cela se configure dans la fenêtre Message Delivery Restrictions.

Ici, on peut donc sélectionner uniquement les comptes qui ont le droit d'utiliser cette liste de distribution. Par exemple, dans le cadre d'une liste de distribution contenant tous les salariés de la société qui a pour but de relayer une communication officielle, on peut donc sélectionner les membres du service communication et donc empêcher n'importe quel utilisateur d'émettre à tous les salariés. A noter qu'il est également possible de spécifier ici des boîtes génériques : l'utilisateur doit configurer son client de messagerie pour envoyer en tant que cette boîte générique, et par essence, avoir les droits SendAs côté Exchange sur cette boîte générique. D'autre part, on peut empêcher un expéditeur non connu du serveur Exchange d'émettre vers la liste de distribution en cochant Require that all senders are authenticated, typiquement un membre externe à la société.

Cependant, sur le papier, cette restriction n'a pas beaucoup de sens puisque certains - si ce n'est tous - les clients de messagerie permettent de convertir la liste de distribution en une liste explicite de destinataires ; si la liste nommée infrasys contient les membres A, B et C, alors le client pourra faire un envoi aux trois destinataires A, B et C et non à la liste infrasys, ce qui contourne la limitation évoquée ci-dessus. Afin d'empêcher ce contournement, il est possible dans l'ActiveDirectory de paramétrer un attribut Exchange afin qu'il ne soit plus possible de dérouler cette liste.

Dans la console Active Directory Users and Computers que l'on peut appeler via dsa.msc, il suffit d'ouvrir le groupe AD qui porte la liste de distribution et de modifier l'attribut hideDLMembership (visible uniquement si les fonctionnalités avancées ont été activées dans la console).

La valeur se choisit dans une nouvelle fenêtre, la valeur Not Set étant celle par défaut, généralement équivalente à False : il est possible d'éclater la liste en destinataires explicites. En passant la valeur à True, les clients de messagerie ne pourront obtenir d'Exchange la liste des membres de la liste.

On conclut en validant simplement le choix. Ces quelques options et paramétrages permettent un meilleur usage et contrôle des listes de distribution dans Exchange 2010.