Exchange Server Admin Audit Log – Deep Dive

Exchange Server bir sirket ortaminda çalisan nerede ise tüm beyaz yakalilarin aktif olarak kullandigi bir ürün olup son kullanici etkilesimi yüksektir. Durum böyle olunca da bu ürün üzerindeki degisikliklerin yakindan takip edilmesi gereklidir. Tabiki sirket politikalari veya kurumunuzun içinde bulundugu sektörün uymak zorunda oldugu bir takim kurallar, kanunlar ( regülasyonlar ) geregi hali hazirda zaten Exchange Server mimarisinde “Audit” yani izleme yapiyor olabilirsiniz. Bu izlemeyi ister Exchange Server ile beraber gelen Audit özelligi ile yapabilirsiniz, isterseniz Lepide, Change Auditor ve benzeri ürünler ile takip edebilirsiniz. Ben bu makalemde varsayilan Admin ve Mailbox Audit özelliginden bahsedecegim.

Exchange Server 2007 SP2 ile beraber hayatimiza giren Admin Audit, yani yöneticilerin Exchange server üzerinde yaptigi degisikliklerin bir yere kayit edilmesi ve gerekli durumlarda raporlanmasi özelligi su anda en güncel sürüm olan Exchange Server 2016 ile de devam etmektedir. Sadece ilk çiktiginda varsayilan olarak açik gelmeyen bu özellik, Exchange Server 2010 SP1 ve sonrasi için artik varsayilan olarak açik gelen bir özelliktir ( Admin Audit Log açik olup, mailbox Audit log varsayilan olarak kapalidir).

Audit islemleri özel bir yetki gerektirdigi için eger Organizasyon seviyesinde yetkiniz yok ise asagidaki PS yardimi ile Audit için içerisinde olmaniz gereken role gruplarini görüntüleyebilirsiniz

Get-ManagementRole | Get-ManagementRoleAssignment | Where-Object {$_.Role -like “*audit*”} | FT Role,RoleAssigneeName -wrap –autosize

Yani amaciniz görüntüleme ise “Comliance Management” üyeligi yeterli olacaktir, ancak daha fazla ayar için Organization Management grubu üyesi olmaniz gereklidir.

Aslinda bu bilinen bir durum yani PS i neden kullandik diye düsünebilirsiniz? Buradaki amaç kurumsal ve büyük yapilarda farkli isler için farkli role gruplari olusturulmus olabilir ve bu nedenle Organization Management hakki istemeden veya birisine vermeden Audit operasyonlarini yapabileceginiz gruplar var ise onlari tespit etmis olursunuz ( teknik olarak bu gruplari zaten siz açtiginiz için biliyorsunuzdur, ancak sizin devraldiginiz bir sistem ise bu komut çok yararli olacaktir).

Gerekli yetkiye sahip iseniz yapilandirmayi kontrol etmek ile ise baslayabiliriz.

Asagidaki powershell komutu ile mevcut durumu kontrol edebilirsiniz;

Get-AdminAuditLogConfig

Yukaridaki ekranda “AdminAuditLogEnabled” karsisindaki True, sizde Admin Audit loglama özelliginin açik oldugunu gösterir.

Aslinda bu izleme temel olarak Exchange Management Shell için yapilir, çünkü konsol veya web tabanli yönetim panellerinde yaptiginiz bütün islemler aslinda arka planda PS çalistirir. Ancak Get- ve Search- ile baslayan komutlar kesinlikle takip edilmez. Çünkü Audit sisteminin temel amaci degisiklik yönetimidir. Yani kim hangi listeyi çekmis tarzindan bir bilgi alamazsiniz.

Toplanan tüm bu loglar özel bir sistem posta kutusunda saklanmaktadir. Bu posta kutusuna yetkisi olan kullanicilar Exchange Control Panel (ECP) Auditing Reports sayfasi, Search-AdminAuditLog veya New-AdminAuditLogSearch PS ile erisebilir. Bu alanlari kullanacak kullanici Exchange Server organizasyonunda Compliance Management grubu üyesi olmalidir.

Genel olarak AdminAuditLog açma ve kapama islemleri asagidaki gibidir;

Set-AdminAuditLogConfig -AdminAuditLogEnabled $False

Tabiki bu son hareketiniz de loglanacagini unutmayin. Tekrar açiyorum

Set-AdminAuditLogConfig -AdminAuditLogEnabled $True

