blog.icewolf.ch

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

My Links

Archives

Post Categories

icewolf

Friday, November 20, 2020

Get Mail Related DNS Entrys with Powershell

Hallo zusammen,

Ich musste heute bei einem Kunden bei über 140 Domains die DNS Einträge zusammensuchen. Habe mir dafür ein kleines Script geschrieben.

Aus einem CSV mit den Domain Namen werden folgende Infos über DNS abgefragt:

  • Nameserver (NS)
  • Mail Exchanger/Mailserver (MX)
  • SenderPolicyFramework (SPF)
  • DomainKeysIdentifiedMail (DKIM)
  • DMARC

Das ganze ist auf die DNS Records von Microsoft 365 abgestimmt. Also nicht böse sein, wenn es anderweitig nicht klappt.

Und so sieht das Resultat dann hinterher im Excel aus.

Hier das PowerShell Script

###############################################################################
# CheckDNSDomain.ps1
# Query Public DNS for Mail Related DNS Records
# 20.11.2020 V1.0 Initial Version - Andres Bohren
###############################################################################
#CSV Excample
#DomainName;NS;MX;SPF;DKIM;DMARC;Owner;TechContact
#example.com;;;;;;;
#
#For Whois use Sysinternals Whois
#https://docs.microsoft.com/en-us/sysinternals/downloads/whois

###############################################################################
# Open File Dialog
###############################################################################
Function Get-FileDialog {
 PARAM (
  [string]$initialDirectory
 )
 Write-Host "Choose CSV File" -f Green
 [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null
 $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
 $OpenFileDialog.initialDirectory = $initialDirectory
 $OpenFileDialog.ShowHelp = $true
 $OpenFileDialog.filter = "All files (*.*)| *.*"
 $show = $OpenFileDialog.ShowDialog()
 If ($Show -eq "OK") { 
  Return $OpenFileDialog.FileName
 }
}

###############################################################################
# MainScript
###############################################################################

#Get CSV File
$CSVFile = Get-FileDialog -InitialDirectory $PSScriptRoot

$CSV = Import-CSV -Path $CSVFile -delimiter ";"
$Int = 0
Foreach ($Line in $CSV)
{
            $Int = $INT + 1
            $Domain = $Line.DomainName
            Write-Host "Working On: $Domain [$int]" -ForegroundColor Green

            #NS
            Write-Host "NS"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=NS"
            [string]$NS = $json.Answer.data

            #MX
            Write-Host "MX"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=MX"
            [string]$MX = $json.Answer.data

            #SPF
            Write-Host "SPF"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=$Domain&type=TXT"
            $TXT = $json.Answer.data
            $TXT = $TXT | where {$_ -match "v=spf1"}
            $SPF = $TXT


            #DKIM
            Write-Host "DKIM"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=Selector1._domainkey.$Domain&type=CNAME"
            $DKIM1 = $json.Answer.data
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=Selector2._domainkey.$Domain&type=CNAME"
            $DKIM2 = $json.Answer.data
            [string]$DKIM = "$DKIM1 $DKIM2"

            #DMARC
            Write-Host "DMARC"
            $json = Invoke-RestMethod -URI "https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=_dmarc.$Domain&type=TXT"
            $DMARC = $json.Answer.data
           
            #Add to CSV Object
            $Line.NS = $NS
            $Line.MX = $MX
            $Line.SPF = $SPF
            $Line.DKIM = $DKIM
            $Line.DMARC = $DMARC
}
$CSV | Export-CSV -Path $CSVFile -NoTypeInformation -Encoding UTF8 -Delimiter ";"

Wer will, kann noch die Whois Informationen eintragen.

For Whois use Sysinternals Whois
https://docs.microsoft.com/en-us/sysinternals/downloads/whois

whois.exe <domain> -accepteula

Die Whois Abfragen laufen auf TCP Port 43. Musste ich erst noch auf der Firewall aufmachen.

Grüsse
Andres Bohren

posted @ Friday, November 20, 2020 10:38 PM | Filed Under [ Exchange ]

Exchange Online Protection (EOP) Baseline und Konfigurationsanalyse

Hallo zusammen,

Für EOP gibt es verschiedene Empfohlene Settings (Standard / Strict) für Exchange Online Protection (EOP)

Recommended settings for EOP and Microsoft Defender for Office 365 security

https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/recommended-settings-for-eop-and-office365-atp?view=o365-worldwide

Mit dem ORCA Tool, können diese Empfehlungen ebenfalls gegenüber dem eigenen Tenant überprüft werden.

 

Office 365 ATP Recommended Configuration Analizer (ORCA)

http://blog.icewolf.ch/archive/2019/12/25/office-365-atp-recommended-configuration-analizer-orca.aspx

Nun sind diese Vorlagen (Security Baselines) auch im Office 365 Security & Compliance Portal verfügbar

Hier kann man diese Vorlagen auswählen und anwenden

In der Konfigurationsanalyse kann man sehen, welche Einstellungen noch nicht den Empfehlungen entsprechen.

Die meisten Settings betreffen hier den  Intelligent Message Filter (IMF) welcher schon länger abgekündigt ist. Alles muss hier auf "aus" stehen.

Die Settings kann man natürlich auch über PowerShell anschauen und setzen.

Get-HostedContentFilterPolicy | fl Name
Get-HostedContentFilterPolicy -Identity Default | fl

Um Beispielsweise die Enduser SpamNotification zu aktivieren nutzt man folgenden Befehl. Kann natürlich verschiedene Policies geben, die müssen dann entsprechend ebenfalls angepasst werden.

Set-HostedContentFilterPolicy -Identity Default -EnableEndUserSpamNotifications $true

Danach sollte alles auf grün stehen, wenn man alle die Empfehlungen einhält. Allerdings kann es gute Gründe dafür geben, dass gewisse Einstellungen nicht den Empfehlungen entsprechen.

Grüsse
Andres Bohren

posted @ Friday, November 20, 2020 12:50 PM | Filed Under [ Exchange ]

Powered by:
Powered By Subtext Powered By ASP.NET