blog.icewolf.ch

Let's talk about IT!
posts - 1890, comments - 295, trackbacks - 0

My Links

Archives

Post Categories

icewolf

Thursday, September 30, 2021

Mein erstes PowerShellGallery Modul für Exchange Online Icewolf.EXO.SpamAnalyze

Hallo zusammen,

Als Exchange Administrator in Office 365 macht man eine Menge Message Traces. Ich habe ein PowerShell Modul geschrieben um mir das Leben etwas einfacher zu machen.

Aber erstmal die Herleitung. Ich mache ein MessageTrace der letzten 10 Tage (das ist das Maximum) und zeige ein paar Attribute an.

$MT = Get-MessageTrace -StartDate (get-date).AddDays(-10) -EndDate (get-date) -SenderAddress salehnasiru10@gmail.com

$MT | Format-Table Received, SenderAddress, RecipientAddress, Subject, Status, MessageTraceID

Man benötigt die MessageTraceID um die Details anzuzeigen

$MTD = Get-MessageTraceDetail -MessageTraceId d42c2494-dcac-4a93-4d10-08d981c7b140 -RecipientAddress a.bohren@icewolf.ch -StartDate (get-date).AddDays(-10) -EndDate (get-date)

$MTD

In diesem Fall, hat das Mail ein "Spam" Event. Das kann man noch ein bisschen genauer anschauen. Wie man sieht, ist im Data Property eigentlich eine XML Datenstruktur gespeichert.

$Spam = $MTD | where {$_.Event -eq "Spam"}

$Spam | fl

Dann machen wir doch eine XML Variable und laden die Daten dort hinein. Dazu gibt es einiges an Informationen

[xml]$xmlS = $Spam.Data

$xmls.root.MEP | fl

Um mir das Leben ein bisschen einfacher zu machen habe ich mir ein PowerShell Modul geschrieben https://www.powershellgallery.com/packages/Icewolf.EXO.SpamAnalyze/

Find-Module Icewolf.EXO.SpamAnalyze

Install-Module Icewolf.EXO.SpamAnalyze

Get-Module Icewolf.EXO.SpamAnalyze -ListAvailable

Das Modul hat nur eine einzigen Befehl: Invoke-SpamAnalyze

Get-Help Invoke-SpamAnalyze

Wie in der Hilfe zum Befehl beschrieben, werden die Emailadressen von Sender und Empfänger benötigt. Das Script benutzt im Hintergrund die obengenannten Befehle aus dem ExchangeOnlineManagement PowerShell Module.

Beim Start wird geprüft ob eine Verbindung zu Exchange Online und Security und Compliance besteht. Falls nicht, muss man sich mit den entsprechenden Rechten anmelden.

Invoke-SpamAnalyze -RecipientAddress a.bohren@icewolf.ch -SenderAddress salehnasiru10@gmail.com

Nun kopiert man sich die MessageTraceId und fügt sie unten wieder ein

Nun werden die Details angezeigt und ebenfalls folgende Informationen

  • Message Details
  • Recipient Details
  • Recipient Junkmail Configuration (Get-MailboxJunkEmailConfiguration)
  • Prüfen ob der Absender oder Domain in der Globalen Allow- oder Blocklist ist
  • Prüfen ob der Absender oder Domain in der Recipient Allow- oder Blocklist ist (Get-MailboxJunkEmailConfiguration)
  • Die Informationen aus dem extrahierten XML aus dem SPAM Event (inkl. der Beschreibungen)
  • DNS Records
    • NS (NameServer)
    • MX (MailExchanger)
    • SPF (SenderPolicyFramework)
    • DKIM (Domain Key Identified Mail - nur für die Hosts selector1 / selector2)
    • DMARC (Domain-based Message Authentication, Reporting and Conformance)

Hoffentlich hilft euch das beim einen oder anderen Fall weiter. Natürlich freue ich mich auch über Feedback oder Verbesserungsvorschläge.

