Exchange Junk-E-Mail Control

Outlook Junk-E-Mail aus Exchange 2019 für Postfix SMTP access control

Dieser Beitrag behandelt das vorgehen, um die von Outlook Benutzer als Junk-E-Mail blockierten SPAM Absender zu sperren, und um diese auf einem Smarthost Relay unter Postfix zu verwerfen.

Es werden die zu blockierenden Absender mit der ExchangePowerShell Abfrage unter Anwendung des cmdlet Get-Mailbox und Get-MailboxJunkEmailConfiguration ausgelesen und im ASCII Format gespeichert, anschliessend wird die Liste der blockierten Absender auf dem Postfix MTA bereitgestellt. Hierdurch werden gesperrte Absender bereits auf dem Relay abgewiesen, die Nachrichten brauchen nicht erst durch die Queue verarbeitet zu werden, sollen dabei auch nicht zum Exchange Server übermittelt werden.

Outlook Junk-E-Mail Blockierte Absender
Abbildung: Outlook Junk-E-Mail Blockierte Absender

Get-MailboxJunkEmailConfiguration

Das PowerShell Script JunkEmails.ps1 soll die Junk-E-Mails auslesen und in die Datei extracted-JunkEmails.asc im ASCII Format speichern.

$Smarthost = "userid@mail.domain.com:/tmp"
$User_Path = (Get-Item env:\localappdata).Value
$Junk_Path = "$User_Path\Junk"
if(!(Test-Path -Path $Junk_Path )){
    New-Item -ItemType directory -Path $Junk_Path
}
$input_file = "$Junk_Path\JunkEmails.txt"
$output_asc = "$Junk_Path\extracted-JunkEmails.asc"
$output_txt = "$Junk_Path\extracted-JunkEmails.txt"

$AllUsers = Get-Mailbox -ResultSize unlimited -RecipientTypeDetails UserMailbox | foreach {Get-MailboxJunkEmailConfiguration -Identity $_.UserPrincipalName} | fl BlockedSendersAndDomains

$AllUsers | Out-File -FilePath $output_asc -Encoding ASCII
$AllUsers | Out-File -FilePath $input_file

$regex = "\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b"
Select-String -Path $input_file -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_txt

& "C:\Program Files\PuTTY\pscp.exe" -i C:\Windows\system32\privkey.ppk "$output_asc" "$Smarthost"

Den Platzhalter userid durch ein Benutzer ersetzen, dieser es auf dem Linux host gibt und dieser für das kopieren der Datei verwendet werden soll. Es empfiehlt sich ein Service Account zu erstellen, dieser nur zu diesem zweck genutzt wird. Bei mail.domain.com durch den tatsächlichen Smarthost ersetzen. Es wird unter %temp% ein Ordner Junk erstellt, falls dieser nicht bereits vorhanden ist, der Ordner wird lediglich für die Verarbeitung benötigt, die darin enthaltenen Dateien müssen nicht aufgehoben werden. Zum Schluss werden die Junk-E-Mail Absender mit dem zuvor installierten PuTTY pscp.exe auf den $Smarthost kopiert.

Exchange Server Aufgabenplanung

Auf dem Exchange Server 2019 wird in der Aufgabenplanung eine neue Aufgabe erstellt. Für die zyklische Script Ausführung.

Exchange Server Aufgabenplanung Neue Aufgabe erstellen

Die Option Unabhängig von der Benutzeranmeldung ausführen wählen, und Mit höchsten Privilegien ausführen aktivieren.

Im Abschnitt Trigger ein Zeitplan für alle 15 Minuten hinzufügen.

Aufgabenplanung Trigger bearbeiten

Im Abschnitt Aktion ein Eintrag für JunkEmails.ps1 bearbeiten.

Aufgabenplnung Aktion bearbeiten

Im Feld Programm/Script powershell.exe mit Pfad eintragen.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Im Feld Argumente die folgende Zeile mit dem Script hinzufügen.

-NonInteractive -WindowStyle Hidden -command ". 'C:\Programme\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\Windows\System32\JunkEmails.ps1"

Es wird das Script in der PowerShell mit der Exchange Management Shell Erweiterung ausgeführt. Wurde beim Setup von Exchange ein anderes Installations Volume als C gewählt, muss der Pfad zu den Exchange binary im Script angepasst werden.

Postfix Smarthost für Exchange Server

Auf dem Linux host auf diesem Postfix als Smarthost für den Exchange Server läuft, wird /etc/postfix/main.cf editiert.

smtpd_recipient_restrictions =
    check_sender_access hash:/etc/postfix/junkbl_access,

Ein Shell Script /usr/bin/junkbl.sh wird erstellt, zur Bereitstellung von Postfix junk mail control durch junkbl_acces.

#!/bin/bash
cat -v /tmp/extracted-JunkEmails.asc | tr , '\n' | sed 's/[{}]//g;s/[\t ]//g;/^$/d;s/\.\.\.//g;s/\^M$//g;s/BlockedSendersAndDomains://g' | grep . | sort | uniq -u | sed 's/$/\t 550 message was classified as spam/'  > /etc/postfix/junkbl_access
postmap /etc/postfix/junkbl_access

Das Script entfernt Leerstellen und nicht benötigten Zeichenketten aus der PowerShell abfrage, sortiert diese und entfernt doppelte Einträge, und fügt den Suffix 550 message was classified as spam hinzu, anschliessend wird mit postmap junkbl_access.db erzeugt.

Die Datei junkbl.sh muss ausführbar sein.

$ chmod 755 /usr/bin/junkbl.sh

Ein Cronjob auf dem Smarthost für das Script junkbl.sh erstellen.

*/5 * * * * root /usr/bin/junkbl.sh >/dev/null 2>&1

