Microsoft 365 Exchange Online altyapısınd zaman zaman kurum genelini etkileyen istenmeyen e-postalar ile karşılaşılabilir. Bunlar genellikle:
- Phishing (oltalama) saldırıları
- Zararlı ek veya link içeren spam e-postalar
- Yanlışlıkla tüm kullanıcılara gönderilmiş hassas içerikler şeklinde karşımıza çıkar.
Bu gibi durumlarda tek tek kullanıcı müdahalesi yerine merkezi bir yöntemle tüm posta kutularındaki ilgili e-postayı tespit edip silmek hem zaman kazandırır hem de güvenlik risklerini minimize eder.
Microsoft 365 bu ihtiyacı Microsoft Purview (Compliance) altyapısı üzerinden sunulan Compliance Search ve Purge yetenekleriyle karşılar.
Bu makalemde PowerShell kullanarak Exchange Online üzerindeki tüm kullanıcıların posta kutularında bulunan belirli bir e-postanın nasıl bulunup silineceğini uçtan uca ele alacağız.
Genel Mimari ve Mantık
İşlem temel olarak 3 ana adımdan oluşur:
- Compliance PowerShell oturumuna bağlanmak,
- Belirli kriterlere göre e-posta araması oluşturma ve çalıştırmak,
- Bulunan e-postalar için silme (Purge) işlemi başlatmak,
Önemli bir nokta:
Bu işlemler klasik Exchange Online PowerShell komutlarından farklıdır ve Security & Compliance altyapısını kullanır.
Compliance PowerShell Oturumuna Bağlanma
Compliance Search komutlarını çalıştırabilmek için öncelikle IPPSSession olarak adlandırılan Security & Compliance PowerShell oturumuna bağlanmamız gerekir. Aşağıdaki komut ile yalnızca arama yetkilerine sahip bir oturum açıyoruz:
Connect-IPPSSession -EnableSearchOnlySession
Yetkilendirme Notu
Bu işlemi gerçekleştiren kullanıcının aşağıdaki yetkilere sahip olması gerekir:
- Compliance Search
- Purge
Aksi durumda komutlar hata verecek veya çalışmayacaktır.
Compliance Search (İçerik Araması) Oluşturma
Bağlantı sağlandıktan sonra ilk adım, hangi e-postaların hedefleneceğini tanımlayan bir arama sorgusu oluşturmaktır.
Aşağıdaki örnekte:
- Tüm Exchange Online posta kutuları hedeflenir
- Belirli bir gönderen adresinden gelen
- Belirli bir konu (Subject) içeren e-postalar aranır
New-ComplianceSearch `
-Name "Spam" `
-ExchangeLocation All `
-ContentMatchQuery '(senderauthor=emailaddress) AND (subject="Subject")'
Parametre Açıklamaları
- Name
Arama tanımına verilen isimdir. Daha sonra referans olarak kullanılır. - ExchangeLocation All
Tüm kullanıcı posta kutularını kapsar. - ContentMatchQuery
Arama kriterlerinin tanımlandığı en kritik parametredir.
ContentMatchQuery Gücü
Bu parametre sayesinde:
- Gönderen / alıcı adresi
- Subject
- Anahtar kelime
- Tarih aralığı
- Ek dosya türleri
gibi birçok kriter birleştirilerek oldukça hassas aramalar yapılabilir.
Arama İşlemini Başlatma
Arama tanımı oluşturulduktan sonra, bu aramanın manuel olarak başlatılması gerekir:
Start-ComplianceSearch -Identity "Spam"
Bu işlem arka planda çalışır. Kurumunuzdaki:
- Kullanıcı sayısı
- Posta kutusu büyüklükleri
gibi faktörlere bağlı olarak birkaç saniye ile birkaç dakika arasında sürebilir.
Arama Durumunu ve Sonuçlarını Kontrol Etme
Aramanın tamamlanıp tamamlanmadığını ve kaç adet e-posta bulunduğunu görmek için:
Get-ComplianceSearch -Identity "Spam" | fl Name,Status,Items
Çıktının Yorumlanması
- Status = InProgress → Arama devam ediyor
- Status = Completed → Arama tamamlandı
- Items = 0 → Aranan kriterlere uyan e-posta bulunamadı
Eğer Items = 0 ise:
- Silinecek bir içerik olmadığı için
- Purge komutu çalıştırıldığında hata alınır
“Ne Bulduğunu Görmek İstiyorum” Diyenler İçin
PowerShell çıktısında e-postalar liste halinde gösterilmez. Eğer silinecek e-postalardan emin olmak istiyorsanız:
- Purview Portal
- Content Search
- Search
yolunu izleyerek oluşturduğunuz aramayı bulabilir,
- İstatistiklerini görüntüleyebilir
- İçeriği Export ederek detaylı inceleyebilirsiniz
Bulunan E-postalar İçin Silme (Purge) İşlemi
Arama sonucunda Items > 0 ise artık silme işlemi başlatılabilir.
Silme Türleri
Compliance Search iki farklı silme seçeneği sunar:
SoftDelete
- E-posta kullanıcıdan silinir
- Geri Dönüştürülebilir Öğeler alanına taşınır
- Gerekirse geri yüklenebilir
HardDelete
- E-posta kalıcı olarak silinir
- Geri dönüşü yoktur
Güvenli yaklaşım olarak önce SoftDelete tercih edilmelidir.
Örnek SoftDelete komutu:
New-ComplianceSearchAction `
-SearchName "Spam" `
-Purge `
-PurgeType SoftDelete
Silme İşleminin Durumunu Kontrol Etmek
Silme işlemi de asenkron çalışır. Durum kontrolü için:
Get-ComplianceSearchAction | Select SearchName,Status
- Status = Completed → Silme işlemi başarıyla tamamlanmıştır.
Silme Sonrası Doğrulamak
İşlemin gerçekten tamamlandığından emin olmak için:
- Aynı arama sorgusu tekrar çalıştırılabilir
Get-ComplianceSearchçıktısında Items = 0 olduğu doğrulanabilir
Bu yöntemle:
- Farklı konu başlıkları
- Farklı gönderen adresleri
- Yeni tehditler için aynı adımlar tekrar uygulanabilir.