Liebe Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 5:09 PM | Filed Under [ Exchange PowerShell ]

Wie man sein eigenes PowerShell Modul erstellt

Hallo zusammen,

Bereits vor längerer Zeit habe ich mich mal damit befasst, wie man ein PowerShell Modul schreibt.

Im Prinzip besteht das ganze aus einem Ordner und mindestens zwei Dateien

.psm1 --> PowerShell Script Module

.psd1 --> PowerShell Module Manifest

 

Writing a Windows PowerShell Module

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/writing-a-windows-powershell-module?view=powershell-7.1

  

How to write a PowerShell module manifest

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest?view=powershell-7.1

Ich habe den Ordner Icewolf.DemoModule erstellt. Anschliessend mit dem folgenden Befehl ein Modul Manifest erstellt

New-ModuleManifest -Path C:\GIT_WorkingDir\PowerShellScripts\Icewolf.DemoModule\Icewolf.DemoModule.psd1 -ModuleVersion "1.0" -Author "Andres Bohren"

Das erstellt eine *.psd1 Datei im Ordner

Anschliessend habe ich ein PowerShell Script Modul erstellt "Icewolf.DemoModule.psm1"

##############################################################################
# Icewolf.DemoModule
# V1.0.0 30.09.2021 - Andres Bohren / Initial Version
##############################################################################
#Requires -Modules NetTCPIP

Function Get-DemoCommand
{

    <#
    .SYNOPSIS
           
    .DESCRIPTION
        Description of your Module. This is just a Demo Powershell Module

    .PARAMETER DemoParameter
        Just a Parameter for Demo Effect

        .EXAMPLE
    .\Get-ComputerIP -Demoparameter

    .LINK
    #>

    Param(
        [parameter(Mandatory=$true)][String]$Demoparameter
        )
       
    Begin {
        Write-Host "Value of DemoParameter: $Demoparameter"

        Get-NetIPAddress -AddressFamily IPv4 -AddressState Preferred | Format-List InterfaceAlias, IpAddress
    }

}

So sieht das ganze nun aus

Im Manifest müssen noch das RootModule und die Funktionen welche exportiert (vom Benutzer des Moduls genutzt werden können) angegeben werden.

Mit folgendem Befehl wird das Modul geladen und die Commands und die Hilfe (Synopsys) des Moduls angezeigt

Import-Module C:\GIT_WorkingDir\PowerShellScripts\Icewolf.DemoModule

Get-Module

Get-Command -Module Icewolf.DemoModule

Get-Help Get-DemoCommand

Also führen wir die Funktion aus dem Modul mal aus

Get-DemoCommand -Demoparameter Test

Wenn der Ordner mit dem Modul in einem der folgenden Pfade liegt, dann kann das Modul ohne Pfadangabe geladen werden.

($Env:PSModulePath).split(";")

Beim Testen des Moduls daran denken, dass wenn etwas verändert wird, das Modul zuerst entfernt und dann neu geladen werden muss. 

Remove-Module Icewolf.DemoModule

Import-Module C:\GIT_WorkingDir\PowerShellScripts\Icewolf.DemoModule

Publizieren des Moduls in der PowerShell Gallery

Wer mag, kann jetzt noch sein Modul in der PowerShell Gallery veröffentlichen.

Dazu braucht man einen Account und einen API Key der PowerShell Gallery.

Habe ich jetzt natürlich mit dem DemoModul nicht gemacht.

How to Publish Your First PowerShell Gallery Package

https://jeffbrown.tech/how-to-publish-your-first-powershell-gallery-package/

Publish-Module

https://docs.microsoft.com/en-us/powershell/module/powershellget/publish-module?view=powershell-7.1

Publish-Module -Path C:\GIT_WorkingDir\PowerShellScripts\Icewolf.DemoModule -NuGetApiKey <NuGetAPIKey> -Verbose