Varsayilan olarak AdminAuditLog açtiginiz zaman her türlü degisiklige neden olan cmd komut seti loglanir, ancak siz örnegin grup üyeliklerinin güncellenmesi gibi sizin için çok kritik olmayan bir komut setinin loglanmasini istemeyebilirsiniz.

Set-AdminAuditLogConfig -AdminAuditLogCmdlets *
 
Yukaridaki komut tüm komut setleri için izlemeyi açar ( Get ve Search hariç ). 
 
Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets * -AdminAuditLogParameters *
 
Veya yukaridaki komut seti benzer sekilde tüm komut setleri ve bu komut setlerinin tüm parametreleri için admin audit log açilmasini saglar.
Ama siz tüm komut setlerini veya tüm parametreleri açmak istemiyorsaniz sizin belirlediginiz komut setlerini ve parametrelerini izlemek isteyebilirsiniz.
Bu durumda * yerine asagidaki gibi farkli yazim modellerini kullanarak sinirlama yapabilirsiniz.
 
·        New-Mailbox
·        *TransportRule
·        *Management*
·        Set-Transport*

 

Örnegin bunlarin hepsini içerecek sekilde gerçeklestirebilirsiniz

Set-AdminAuditLogConfig -AdminAuditLogCmdlets New-Mailbox, *TransportRule,
*Management*, Set-Transport* -AdminAuditLogParameters *

 

Veya asagidaki gibi baska bir örnek paylasabiliriz.

Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets *Mailbox,
*Management*, *TransportRule* -AdminAuditLogParameters *

 

Yukaridaki her iki komut komut setleri seviyesinde sinirlama yaparken parametre seviyesinde bir sinirlama yapmaz.

Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets *Mailbox* -AdminAuditLogParameters *Address*

 

Yukaridaki komut setinde ise parametre de sinirlandirilmistir.

Ancak çogu isletme varsayilan olarak tüm komut setleri ve tüm parametreleri izler çünkü ya içinde bulundugu sektörün gereksinimi olarak audit olmalidir ve denetlenmektedir veya sirket yöneticileri Exchange’ i yöneten sistem uzmanlarinin tüm hareketlerini görmek istemektedir.

Not: Yukarida yapilan degisiklikler, tüm Exchange sunucularinda aktif olmasi için AD replikasyonuna baglidir. Bildiginiz gibi bu tür degisiklikler AD Configuration partition bölümünde replike olur ve eger ortaminizda farkli site’ lar var ise bu yaptiginiz degisikliklerin tüm Exchange sunucularinda geçerli olmasi belirli bir süre alabilir. Komutu çalistirinca 60dk yazar ama bu tamamen yapiniza bagli olarak degisiklik göstermektedir.

Diger parametreler ise asagidaki gibidir;

AdminAuditLogAgeLimit: Bu komut seti ile audit loglarinin ne kadar süre ile saklanacagini ayarlayabiliriz. Formati asagidaki gibidir;

dd.hh:mm:ss

Yani gün, saat, dakika ve saniye cinsinden verebiliriz. Örnek bir komut;

Set-AdminAuditLogConfig -AdminAuditLogAgeLimit 913.00:00:00

Eger bu degeri 00:00:00:00 olarak ayarlarsaniz bu durumda tüm Audit loglari silinecektir. Tabiki silinmeden önce bunu kimin yaptigini kayit edecektir en son olarak.

AdminAuditLogCmdlets: Hangi komut setlerini izleyeceginizi belirleyebileceginiz parametredir. Bu konuda örnek komutlar paylastim.

AdminAuditLogEnabled: Admin Audit Log özelligini açmaya ve kapatmaya yarayan parametredir.

AdminAuditLogExcludedCmdlets: Bazi komut setlerini izlemek istemiyorsak bu parametreyi kullanabiliriz. Örnek komut asagidaki gibidir;

Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets * -AdminAuditLogParameters * -AdminAuditLogExcludedCmdlets *Mailbox*, *TransportRule*

Bu komut ile Admin Audit log aktif ediyoruz, tüm cmdlet ve parametrelerini takip ediyorken içerisinde Mailbox ve TransportRule geçen komut setleri ve dolayisiyla onlar ile beraber kullanilan parametreleri takip etmiyoruz. Eger bu komutu iptal etmek istiyorsaniz yani bu Exclude edilecek komutlari istemiyor ve tüm komutlarin takip edilmesini istiyorsaniz deger olarak “$null” girmeniz gereklidir.

