Alle Beiträge von Don Matteo

lebt in der Schweiz, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Knowledge Network. Author und Blogger zu den Themen, Tutorials für Linux und Open Source.

SSH Login mit PuTTY Key Authentifizierung

PuTTY SSH Anmeldung mit puttygen Schlüsselpaare

Die SSH Authentifizierung über asymmetrische Schlüssel ist nicht nur sicherer als die Passwortabfrage, auch ermöglicht die Public-Key-Authentifizierung eine automatisierte Anmeldung, beispielsweise bei der Script Ausführung. Bei PuTTY dient der PuTTY Key Generator puttygen.exe zum Erzeugen von RSA-(Standard) oder DSA- und ECDSA Schlüsselpaaren.

Das Tool findet man auf putty.org mit Download PuTTY, hat man den putty-installer.msi gewählt, ist puttygen bereits im Windows-Startmenü unter PuTTY zu finden. Zum Erzeugen eines RSA-Schlüsselpaares genügt ein Klick auf die Schaltfläche Generate. Möchte man DSA- oder ECDSA-Schlüssel erzeugen, kann der gewünschte Algorithmus unten im Parameter Optionsfeld gewählt werden.

PuTTY Key Schlüsselpaar erzeugen

Für die Generierung des Schlüssels wird währenddessen der nötige Zufallsmechanismus erzeugt, indem man im freien Bereich des Dialogfensters die Maus frei bewegt. Anschliessend gibt man bei Key passphrase optional das gewünschte Schlüssel Passwort ein.

Zum Speichern des Private-Key die Schaltfläche Save private key wählen, beim Dialog „ob man sich sicher ist den Key ohne passphrase zu schützen!„, kann man sich entscheiden mit oder ohne Passphrase zu Speichern. Den Public Key speichern ist nicht zwingend erforderlich, weil dieser sich jederzeit aus dem privaten Schlüssel errechnen lässt.

  Der Private Schlüssel sollte an einem sicheren Ort aufbewahrt werden, dies gilt vor allem dann, wenn der Private Schlüssel nicht durch eine Passphrase geschützt ist. Ist ein Privat Key einmal abhandengekommen, können unbefugte damit nichts anfangen, wenn dieser durch eine Passphrase geschützt ist. Hingegen ist bei der automatisierten Verarbeitung durch Scripts eine Passphrase nicht erwünscht.

Der Dateiname und der Pfad beim Speichern ist frei wählbar, es hat sich aber für PuTTY-Schlüssel die Endung .ppk verbreitet, da es den Hinweis auf das vom Linux abweichende Format gibt. PuTTY akzeptiert OpenSSH-Keys nicht, im Menü Conversions ist es jedoch möglich, vorhandene OpenSSH-Keys zu importieren, und auch PuTTY-Keys zu exportieren.

Public Key auf Server Speichern

Der Public Key ist öffentlich und soll auf dem Server publiziert werden, diesen mit der Maus im Feld Key vollständig markieren und mit Ctrl+C in die Zwischenablage kopieren.

Nun loggt man sich mit PuTTY noch einmal mit Benutzername und Passwort auf dem entfernten Linux Server ein, öffnet die Datei ~/.ssh/authorized_keys mit einem Editor der Wahl und fügt den Public Key aus der Zwischenablage ein.

  Es darf am Schlüssel nichts verändert werden, einfach nur copy & paste. Es können in der Datei authorized_keys mehrere Schlüssel nacheinander stehen, ohne Leerzeichen oder Zeilen dazwischen.

PuTTY mit Private Key verwenden

Um beim nächsten Login die Public-Key-Authentifizierung zu verwenden, beginnt man beim öffnen von PuTTY gleich bei Basic options for your PuTTY session im Bereich Session, und gibt die IP-Adresse oder der Host Name ein, bei Saved Sessions trägt man den gewünschten Name ein und klickt auf Save, zuvor aber noch im Bereich Category unter Connection auf + SSH klicken, bei Auth im Feld Private key file for authentication den Dateinamen des Private Keys eintragen. Das geht am einfachsten, indem man auf Browse klickt und die entsprechende Datei im Dateiauswahl Fenster auswählt.

Die Anmeldedaten für jede einzelne Verbindung kann als Session gespeichert werden. Wird nun eine Verbindung zum Linux Server aufgebaut, verlangt dieser nach der Identität, so dass der angegebene Benutzername einen in der Datei authorized_keys angegebenen öffentlichen Schlüssel besitzen muss, dieser zum Privaten Schlüssel passt.

Es wird zur Eingabe der Passphrase aufgefordert (falls eingetragen), um den in der lokalen Datei .ppk gespeicherten privaten Schlüssels zu aktivieren. Sind beide Schlüssel identisch, wird der Zugang gestattet.

SSH Konfiguration auf Linux Server

Auf dem Linux Server muss die SSH Server Konfiguration für SSH Authentifizierung über asymmetrische Schlüssel aktiviert sein, bei den meisten Linux Distributionen ist standardmässig die Public-Key-Authentifizierung aktiviert in /etc/ssh/sshd_config.

#PubkeyAuthentication yes
#RSAAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

  OpenSSH: Ein führendes Hash (#) Zeichen bedeutet, das es sich um den Default Wert handelt, soll der Wert geändert werden, wird # entfernt und der Parameter entsprechend modifiziert.

Die Benutzer verwalten ihre Public Keys unter $home in ~/.ssh/authorized_keys nach dem erstellen mit adduser ist das Verzeichnis .ssh meist nicht vorhanden, es wird in diesem Fall als root für den User Fritz wie folgt erstellt.

$ cd /home/fritz
$ mkdir .ssh
$ chown fritz:fritz .ssh
$ chmod 700 .ssh
$ touch .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

  Das Verzeichnis .ssh ist für andere Benutzer nicht einsehbar.

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.

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.

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.

Im Abschnitt Aktion ein Eintrag für JunkEmails.ps1 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.

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"}