Ich hatte in der Vergangenheit Probleme beim Publizieren. Einzige Abhilfe hat das Ändern der Systemsprache gebracht.

Liebe Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 1:37 PM | Filed Under [ PowerShell ]

Exchange Online EmailaddressPolicy for O365 Groups

Hallo zusammen,

In diesem Blog Artikel zeige ich euch, wie man unter Exchange Online eine Emailadressrichtlinie für Office 365 Groups einrichtet, basierend auf Attributen vom Ersteller des O365 Group/Teams.

Auf meinem O365 Tenant habe ich zwei Accepted Custom Domains registriert:

  • icewolf.ch
  • irgendwoiminternet.ch

Schaut man sich die Befehle für EmailaddressPolicy an, so sieht man, dass es vier commands dazu gibt

Get-Command *EmailAddressPolicy*

Dasselbe auf einem OnPrem Exchange Server mache, sieht man, dass es noch ein Update command gibt

Get-Command *EmailAddressPolicy*

In Exchange Online gibt es eine Standardmässige Email Address Richtlinie welche "Default Policy" heisst.

Get-EmailAddressPolicy
Get-EmailAddressPolicy | fl

Mit den Recipient Filtern kann man nach bestimmten Attributen von Objekten filtern - im Prinzip eine Art LDAP Query.

#Filterable properties for the Filter parameter on Exchange cmdlets

https://docs.microsoft.com/en-us/powershell/exchange/filter-properties?view=exchange-ps

Nun erstelle ich eine Emailadressrichtlinie für Groups, welche nur für Ersteller von O365Groups/Teams ist, bei welchem die Company "IrgendwoImInternet" ist.

New-EmailAddressPolicy

https://docs.microsoft.com/en-us/powershell/module/exchange/new-emailaddresspolicy?view=exchange-ps

New-EmailAddressPolicy -Name "IrgendwoGroups" -IncludeUnifiedGroupRecipients -EnabledEmailAddressTemplates "SMTP:@irgendwoiminternet.ch" -ManagedByFilter {Company -eq 'IrgendwoImInternet'}

Get-EmailAddressPolicy -Identity IrgendwoGroups | fl

Als Max Muster (bei dem ist die Company auf "IrgendwoImInternet" eingestellt), erstelle ich ein neues Team.

Wie man sieht, hat hier die EmailaddressPolicy "IrgendwoGroups" gegriffen und die Domain wurde entsprechend gesetzt

Get-UnifiedGroup | where {$_.Name -match "demo"} | ft DisplayName,PrimarySMTPAddress

Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 8:16 AM | Filed Under [ Exchange ]

Neue Client Hardware nach 12 Jahren

Hallo zusammen,

Nach etwa 12 Jahren (man stelle sich das mal vor), habe ich kürzlich neue Hardware für meinen Client bestellt. Mein altes Mainboard mit Intel Prozessor stammt aus dem 2009. Klar gab es da im Verlauf der Zeit auch ein paar Updates wie:

  • Upgrade von HHD auf SSD
  • Memory Upgrade von 8 GB auf 16 GB
  • Der CPU Lüfter musste mal ersetzt werden
  • Zwei Netzteile habe ich geschlissen
  • Neue Grafikkarte hat es mal gegeben

Nun war es nun an der Zeit, wieder mal aktuelle Hardware zu besorgen. Insbesondere Motherboard und diesmal mit AMD Prozessor.

 

Bild Beschreibung
MSI MAG X570S TORPEDO MAX
AMD Ryzen 9 5900X (12 Core / 4.8 GHz)
HyperX Fury 2 x 16GB, DDR4-3200, DIMM 288 pin
be quiet! Dark Rock Pro 4
WD Black SN850 Retail (M.2 NVMe 500GB SSD)
MSI GeForce GTX 1050 Ti (4GB)
be quiet! Straight Power 11 (1000 W)