AdminAuditLogParameters: Kullanacagimiz cmdlet için yine kullanilacak ve takip edilecek parametreleri bu komut seti ile belirleyebiliyoruz. Bu konuda örnek komutlar paylastim.

LogLevel: Varsayilan izleme bilgilerine ek olarak daha çok bilgiye ihtiyaç duymaniz halinde bu komutu kullanabilirsiniz.

Varsayilan olarak CmdletName, ObjectName, Parameters (values), ve Caller, Succeeded, ve RunDate gibi bilgileri alabiliyorsunuz. Daha fazla bilgi için parametreyi None’ dan Verbose a çekebilirsiniz. Bu durumda ek olarak ModifiedProperties (eski ve yeni degerler) ve ModifiedObjectResolvedName alanlarida gelmektedir.

TestCmdletLoggingEnabled: Test ile baslayan komutlarinda loglanmasini istiyorsaniz bu parametreyi kullanabilirsiniz.

Set-AdminAuditLogConfig -TestCmdletLoggingEnabled $True

 

Peki, varsayilan olarak aktif olan bu özellik bu güne kadar sizin sisteminizde ne kadar disk alani kapladi? Bu sorunun cevabi için ilgili özel sistem posta kutusu içerisindeki AdminAuditLog klasörünün boyutunun kontrol edebilirsiniz

Get-MailboxFolderstatistics “SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}” -FolderScope RecoverableItems –IncludeAnalysis >c:\hakanuzuner.txt

Hakanuzuner.txt içerisinde arayacaginiz bölüm asagidaki gibidir, misal bende sadece 5MB lik bir kayit var ancak bu ÇözümPark mail sunucusu oldugu için çok fazla admin hareketi olmadigi için çok fazla log yok.

 

 

Buraya kadar temel olarak Admin Audit loglari için yapilandirma ayarlarinin kontrol edilmesi ve sirket ihtiyaçlarina göre ayarlanmasini gördük. Bu yapilan degisikliklerin raporlanmasi için birkaç seçenegim mevcuttur.

En kolay yöntem EAC üzerinden raporlara erismektir.

EAC > Compliance management > Auditing

View the Administrator audit log linkine tiklayin, bir tarih araligi verin ve aramayi baslatin

Sonuç yukarida oldugu gibi admin log özelligini “Administrator” isimli kullanicinin kapadigini rahatlikla görebilirsiniz.( örnek olarak)

Hemen yine bu ekranda Management Role Group için yapilan degisikliklerin de raporunu alabileceginiz bir ekran yer almaktadir.

Eger yönetici, role gruplarda bir degisiklik yapar ise bunu da bu ekrandan rahatlikla görebilirsiniz. Aslinda bu da Admin Audit Log içerisindeki bir veri olmasina karsin Exchange Server yönetiminde Role Group mimarisi çok önemli oldugu için ona ayri bir rapor ekrani sunulmustur.

 

Eger Admin hareketlerini EAC üzerinden çekmek yerine PS ile çekmek isterseniz asagidaki gibi bir komut seti kullanabilirsiniz;

Search-AdminAuditLog -Cmdlets New-RoleGroup, New-ManagementRoleAssignment

Yukaridaki komut ile adminlerin “New-RoleGroup” veya “New-ManagementRoleAssignment” komutlarini kullandiklari hareketlerin dökümünü görebilirsiniz.

Daha detayli arama yapmak için örnek bir komut asagidaki gibidir;

Cmdlets   Set-Mailbox

Parameters   UseDatabaseQuotaDefaults, ProhibitSendReceiveQuota, ProhibitSendQuota

StartDate   01/24/2012

EndDate   02/12/2012

The command completed successfully

Search-AdminAuditLog -Cmdlets Set-Mailbox -Parameters UseDatabaseQuotaDefaults, ProhibitSendReceiveQuota, ProhibitSendQuota -StartDate 01/24/2012 -EndDate 02/12/2012 -IsSuccess $true

Kullanilan komut seti, parametreleri, tarih araligi ve sonuç yani basarili mi yoksa basarisiz mi durumuna göre yukaridaki gibi örnek bir komut ile Admin Audit Loglarin da arama yapabilirsiniz.

Yukaridaki aramayi benzer sekilde New-AdminAuditLogSearch komutu ile asagidaki gibi yapabiliriz;

