Exchange Server 2010 ile beraber gelen yöneticizi günlükleri sayesinde, sistem adminlerinin exchange server üzerinde neler yaptığını takip edebiliyoruz. Bu özellik hakkında detaylı makale ÇözümPark Bilişim Portalı üzerinde yayınlandığı için ben temel özellikleri ve çalışma yapısından öte karşılaştığım bir ihtiyaç sonrası bulduğum bir poweshell komut seti ve onun üzerindeki oynamalar hakkında bilgi vereceğim.
Öncelikle bu PowerShell komut seti Exchange Server 2010 SP1 ortamında test edilmiştir. İndirmek için aşağıdaki linki kullanabilirsiniz
https://www.cozumpark.com/files/folders/yuklemeler/entry303640.aspx
Bu komut seti varsayılan olarak son 10 günlük yönetici hareketlerini html formatında bizlere mail atmaktadır.
Kullanımı ise son derece kolaydır.
Bu powershell komut satırında ilk olarak execution policy ayarını değiştiriyoruz
set-executionpolicy -scope CurrentUser -executionPolicy Unrestricted
Bu izin işleminin arından komutu çalıştırıyoruz
.\AuditLogReport.ps1 -To hakan.uzuner@cozumpark.local -From adminauditlog@cozumpark.local -SmtpServer 10.10.10.100
set-executionpolicy -scope CurrentUser -executionPolicy RemoteSigned
Not; Bu komutu ben Exchange Server Mailbox rolü üzerinde çalıştırdım ve smtp server ip adresi olarak Hubtransport server ip adresini yazdım. Eğer yapınız daha küçük ise yani tek bir sunucu üzerinde tüm roller yüklü ise buraya komutu çalıştırdığınız ve zaten tek olan smtp server ip adresini yazıyor olmalısınız.
Not; Bu komutu powershell ps1 dosyasının olduğu dizinde çalıştırıyoruz.
Bunun ardından raporun hazırlanması biraz zaman alacaktır. Bu süre aslında istemiş olduğunuz kayıtların sayısı yani tarih aralığı ile doğru orantılıdır.
Sonuç ise size mail ile gönderilecek ve örnek aşağıdaki gibi olacaktır
Bu bölüme kadar aslında standart bilgiler paylaştım diyebilirim.
Bundan sonra ise benim başıma gelen ve sizlerinde ihtiyaç duyacağınıza inandığım bir kaç detay paylaşmak istiyorum.
Öncelikle bu raporlar Lab ortamında son derece güzel çalışıyor, ancak prod ortamlarda tarih noktasında sorunlar olabilir. Nasıl ?
Diyelimki canlı ortamda son 10 günlük raporları almak istediniz, bunun için ne yapmanız gerekli ? İlk olarak powershell dosyasını not defteri ile açmak ve aşağıdaki satırı değiştirmek yeterli olacaktır
Send-MailMessage -To $To `
-From $From `
-Subject “Exchange Audit Log Report for $((get-date).ToShortDateString())” `
-Body (Search-AdminAuditLog -StartDate ((Get-Date).AddHours(-24)) -EndDate (Get-Date) | New-AuditLogReport) `
-SmtpServer $SmtpServer `
-BodyAsHtml
Bu satırlar komutun en altında yer almaktadır. Burada yazan 24 rakamı saat olup son 24 saati rapor olarak göndermektedir. Eğer son 10 günü istiyorsanız bu rakamı 240 yapmanız gerekli. Fakat bu değişiklik sonrası hala son 24 saat veya son 48 saatlik raporların geldiğini göreceksiniz. Bunun da temel sebebi bu komut çıktısı ( Search-AdminAuditLog ) standart olarak 1000 tane kayıt getirir. Eğer çok yoğun bir ortamda iseniz haklı olarak son 10 günlük kayıtlar 1000 den fazla olacaktır. Bunun için bu komut seti üzerinde bir takım değişiklikler yapmamız gerekmektedir.
İlk olarak maksimum 250.000 olan bu kayıt sayısını getirmek için komuta parametre ekliyoruz. ( not; Sizde tabiki 250.000 den fazla kayıt olabilir, ama bunu aylık veya 15 günlük veya 10 günlük şeklinde parça parça alarak gösterebilirsiniz. Yani bu limit saklama limiti değil görüntüleme limitidir. Saklama limiti vb ayarları Set-AdminAuditLogConfig komutu ile değiştirebiliyoruz ).
-Body (Search-AdminAuditLog -StartDate 10/15/2011 -EndDate 01/13/2012 -resultsize 250000 | New-AuditLogReport) `
Bu ekleme ile beraber artık daha fazla sayıda log görmemiz mümkün oluyor.
Yine bir bilgi daha paylaşmak istiyorum. Diyelim son bir aylık rapor lazım, siz powershell komutunda gerekli ayarları yaptınız, yani hem günü değiştirdiniz hemde “resultsize” parametresini kullandınız. Sonuçta 250.000 den az kayıt olduğu için eksiksiz geldi. Ancak gelen kayıtlarda sistem tarafından yapılan o kadar çok kayıt varki bu dosyayı açmak bile nerede ise imkansız olabilir.
Bu nedenle amacınıza uygun bir filtre kullanabilirsiniz. Örneğin sizin amacınız bir adminin hangi posta kutuları üzerinde “Full Access” izni almışı merak ediyorsanız önemsiz loglar ile boğuşmanıza gerek yoktur. Yine powershell komutu içerisindeki son satırı aşağıdaki gibi yapabilirsiniz
-Body (Search-AdminAuditLog -cmdlets Add-MailboxPermission, Remove-MailboxPermission -StartDate 10/15/2011 -EndDate 01/13/2012 -resultsize 250000 | New-AuditLogReport) `
bu bölüme ise eklediğim kısım ” -cmdlets Add-MailboxPermission, Remove-MailboxPermission” yani komut setleri için filtre uyguladım. Bunu sonucunda adminlerin çalıştırdığı Add ve Remove Mailbox Permission yani izin noktasındaki hareketler gelecektir. Bu işinizi bir hayli kolaylaştıracaktır.
Tabiki isterseniz cmdlets kısmında farklı parametreler kullanabilirsiniz. Örneğin belirli bir admin’ in yaptığı ve sadece başarılı sonuçları alalım
Bu durumda komut satırı aşağıdaki gibi olmalı
Search-AdminAuditLog -StartDate 01/22/2012 -EndDate 01/28/2012 -UserIds adminhakan -IsSuccess $True