Organizasyonlarda hangi anti-spam teknolojisi kullanılırsa kullanılsın, spam’ları engellemek için IT yöneticileri sürekli dikkatli olmak zorundadır. Office 365 için Microsoft Defender iyi bir çözüm, ancak spam gönderenler, istenmeyen ticari e-postaları savunmaları aşarak ele sistemi ele geçirme konusunda yıllar içinde oldukça yenilikçi olduklarını kanıtladılar ve çalışmalarının bir kısmı bu güvenlik duvarlarını aşmış ve başarılı olmuş durumda.
PowerShell kullanarak, kullanıcı posta kutularındaki Önemsiz E-posta klasörüne düşen mesajlara dayanarak e-postaları engellemek için bir taşıma kuralı oluşturmak teknik olarak mümkün.
Plan basit. Anti-spam kuralı, bir mesajı kullanıcının Önemsiz E-posta klasörüne gönderirse, aynı kaynaktan gelecek mesajları engellemek için kullanılabilecek bir sinyal oluşturur. Bir kiracıdaki tüm kullanıcı ve paylaşımlı posta kutularının Önemsiz E-posta klasörlerini tarayarak, engellemek isteyebileceğimiz e-posta gönderen etki alanlarının bir listesini oluşturabiliriz.
Elbette Önemsiz E-posta klasörüne düşen her ileti spam değildir, ancak büyük bir yüzdesi spam’dır. SMTP bağlayıcısı iletileri Exchange Online’a iletirken etki alanlarından gelen iletileri engellemek için bir taşıma kuralı oluşturarak veya güncelleyerek otomatik engellemeyi yönlendirmek için bu verileri kullanmak buradaki ana senaryomuz olacak.
Komut Dosyasını Hazırlama
Kiracıdaki her posta kutusuna erişim gerektiğinden (Uygulamalar için RBAC tarafından sınırlandırılmadığı sürece), uygulama izinlerini kullanmamız gerekiyor ve bu da Microsoft Graph PowerShell SDK’sını yalnızca uygulama modunda (izinleri ve kimlik bilgilerini kayıtlı bir uygulamada bulunduran) veya bir Azure Automation çalıştırma kitabı ve yönetilen bir kimlik kullanarak çalıştırmak anlamına geliyor. Her iki yaklaşım da sorunsuz çalışacaktır. Klasörlere erişmek, mesajları okumak ve sonuçları içeren e-postalar göndermek için gereken Graph izinleri MailboxFolder.Read.All , Mail.ReadBasic.All ve Mail.Send’dir .
Koddaki adımlar şunlardır:
- Microsoft Graph ve Exchange Online’a bağlanın. Microsoft 365 modüllerini etkileyen derleme uyumsuzluğu sorununu önlemek için bu sırayı kullanın.
- Kontrol edilecek kullanıcı posta kutuları ve paylaşılan posta kutuları kümesini bulun.
- Her posta kutusu için Get-MgUserMailFolder cmdlet’ini kullanarak Önemsiz e-posta klasörünü bulun. “JunkEmail”, Outlook’un default klasörlerinden biridir, bu nedenle bu değer, posta kutusunun hangi dili kullandığından bağımsız olarak klasörü bulmak için kullanılabilir.
- İstenmeyen E-posta klasörünü kontrol etmek ve spam gönderen etki alanını ayıklamak için Get-MgUserMailFolderMessage cmdlet’ini çalıştırın.
- Tüm posta kutularını işledikten sonra, bize spam gönderen alan adlarının bir listesini oluşturun.
- Engellenecek alan adları listesinden gmail.com ve outlook.com gibi bazı tüketici alan adlarını çıkarın.
- Etki alanı listesini ve bir taşıma kuralı oluşturma veya güncelleme önerisini yöneticilere gönderin. İleti, taşıma kuralını oluşturmak için atılabilecek örnek mail şekil 1’in içerisindedir.
Şekil 1: Spam içerikli alan adlarını engellemek için bir taşıma kuralının nasıl oluşturulacağı konusunda yöneticilere bilgi veren e-posta
İstenmeyen E-postaları Silme
Varsayılan olarak, komut dosyası Önemsiz E-posta klasöründeki öğelerin hiçbirini kaldırmaz. Exchange Online, öğeleri geldikten 15 gün sonra otomatik olarak temizler, bu nedenle herhangi bir işlem yapmanıza gerek yoktur. Ancak, bazı kişiler postaları işlerken temizlemek isteyebilir, bu yüzden
$DeleteItemsNow değişkeni true ise önemsiz e-posta öğelerini kaldırmak için bir kod ekledim.
If ($DeleteItemsNow) { Write-Host (“Deleting {0} items from the Junk Email folder for {1}” -f $MailItems.Count, $M.DisplayName) -ForegroundColor Yellow ForEach ($MailItem in $MailItems) { Try { Remove-MgUserMailFolderMessage -UserId $M.ExternalDirectoryObjectId -MailFolderId $JunkEmailFolder.Id -MessageId $MailItem.Id -ErrorAction Stop } Catch { Write-Host (“Failed to delete item {0} from the Junk Email folder for {1}” -f $MailItem.Id, $M.DisplayName) -ForegroundColor Red } } }
Bu kod, istenmeyen posta öğelerini Silinmiş Öğeler klasörüne taşır. İsterseniz, Remove-MgUserMessagePermanent komutunu çalıştırarak öğeleri kalıcı olarak kaldırabilirsiniz. Bu komut, uygulamanın Mail.ReadWrite iznine sahip olmasını gerektirir; bu da oldukça güçlü bir izindir. Hassas posta kutularına erişimi sınırlamak için Uygulamalar için RBAC kullanmayı düşünün veya uygulamanın hassas posta kutularını işlemesine izin veriyorsanız, uygulamanın bu posta kutularından öğeleri kaldırmasına izin verilip verilmeyeceğini değerlendirin.
Aktif Taşıma Kuralı
Spam içerikli alan adı taşıma kuralı artık kiracımda etkin (Şekil 2). Gelen iletileri istenmeyen e-posta alan adlarından karantinaya taşıma konusunda iyi bir iş çıkarıyor. Karantinayı kullanmanın avantajı, engellenen bir alan adının iyi bir e-posta kaynağı olduğu ortaya çıkarsa, iletilerin kullanıcılar veya yöneticiler tarafından alınabilmesidir.
Şekil 2: Spam içerikli alan adlarını engellemek için hazırlanan taşıma kuralının ayrıntıları.
Herhangi bir otomatik öneride (yapay zeka tarafından oluşturulanlar da dahil) olduğu gibi, önerilen eylemleri gözden geçirmek her zaman iyi bir fikirdir. Örneğin, betiğin ilk sürümü msn.com’u spam içerikli alan adları listesine eklemişti. Msn.com artık listeden çıkarıldı, ancak isterseniz tekrar ekleyebilirsiniz.
Bildirim Mesajları
Fark ettiğim tek dezavantaj, kullanıcıların alışkın olduklarından daha fazla karantina bildirimi mesajı alabilmeleri. Karantina bildirimlerinin sayısı, bildirim aralığını günlükten haftalığa çıkararak azaltılabilir ve ayrıca, istenmeyen e-postaları karantinaya yönlendirmenin yeni yöntemi hakkında alıcıları bilgilendirmek için bildirimlere özel bir metin ekleyebilirsiniz .
Sorunu çözmenin bir başka yolu da, taşıma kuralının mesajları silmesini sağlamaktır. Bu, kullanıcılar tarafından görülen bildirim sayısını azaltır, ancak kuralın düzgün çalıştığından henüz emin değilim.
Spam Etki Alanı Kuralı
Zamanla, kullanıcı posta kutularına yeni spam’ler gelecektir. Komut dosyasını tekrar çalıştırırsanız, yeni spam’leri bulup işleyecek ve güncellenmiş bir istenmeyen e-posta alan adı listesi oluşturacaktır. Taşıma kuralını güncellemek için, şu anda tanımlanmış alan adları kümesini alıp, kümeyi komut dosyası tarafından bulunan alan adlarıyla birleştiren ve taşıma kuralını birleştirilmiş kümeyle güncelleyen bir kod aşağıdadır:
[array]$ExistingDomains = (Get-TransportRule -Identity ‘Quarantine Traffic from Junk Email Domains’).SenderDomainIs $JunkEmailDomains += $ExistingDomains # Remove duplicates $JunkEmailDomains = $JunkEmailDomains | Sort-Object -Unique Set-TransportRule -Identity ‘Quarantine Traffic from Junk Email Domains’ -SenderDomainIs $JunkEmailDomains
Unutmayın, bu kod tamamlanmış bir çözüm olmaktan ziyade prensipleri göstermek amacıyla hazırlanmıştır. Kodun çalışabilmesi için, kayıtlı uygulama, kiracı tanımlayıcısı ve kiracınız için sertifika (veya uygulama gizli anahtarı) değerlerini ayarlamanız gerekecektir.
Kiracı yöneticileri, Microsoft 365’in nasıl çalıştığını daha iyi anlayabilmek için PowerShell’i benimsemeli ve Graph’ı nasıl kullanacaklarını öğrenmelidir. Bu, PowerShell ve Graph bilgisinin bir kiracının çalışma şeklini nasıl iyileştirebileceğinin sadece küçük bir örneğidir.
Okuduğunuz için teşekkürler.