Cmdlets   Set-Mailbox

Parameters   UseDatabaseQuotaDefaults, ProhibitSendReceiveQuota, ProhibitSendQuota

StartDate   01/24/2012

EndDate   02/12/2012

New-AdminAuditLogSearch -Name “Mailbox Quota Change Audit” -Cmdlets Set-Mailbox -Parameters UseDatabaseQuotaDefaults, ProhibitSendReceiveQuota, ProhibitSendQuota -StartDate 01/24/2012 -EndDate 02/12/2012 -StatusMailRecipients hakan@cozumpark.com, hakan@cozumpark.com

 

Iki komut arasinda fark, ilk komut görüntüleme içindir, ikinci komut ise sonucu rapor olarak iletmek yani bir nevi export etmek içindir.  Bu komutu çalistirmak için minimum “View-only administrator audit Logging” yetkisine sahip bir kullanici olmaniz gereklidir. Komut raporu 24 saat içerisinde size toplam dosya boyutu maksimum 10mb olacak sekilde ulastiracaktir. Dosya formati XML oldugu ve varsayilan olarak OWA da bu format yasakli oldugu için önerim outlook üzerinden almanizdir. Eger illaki OWA dan bakmaniz gerekiyor ise bu durumda geçici olarak izin vermeniz gereklidir.

Örnek Komut

Set-OwaMailboxPolicy -Identity OwaMailboxPolicy-Default –AllowedFileTypes ‘.xml’

 

 

Mevcut loglari export edip incelemek isterseniz powershell yerine yine EAC üzerinden bu islemi kolaylikla yapabilirsiniz.

 

Ben 28 Ocak günü 8.55 de çalistirdigim bu raporu ertesi gün 06:07 de aldim. Yani yaklasik 21 saat sonra.

Dosya içerigi ise asagidaki gibidir;

 

Bunu daha anlamli bir rapor haline getirmek için size gelen ekteki XML dosyasini asagidaki gibi bir dizine kayit edin

C:\rapor

Daha sonra PS açarak asagidaki komutlari yaziniz

[xml]$xml = Get-Content C:\rapor\SearchResult.xml

$xml

$xml.SearchResults

$xml.SearchResults.Event

Gördügünüz gibi olaylar simdi anlamli bir sekilde listelendi. Tabiki çok fazla komut var, bunun arasindan isterseniz filtreleme yapabiliriz

$xml.SearchResults.Event | select caller, cmdlet

Veya daha detayli olarak listeleyebilirim

$xml.SearchResults.Event | Format-Table rundate, caller, cmdlet –AutoSize

Burada gördügünüz gibi tarih, kullanici bilgisi ve kullandigi komut seti yer aliyor.

Bu XML içerisindeki son event’ e bakmak isterseniz, yani en son admin hareketi ne zaman yapildi

$xml.SearchResults.Event[0].rundate

Not: Tabiki bu rapor 24 saat içerisinde hazirlandigi için böyle bir bilgiyi güncel olarak sistemde EAC üzerinden veya PS ile almanizi tavsiye ederim.

Son olarak daha detayli arama, listeleme yapmak istiyorsaniz GridView parametresini kullanabiliriz.

$xml.SearchResults.Event | select caller, rundate, cmdlet | Out-GridView

 

Exchange Server bu loglari varsayilan olarak gelen bir agent sayesinde gerçeklestirir. Bu Built-in agent Admin Audit Config bilgisini okuyarak neleri kayit edecegine karar verir ve bunlari saklar. Asagida gördügünüz gibi Audit Agent varsayilan olarak yüklü ve aktif bir system ajanidir.

Bu bölüme kadar Exchange Server ile beraber gelen özellikleri anlatmaya çalistim, bundan sonra ise Admin Audit Loglarinin düzenli olarak size HTML rapor olarak gönderilmesinin nasil gerçeklestirilecegini gösterecegim.

Kaynak

https://technet.microsoft.com/en-us/library/dd298169%28v=exchg.160%29.aspx

https://technet.microsoft.com/en-us/library/ff459250%28v=exchg.160%29.aspx

http://www.shudnow.net/2010/08/03/changes-in-exchange-2010-sp1-administrator-audit-logging/

http://blogs.technet.com/b/heyscriptingguy/archive/2012/01/26/use-powershell-to-parse-xml-exchange-audit-results.aspx

 

Exit mobile version