Bis auf die Grafikkarte und die M.2 NVMe SSD Harddisk war alles lieferbar. Das musste dann zusammengeschraubt werden.

Hat alles auf Anhieb funktioniert und nachdem UEFI Boot ausgeschaltet war und die Bootreihenfolge geändert wurde, konnte ich sogar ab meiner bestehenden SSD Windows 10 wieder booten.

Schon cool so eine 12 Core CPU

Und die 64 GB RAM lassen auch keine Wünsche mehr übrig

Der CPU Lüfter ist allerdings ein Monstrum, so gross, dass das PC Case nicht mehr zu geht. Aber mit knapp 40° CPU Temperatur, macht er seinen Job sehr gut

Jetzt bin ich noch gespannt, wie die schnell die M.2 NVMe Harddisk ist und ob das ganze auch gut mit Windows 11 läuft oder ob ich dazu noch ein TPM 2.0 Modul brauche - der Anschluss auf dem Mainboard ist jedenfalls dafür vorhanden.

Gemäss WhyNotWin11 hängt das meiste noch mit UEFI Boot und Partition Type ab. Das ändere ich dann sobald die neue Harddisk eingebaut ist.

Liebe Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 7:12 AM | Filed Under [ Hardware ]

Exchange Online Safe Attachment - Malware Test

Hallo zusammen,

Wie man Office 365 Defender for Office 365 (Damals hiess das noch "Office 365 ATP") einrichtet, habe ich schon mal gebloggt.

Was jedoch passiert, wenn ein Dokument von Safe Attachment als Malware erkannt wird, habe ich damals nicht ausprobiert.

Um das zu testen habe ich ein Word Dokument mit Makro erstellt, welches beim öffnen das Eicar (Anti Malware Testfile) File herunterlädt. Ein klassischer Fall, bei dem das Attachment keine Malware selbst enthält, sondern diese zur Laufzeit nachlädt.

Das Word Macro habe ich dann mit PowerShell über Send-MailMessage versendet.

Der Anwender erhält dank "Dynamic Delivery" das Mail sofort, während das Attachment noch von Safe Attachment in einer Sandbox geprüft wird.

In der Vorschau des Attachment sieht man genau das

Es hat fast fünfzehn Minuten gedauert, bis das Attachment gescannt war. Danach wurde die Mail in den Junk-E-Mail Folder verschoben. 

Im Junk-E-Mail Folder können die Links nicht angeklickt werden und auch die Attachments nicht geöffnet werden.

Ich habe das Mail deshalb in den Posteingang verschoben und hier sieht man, dass das Attachment geblockt ist

In der Vorschau des Attachment sieht man, was da erkannt wurde

Als Exchange Administrator sieht man das geblockte Mail auch in der Quarantäne

Und kann es dort auch freigeben

In dem Fall wird aber kein neues Mail ausgeliefert, sondern einfach das Attachment an das bestehende Mail gehängt. Falls die Mail noch im Junk-E-Mail Folder ist, muss man es erst in den Posteingang verschieben um das Attachment zu öffnen.

Fazit: Ich finde das ganze sehr gelungen umgesetzt. Es sind viele Schutzmassnahmen bereits in Outlook und Exchange Online Protection eingebaut, um die Benutzer vor Malware zu schützen. Und auch die Admin Controls, sowie die Benutzerfreundlichkeit lassen nicht zu wünschen übrig.

Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 6:00 AM | Filed Under [ Exchange ]

Exchange Online Protection - Fist Contact Safety Tip

Hallo zusammen,

Vor ein paar Monaten musste man den "First Contact Safety Top" in Exchange Online Protection (EOP) noch mit Transport Rules erstellen. Nun kann das auch bequem über die Anti Phishing Policy erledigt werden

Anti-phishing policies in Microsoft 365

Grüsse
Andres Bohren

posted @ Thursday, September 30, 2021 5:33 AM | Filed Under [ Exchange ]

Powered by:
Powered By Subtext Powered By ASP.NET