Exchange Server bir şirket ortamında çalışan nerede ise tüm beyaz yakalıların aktif olarak kullandığı bir ürün olup son kullanıcı etkileşimi yüksektir. Durum böyle olunca da bu ürün üzerindeki değişikliklerin yakından takip edilmesi gereklidir. Tabiki şirket politikaları veya kurumunuzun içinde bulunduğu sektörün uymak zorunda olduğu bir takım kurallar, kanunlar ( regülasyonlar ) gereği hali hazırda zaten Exchange Server mimarisinde “Audit” yani izleme yapıyor olabilirsiniz. Bu izlemeyi ister Exchange Server ile beraber gelen Audit özelliği ile yapabilirsiniz, isterseniz Lepide, Change Auditor ve benzeri ürünler ile takip edebilirsiniz. Ben bu makalemde varsayılan Admin ve Mailbox Audit özelliğinden bahsedeceğim.
Exchange Server 2007 SP2 ile beraber hayatımıza giren Admin Audit, yani yöneticilerin Exchange server üzerinde yaptığı değişikliklerin bir yere kayıt edilmesi ve gerekli durumlarda raporlanması özelliği şu anda en güncel sürüm olan Exchange Server 2016 ile de devam etmektedir. Sadece ilk çıktığında varsayılan olarak açık gelmeyen bu özellik, Exchange Server 2010 SP1 ve sonrası için artık varsayılan olarak açık gelen bir özelliktir ( Admin Audit Log açık olup, mailbox Audit log varsayılan olarak kapalıdır).
Audit işlemleri özel bir yetki gerektirdiği için eğer Organizasyon seviyesinde yetkiniz yok ise aşağıdaki PS yardımı ile Audit için içerisinde olmanız gereken role gruplarını görüntüleyebilirsiniz
Get-ManagementRole | Get-ManagementRoleAssignment | Where-Object {$_.Role -like “*audit*”} | FT Role,RoleAssigneeName -wrap –autosize
Yani amacınız görüntüleme ise “Comliance Management” üyeliği yeterli olacaktır, ancak daha fazla ayar için Organization Management grubu üyesi olmanız gereklidir.
Aslında bu bilinen bir durum yani PS i neden kullandık diye düşünebilirsiniz? Buradaki amaç kurumsal ve büyük yapılarda farklı işler için farklı role grupları oluşturulmuş olabilir ve bu nedenle Organization Management hakkı istemeden veya birisine vermeden Audit operasyonlarını yapabileceğiniz gruplar var ise onları tespit etmiş olursunuz ( teknik olarak bu grupları zaten siz açtığınız için biliyorsunuzdur, ancak sizin devraldığınız bir sistem ise bu komut çok yararlı olacaktır).
Gerekli yetkiye sahip iseniz yapılandırmayı kontrol etmek ile işe başlayabiliriz.
Aşağıdaki powershell komutu ile mevcut durumu kontrol edebilirsiniz;
Get-AdminAuditLogConfig
Yukarıdaki ekranda “AdminAuditLogEnabled” karşısındaki True, sizde Admin Audit loglama özelliğinin açık olduğunu gösterir.
Aslında bu izleme temel olarak Exchange Management Shell için yapılır, çünkü konsol veya web tabanlı yönetim panellerinde yaptığınız bütün işlemler aslında arka planda PS çalıştırır. Ancak Get- ve Search- ile başlayan komutlar kesinlikle takip edilmez. Çünkü Audit sisteminin temel amacı değişiklik yönetimidir. Yani kim hangi listeyi çekmiş tarzından bir bilgi alamazsınız.
Toplanan tüm bu loglar özel bir sistem posta kutusunda saklanmaktadır. Bu posta kutusuna yetkisi olan kullanıcılar Exchange Control Panel (ECP) Auditing Reports sayfası, Search-AdminAuditLog veya New-AdminAuditLogSearch PS ile erişebilir. Bu alanları kullanacak kullanıcı Exchange Server organizasyonunda Compliance Management grubu üyesi olmalıdır.
Genel olarak AdminAuditLog açma ve kapama işlemleri aşağıdaki gibidir;
Set-AdminAuditLogConfig -AdminAuditLogEnabled $False
Tabiki bu son hareketiniz de loglanacağını unutmayın. Tekrar açıyorum
Set-AdminAuditLogConfig -AdminAuditLogEnabled $True
Varsayılan olarak AdminAuditLog açtığınız zaman her türlü değişikliğe neden olan cmd komut seti loglanır, ancak siz örneğin grup üyeliklerinin güncellenmesi gibi sizin için çok kritik olmayan bir komut setinin loglanmasını istemeyebilirsiniz.
Set-AdminAuditLogConfig -AdminAuditLogCmdlets *
Yukarıdaki komut tüm komut setleri için izlemeyi açar ( Get ve Search hariç ).
Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets * -AdminAuditLogParameters *
Veya yukarıdaki komut seti benzer şekilde tüm komut setleri ve bu komut setlerinin tüm parametreleri için admin audit log açılmasını sağlar. Ama siz tüm komut setlerini veya tüm parametreleri açmak istemiyorsanız sizin belirlediğiniz komut setlerini ve parametrelerini izlemek isteyebilirsiniz. Bu durumda * yerine aşağıdaki gibi farklı yazım modellerini kullanarak sınırlama yapabilirsiniz
-
New-Mailbox
-
*TransportRule
-
*Management*
-
Set-Transport*
Örneğin bunların hepsini içerecek şekilde gerçekleştirebilirsiniz
Set-AdminAuditLogConfig -AdminAuditLogCmdlets New-Mailbox, *TransportRule, *Management*, Set-Transport* -AdminAuditLogParameters *
Veya aşağıdaki gibi başka bir örnek paylaşabiliriz.
Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets *Mailbox, *Management*, *TransportRule* -AdminAuditLogParameters *
Yukarıdaki her iki komut komut setleri seviyesinde sınırlama yaparken parametre seviyesinde bir sınırlama yapmaz.
Set-AdminAuditLogConfig -AdminAuditLogEnabled $true -AdminAuditLogCmdlets *Mailbox* -AdminAuditLogParameters *Address*
Yukarıdaki komut setinde ise parametre de sınırlandırılmıştır.
Ancak çoğu işletme varsayılan olarak tüm komut setleri ve tüm parametreleri izler çünkü ya içinde bulunduğu sektörün gereksinimi olarak audit olmalıdır ve denetlenmektedir veya şirket yöneticileri Exchange’ i yöneten sistem uzmanlarının tüm hareketlerini görmek istemektedir.
Not: Yukarıda yapılan değişiklikler, tüm Exchange sunucularında aktif olması için AD replikasyonuna bağlıdır. Bildiğiniz gibi bu tür değişiklikler AD Configuration partition bölümünde replike olur ve eğer ortamınızda farklı site’ lar var ise bu yaptığınız değişikliklerin tüm Exchange sunucularında geçerli olması belirli bir süre alabilir. Komutu çalıştırınca 60dk yazar ama bu tamamen yapınıza bağlı olarak değişiklik göstermektedir.
Diğer parametreler ise aşağıdaki gibidir;
AdminAuditLogAgeLimit: Bu komut seti ile audit loglarının ne kadar süre ile saklanacağını ayarlayabiliriz. Formatı aşağıdaki gibidir;
dd.hh:mm:ss
Yani gün, saat, dakika ve saniye cinsinden verebiliriz. Örnek bir komut;
Set-AdminAuditLogConfig -AdminAuditLogAgeLimit 913.00:00:00
Eğer bu değeri 00:00:00:00 olarak ayarlarsanız bu durumda tüm Audit logları silinecektir. Tabiki silinmeden önce bunu kimin yaptığını kayıt edecektir en son olarak.
AdminAuditLogCmdlets: Hangi komut setlerini izleyeceğinizi belirleyebileceğiniz parametredir. Bu konuda örnek komutlar paylaştım.
AdminAuditLogEnabled: Admin Audit Log özelliğini açmaya ve kapatmaya yarayan parametredir.
AdminAuditLogExcludedCmdlets: Bazı komut setlerini izlemek istemiyorsak bu parametreyi kullanabiliriz. Örnek komut aşağıdaki 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 dolayısıyla onlar ile beraber kullanılan parametreleri takip etmiyoruz. Eğer bu komutu iptal etmek istiyorsanız yani bu Exclude edilecek komutları istemiyor ve tüm komutların takip edilmesini istiyorsanız değer olarak “$null” girmeniz gereklidir.
AdminAuditLogParameters: Kullanacağımız cmdlet için yine kullanılacak ve takip edilecek parametreleri bu komut seti ile belirleyebiliyoruz. Bu konuda örnek komutlar paylaştım.
LogLevel: Varsayılan izleme bilgilerine ek olarak daha çok bilgiye ihtiyaç duymanız halinde bu komutu kullanabilirsiniz.
Varsayılan 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 değerler) ve ModifiedObjectResolvedName alanlarıda gelmektedir.
TestCmdletLoggingEnabled: Test ile başlayan komutlarında loglanmasını istiyorsanız bu parametreyi kullanabilirsiniz.
Set-AdminAuditLogConfig -TestCmdletLoggingEnabled $True
Peki, varsayılan olarak aktif olan bu özellik bu güne kadar sizin sisteminizde ne kadar disk alanı kapladı? Bu sorunun cevabı 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 arayacağınız bölüm aşağıdaki gibidir, misal bende sadece 5MB lık bir kayıt var ancak bu ÇözümPark mail sunucusu olduğu için çok fazla admin hareketi olmadığı için çok fazla log yok.
Buraya kadar temel olarak Admin Audit logları için yapılandırma ayarlarının kontrol edilmesi ve şirket ihtiyaçlarına göre ayarlanmasını gördük. Bu yapılan değişikliklerin raporlanması için birkaç seçeneğim mevcuttur.
En kolay yöntem EAC üzerinden raporlara erişmektir.
EAC > Compliance management > Auditing
View the Administrator audit log linkine tıklayın, bir tarih aralığı verin ve aramayı başlatın
Sonuç yukarıda olduğu gibi admin log özelliğini “Administrator” isimli kullanıcının kapadığını rahatlıkla görebilirsiniz.( örnek olarak)
Hemen yine bu ekranda Management Role Group için yapılan değişikliklerin de raporunu alabileceğiniz bir ekran yer almaktadır.
Eğer yönetici, role gruplarda bir değişiklik yapar ise bunu da bu ekrandan rahatlıkla görebilirsiniz. Aslında bu da Admin Audit Log içerisindeki bir veri olmasına karşın Exchange Server yönetiminde Role Group mimarisi çok önemli olduğu için ona ayrı bir rapor ekranı sunulmuştur.
Eğer Admin hareketlerini EAC üzerinden çekmek yerine PS ile çekmek isterseniz aşağıdaki gibi bir komut seti kullanabilirsiniz;
Search-AdminAuditLog -Cmdlets New-RoleGroup, New-ManagementRoleAssignment
Yukarıdaki komut ile adminlerin “New-RoleGroup” veya “New-ManagementRoleAssignment” komutlarını kullandıkları hareketlerin dökümünü görebilirsiniz.
Daha detaylı arama yapmak için örnek bir komut aşağıdaki 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
Kullanılan komut seti, parametreleri, tarih aralığı ve sonuç yani başarılı mı yoksa başarısız mı durumuna göre yukarıdaki gibi örnek bir komut ile Admin Audit Logların da arama yapabilirsiniz.
Yukarıdaki aramayı benzer şekilde New-AdminAuditLogSearch komutu ile aşağıdaki 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@itstack.com.tr
İki komut arasında 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 çalıştırmak için minimum “View-only administrator audit Logging” yetkisine sahip bir kullanıcı olmanız gereklidir. Komut raporu 24 saat içerisinde size toplam dosya boyutu maksimum 10mb olacak şekilde ulaştıracaktır. Dosya formatı XML olduğu ve varsayılan olarak OWA da bu format yasaklı olduğu için önerim outlook üzerinden almanızdır. Eğer illaki OWA dan bakmanız gerekiyor ise bu durumda geçici olarak izin vermeniz gereklidir.
Örnek Komut
Set-OwaMailboxPolicy -Identity OwaMailboxPolicy-Default –AllowedFileTypes ‘.xml’
Mevcut logları export edip incelemek isterseniz powershell yerine yine EAC üzerinden bu işlemi kolaylıkla yapabilirsiniz.
Ben 28 Ocak günü 8.55 de çalıştırdığım bu raporu ertesi gün 06:07 de aldım. Yani yaklaşık 21 saat sonra.
Dosya içeriği ise aşağıdaki gibidir;
Bunu daha anlamlı bir rapor haline getirmek için size gelen ekteki XML dosyasını aşağıdaki gibi bir dizine kayıt edin
C:\rapor
Daha sonra PS açarak aşağıdaki komutları yazınız
[xml]$xml = Get-Content C:\rapor\SearchResult.xml
$xml
$xml.SearchResults
$xml.SearchResults.Event
Gördüğünüz gibi olaylar şimdi anlamlı bir şekilde listelendi. Tabiki çok fazla komut var, bunun arasından isterseniz filtreleme yapabiliriz
$xml.SearchResults.Event | select caller, cmdlet
Veya daha detaylı olarak listeleyebilirim
$xml.SearchResults.Event | Format-Table rundate, caller, cmdlet –AutoSize
Burada gördüğünüz gibi tarih, kullanıcı bilgisi ve kullandığı komut seti yer alıyor.
Bu XML içerisindeki son event’ e bakmak isterseniz, yani en son admin hareketi ne zaman yapıldı
$xml.SearchResults.Event[0].rundate
Not: Tabiki bu rapor 24 saat içerisinde hazırlandığı için böyle bir bilgiyi güncel olarak sistemde EAC üzerinden veya PS ile almanızı tavsiye ederim.
Son olarak daha detaylı arama, listeleme yapmak istiyorsanız GridView parametresini kullanabiliriz.
$xml.SearchResults.Event | select caller, rundate, cmdlet | Out-GridView
Exchange Server bu logları varsayılan olarak gelen bir agent sayesinde gerçekleştirir. Bu Built-in agent Admin Audit Config bilgisini okuyarak neleri kayıt edeceğine karar verir ve bunları saklar. Aşağıda gördüğünüz gibi Audit Agent varsayılan olarak yüklü ve aktif bir system ajanıdır.
Bu bölüme kadar Exchange Server ile beraber gelen özellikleri anlatmaya çalıştım, bundan sonra ise Admin Audit Loglarının düzenli olarak size HTML rapor olarak gönderilmesinin nasıl gerçekleştirileceğini göstereceğim.
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
https://www.shudnow.net/2010/08/03/changes-in-exchange-2010-sp1-administrator-audit-logging/