Damit bei der authentifizierung mit pscp.exe der automatisierte Prozess ermöglicht wird, kann mit puttygen.exe ein Schlüsselpaar erzeugt werden, hierdurch keine Passwort Eingabe erforderlich wird. Der Private Schlüssel mit Save private key als Datei privkey.ppk kann in den Pfad C:\Windows\system32 kopiert werden, wie auch das PowerShell Script JunkEmails.ps1. Den Public Key fügt man ein mit copy & paste in die Datei .ssh\authorized_keys, unter $home von userid auf dem Linux Smarthost.

PuTTY Key Generator Public key for pasting into authorized_keys file

Set-MailboxJunkEmailConfiguration

Bei der täglichen Administration kann es erforderlich sein, die durch Junk-E-Mail blockierten Absender wieder aus der Liste BlockedSendersAndDomains entfernen zu müssen, dies geschieht mit folgendem Kommando in der Exchange Management Shell.

BlockedSendersAndDomains

Set-MailboxJunkEmailConfiguration -Identity username -BlockedSendersAndDomains @{Remove="ycdov@maxstore.biz","efor@chaingang.co.uk"}

Den Platzhalter username durch den Mailbox Benutzer ersetzen.

Ebenso ist es möglich, E-Mail-Absender diese unerwünschten SPAM versenden, abzuweisen durch Hinzufügen zur Liste BlockedSendersAndDomains. Es wird hierdurch ermöglicht, dies auch ohne Outlook vernehmen zu können.

Set-MailboxJunkEmailConfiguration -Identity username -BlockedSendersAndDomains @{Add="xyz@zoo367.it","elhuhzj@xintes.tv"}

Die blockierten Junk-E-Mail-Absender können zur Überprüfung ausgeben werden.

Get-MailboxJunkEmailConfiguration -Identity username | fl BlockedSendersAndDomains

TrustedSendersAndDomains

Mit der Whitelist können E-Mail-Absender von der Überprüfung ausgeschlossen werden, damit diese Nachrichten nicht irrtümlich als Junk-E-Mail erkannt und gesperrt werden könnten.

Set-MailboxJunkEmailConfiguration -Identity username -TrustedSendersAndDomains @{Add="john@blue-hotels.eu"}

Outlook Datendatei Ordner ist leer, Statusleiste Filter angewendet

Outlook-Datendatei (.pst) zeigt keine Nachrichten

Beim Öffnen einer Outlook-Datendatei (.pst), wird man feststellen das die Ordner leer sind, in der Statusleiste steht, Filter angewendet. Dies mit Inhalt des IMAP Postfach. Zum Beispiel beim Versuch die Ordner zu einem neuen Exchange oder Office 365 Postfach zu verschieben.

Beim Bearbeiten von IMAP-Ordnern und dem Kopieren/Verschieben, oder nach dem Importieren von Nachrichten aus einem vorhandenen IMAP-Konto. Aus einer geöffneten Outlook PST-Datendatei werden keine Elemente angezeigt. Diese Anleitung zeigt wie das Problem in Outlook 2019, 2016 oder 2013 zu beheben ist.

Outlook-Datendatei öffnen

Outlook PST-Datei öffnen über DateiÖffnen und ExportierenOutlook-Datendatei öffnen.

Die geöffnete Outlook-Datendatei

Ordner der geöffneten Outlook-Datendatei (PST-Datei).

Outlook Datendatei zeigt nach dem Import keine Nachrichten

Öffnet man die WebApp (WebMail) sind die Ordner mit Inhalt zu sehen. Derselbe Inhalt ist jedoch in den Outlook Ordner nicht zu finden. Man wird möglicherweise weiter bemerken, dass beim Anwählen eines Ordners, in der Outlook Statusleiste Filter angewendet steht. Normalerweise ist dort die Anzahl Elemente zu sehen. Der Ordnerinhalt mit den Elementen wird ausgeblendet.

Outlook Filter angewendet

Erscheint in der Outlook Statusleiste Filter angewendet nicht, muss die Outlook Statusleiste für den Ordner angepasst werden. Mit Rechtsklick in der Statusleiste und Filtern aktivieren.

Outlook Statusleiste anpassen - Filtern aktivieren

Lösung: Filter entfernen um versteckte Nachrichten in Datendatei anzuzeigen

IMAP-Status Suchkriterien aus Filter löschen mit folgendem vorgehen. Mit klickt in der Statusleiste auf Filter angewendet, wird das Fenster Filtern geöffnet.

Outlook Ordner Filtern in Statusleiste Filter angewendet deaktivieren

Outlook Ordner Filter Entfernen aus Statusleiste

Zum Abschnitt Erweitert gehen und die Schaltfläche Entfernen klicken. Der Eintrag IMAP-Status entfernen. Danach nach unten auf Alles löschen und OK klicken.

Die Outlook Ordner der PST-Datendatei erscheinen nun mit Inhalt. Die Statusleiste zeigt den Filter nicht mehr.

Outlook IMAP Ordner Filter in Statusleiste Ein- und Ausblenden

Das hinzufügen eines IMAP-Kontos zu Outlook, ermöglicht das auswählen der Ordner aus dem Konto die in der Ordnerliste angezeigt werden sollen. Die Outlook Ordner die angezeigt werden und mit „abonnierte“ bezeichnet sind, werden regelmäßig mit dem e-Mail-Server synchronisiert. Wenn man einen großen Ordner in das Konto hinzufügt, der selten verwendet wird, kann man diesen Ordner kündigen. Mit Aufheben des Abonnements eines Ordners in der Ordnerliste von Outlook, wird man möglicherweise die Leistung verbessern beim Synchronisieren des Kontos.