Merhaba,
Bu yazımızda Windows 2008 R2 ile hayatımıza giren ama genelde bilinmeyen ve çok da kullanılmayan Microsoft BPA (Best Practice Analyzer) aracından bahsedeceğim.
Öncelikle nedir bu BPA?
Windows Server yöneticilerinin sistemlerini Microsoft’un önerdiği en iyi uygulamalara göre analiz edebilmesini sağlayan bir rehberdir.
Microsoft der ki : “Best Practices Analyzer (BPA) is a server management tool that is available in Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012, and Windows Server 2008 R2. BPA can help administrators reduce best practice violations by scanning roles that are installed on managed servers that are running a supported version, and reporting best practice violations to the administrator.”
Yani? Bir sunucu üzerindeki rolleri en iyi durumlarına getirmek için kullanabileceğiniz Built-in bir araç.
BPA, arka planda çeşitli policy tanımlarını (XML tabanlı kurallar) kullanır. Bu kurallar Microsoft tarafından hazırlanır ve genellikle şu alanları tarar:
-
Active Directory Domain Services
-
DNS Server
-
File Services
-
Hyper-V
-
Remote Desktop Services
-
IIS
-
ve diğer sunucu rolleri…
Her rol için farklı bir model (rule set) bulunur. Tarama sonucunda, sistemdeki yapılandırmalar bu kurallarla karşılaştırılır ve sonuçlar “Compliant”, “Non-compliant”, “Warning” veya “Informational” olarak etiketlenir.
Kısacası, BPA bir “denetçi” değil; sessiz bir danışman gibidir. Sadece hatayı göstermez, aynı zamanda nasıl düzeltileceğine dair yönlendirmeler de sunar.
BPA modüllerini sunucu üzerinde C:\Windows\System32\BestPractices\v1.0\Models\Microsoft\Windows dizini altında bulabilirsiniz.
Hem GUI, hem de Powershell üzerinden kullanabilirsiniz.
GUI Üzerinden Kullanım
Sunucuya her girdiğinizde otomatik açılan bir ekran düşünün… Düşünmenize gerek kalmadan Windows sunucu yöneticilerinin aslında çok zorlanmadan aklına gelen ve hatta bazen görmekten gına geldiği Server Manager ekranı… Konumuz tabi ki bu ekran değil. Bu ekran ve özellikleri ile ilgili de çok fazla makale bulunabilir. Fakat bu ekran genelde default olarak açıldığından mıdır? yoksa basit bir arayüz sunduğundan mıdır? adminlerin genelde direk olarak kapattığı bir penceredir. Çünkü biz adminiz ve her aradığımızı her yerden bulabiliriz.. 🙂 Yaşasıınnn.. Böyle afilli ekranlara gerek yok Microsoft :))
Fakat bu ekran dışından erişimi sadece Powershell ile olan özelliklerden biri de BPA. Yani bu ekranı biraz aşağı indirmezseniz bir daha muhtemelen başka bir yerde karşılaşmayacaksınız.
Server Manager ekranını biraz aşağı indirerek Best Practices Analyzer ekranına ulaşıyoruz.
Eğer Task butonundan Start Bpa Scan butonuna tıklar iseniz, sunucunuz üzerindeki bulunan rollere göre best practise’ler dışında kalan ilgili uyarı ve hataları listeleyecektir. Bu tarama sırasında command prompt ekranları görünüp kaybolabilir, telaş yapmayınız.
Örnek olarak ben, Domain Controller üzerinde çalıştırdım. DNS rolü de bu sunucu üzerinde çalıştığından, hem Active Directory Services hem de DNS rolü için tarama yaptı. örnek olarak bir iki tane ekran görüntüsü aşağıdaki gibidir.
Domain partitionlarının yedeği alınmadığını, tüm OU’ larr silinmeye karşı korumalı olmadığından korumaya alınması gerektiğini, DNS scavenging ayarının aktif olması gerektiği gibi bir çok konuda log çıkardı. Hatta kendisi Error ve Warning için Filter uyguladığından eğer uygulanan filtreyi de kaldırırsanız, informational bilgi de alabilirsiniz.
NOT : LocalServer üzerinden çalıştrdığınız BPA sunucunuz üzerinde bulunan tüm roller için tarama yapacak ve tüm roller için ilgili logları göstercektir. Her rol ekranında da ilgili rol ile ilgili tarama yaparak ilgili rol için olan logları görebilirsiniz.
Powershell Üzerinden Kullanım
GUI yöntemine göre daha anlaşılır ve daha yönetilebilir bir yöntem. Çünkü GUI yönteminde siz herhangi bir şey yapmıyorsunuz. Sadece bir tuş ile tarama yapıyorsunuz ve arka planda tüm modeller (sunucunuzdaki rollere bağlı olarak) sizin için çalıştırılıyor. Powershell yönteminde ise, ilgili modeli kendiniz seçerek rol rol tarama yaptırabilirsiniz.
Get-BpaModel
komutu ile sunucu üzerinde tanımlı BPA modellerine erişim sağlayabilirsiniz. Çalıştırmak içinse;
Invoke-BpaModel -ModelId <ModelId>
komutunu kullanmanız gerekecektir.
Model id’ sini nereden bulacağım derseniz, bir önceki komut olan Get-BpaModel komutunun çıktısındaki ModelId işinizi görecektir.
Daha sade ve yalın bir çıktı için;
Get-BpaModel | select id,name,LastScanTime
Ben Domain Controller sunucumda DNS rolü için çalıştıracağım. Tamam tamam sizin için DirectoryServices için de çalıştırayım. Maksat örnek çoğalsın. 🙂 Peki mesela WebServer için çalıştıramam mı?
Elbette çalıştırırım. Komut benim sunucu benim… Tabi ki çalıştırabilirim. Fakat çalıştırdığımda bana hata fırlatarak, çalıştırmak istediğim model için herhangi bir şey bulamadığını söyleyecektir.
Ekran görüntüsünde de fark edileceği üzere, DC makinesinde web-server rolü kurulu değildir. Bu rol için BPA çalıştırıldığında bu modülün yüklü olmadığını ve çalışmadığını da söylemektedir.
Peki DNS model için BPA çalıştıracak olur isek…
Çalıştırdık da N’oldu? diyorsanız haklısınız. Çalıştığına dair bir çıktı verdi ama ne çalıştırdığına ya da çalıştırdığının sonucuna dair bir çıktı vermedi. Bunun için de;
Get-BpaResult
komutunu kullanacağız. Benim örneğimde;
Get-BpaResult -ModelId Microsoft/Windows/DNSServer
komutu ile az önce çalıştırdığı BPA raporunu ekrana çıktı olarak dökecektir. Bunu powershell üzerinde Out-File cmdlet yardımı ile CSV ve/veya HTML formatına çevirebilirsiniz.
Result komutu ile size ne var ne yoksa dökecektir. Fakat yukarıdaki ekran görüntüsündeki gibi problem olmayan, information bilgilerini almak istemiyor iseniz;
Get-BpaResult -ModelId Microsoft/Windows/DNSServer | ? {$_.Problem -ne $null}
komutunu kullanabilirsiniz. Böylelikle sadece best practice dışındaki maddelere odaklanabilirsiniz.
Eğer madde üzerindeki çözümü uygularsanız, bir sonraki çalıştırmanızda bu maddeyi sorun olarak görmeyeceksiniz. Benim ortamım lab ortamı olduğundan DNS ile ilgili bir çok warning çıkmakta fakat sadece hataları
Get-BpaResult -ModelId Microsoft/Windows/DNSServer | ? {$_.Severity -eq "Error"}
komutu ile çekecek olur isek, aşağıdaki ekran görüntüsü ile karşılaşıyoruz. İlk madde için konuşalım. Zaten gerekli açıklamayı yapmış. Hatta Active Directory ortamında nasıl kullancağını da belirtmiş. İstediği gibi gidip Ethernet0 üzerinde istediği değişikliği listenin ilk sırasında olmayacak şekilde gireceğim.
DNS Server için BPA ‘ı tekrar çalıştırdıktan sonra sonucuna baktığımda ise sonuç aşağıdaki gibi olmaktadır. Görüldüğü gibi az önceki madde kapatılmış olarak gözükmektedir.
BPA örneğini DirectoryServices üzerinde uygulayacak olursak, ekran görüntüsündeki gibi partition yedeklemesi ve OU ‘ların kazara silinmesine karşı önlem alınmadığı yönünde uyarılar mevcut.
Hızlıca powershell üzeirnden AD üzerinde silinme işlemine karşı korunmayan OU ‘ları çekerek, bunları yine bir diğer komut ile koruma altına alıyorum.
DirectorYServices için tekrar BPA çalıştırıp problem olan maddeleri çektiğimde ise sonuç aşağıdadır. Az önceki best practise dışı olan madde artık gözükmemektedir. Eee yedekleme işi de sizde artık 🙂
BPA, özellikle şu senaryolarda fark yaratır:
-
Güvenlik açıklarını proaktif olarak tespit eder.
-
Performans darboğazlarına işaret eder (örneğin yanlış yapılandırılmış IIS havuzları).
-
Uyumluluk (compliance) denetimlerinde raporlanabilir kanıt sağlar.
-
Yeni devralınmış ortamlarda mevcut durumu hızlıca anlamaya yardımcı olur.
Burada önemli olan nokta, BPA’nın her ortama birebir uygulanamayabileceği gerçeğidir. Yani:
“Microsoft öyle diyor diye her uyarıyı düzeltmek zorunda değilsin.”
Bazı durumlarda yapılandırma, kurumsal politika veya özel gereksinimlere göre kasıtlı olarak farklı olabilir.
Microsoft’ un BPA ile ilgili makalesine bu linkten erişebilirsiniz. Yok ben illa bu siteden Active Directory ile ilgili bir yazı daha okuyacam derseniz de bu link işinizi görecektir. 🙂
Faydalı olması dileğiyle…





















Elinize sağlık Emre bey, çok faydalı bir makale olmuş. Ellerinize sağlık.