Lese-Ansicht

Es gibt neue verfügbare Artikel. Klicken Sie, um die Seite zu aktualisieren.

Was ist neu in Postfix 3.9

Anfang März wurde eine neue Postfix Version 3.9 veröffentlicht. Nach fast einem Jahr Entwicklungszeit löst diese Version gleichzeitig den alten stabilen Zweig 3.5 ab, welcher aus dem Jahr 2020 stammt.

Postfix

Abschaltungen

Mit dieser neuen Major Version wurden alte Zöpfe abgeschnitten und alte, wirklich alte, MySQL Versionen < 4.0. MySQL werden nicht mehr unterstützt.

Auch Features wie "permit_naked_ip_address", "check_relay_domains" und "reject_maps_rbl" wurden entfernt. Die Funktionen "disable_dns_lookups" und "permit_mx_backup" wurden als überholt markiert und werden entfernt.

Änderungen

Daneben wurden die angekündigten Sicherheitsfeatures implementiert, um unter anderem gegen SMTP Smuggling vorzugehen.
So müssen SMTP Clients nun <CR><LF>.<CR><LF> senden, um das Ende eines Datenstroms zu signalisieren.
Die Funktion "smtpd_forbid_unauth_pipelining" trennt ab sofort SMTP-Clients, die gegen RFC 2920 (oder 5321) Befehlspipelining-Beschränkungen verstoßen.
Zusätzlich gab es Formatierungsänderungen im Mailheader. Postfix verwendet jetzt zweistellige Tagesformate. Heißt, einstelligen Nummern wird eine Null vorgestellt.

Neuerungen

Natürlich gab es auch einige Neuerungen in Postfix 3.9, die dich sicher interessieren werden.

  1. MongoDB: Postfix spricht MongoDB, was es dir erlaubt, Daten wie aliases oder canonical dort abzulegen
  2. ID Weiterleitung: IDs können nun via ENVID (Envelope ID) weitergeleitet werden
  3. MySQL and PostgreSQL Verbesserungen: Solltest du MySQL oder PSQL einsetzen, werden die Parameter "idle_interval" und "retry_interval" ab sofort unterstützt. Das erleichtert dir das Verbindungsmanagement
  4. Raw Public Key Support: Erlaubt dir die Verwendung eines selbst signierten Zertifikats anstatt eines x509.
  5. OpenSSL Konfiguration: Postfix unterstützt jetzt eigene OpenSSL Konfigurationsdateien "tls_config_file" und "tls_config_name"

Security

Auf Seiten der Sicherheit gab es ebenfalls Neuerungen.
Das weiter oben bereits erwähnte "smtpd_forbid_unauth_pipelining = yes" gegen Blind Angriffe (SSRF Angriffe) und das ebenfalls genannte Signaling zum Ende des Datenstroms (SMTP Smuggling) zählen hier mit rein. Letzteres hat mit "smtpd_forbid_bare_newline = normalize" eine weitere Sicherheitsfunktion erhalten. Gleiches gilt für das neue "cleanup_replace_stray_cr_lf = yes"
Als Maßnahme gegen Amplification Angriffe wurden die Abfragen des DNS Clients auf 100 reduziert, gewissermaßen ein Rate Limiter am oberen Ende.

Vollständige Release Notes

MongoDB-Beispieldatenbanken für Docker einrichten

Aktuell setze ich mich ein wenig mit MongoDB auseinander und habe mir lokal mit Docker eine Test-Installation eingerichtet:

docker run --name mongo -d mongodb/mongodb-community-server:latest

docker exec -it mongo mongosh

  Using MongoDB: 7.0.3
  Using Mongosh: 2.1.0

test> ...

Je nachdem, wie Sie Docker installiert haben, müssen Sie sudo vor jedes docker-Kommando stellen.

Zum Kennenlernen hätte ich nun gerne ein paar Beispieldatenbanken. Und tatsächlich stellt Mongo für sein Cloud-Angebot Atlas eine ganze Palette von Testdatenbanken zur Verfügung. Eine Kurzbeschreibung der Datenbanken finden Sie hier:

https://www.mongodb.com/docs/atlas/sample-data

Genau die Datenbanken hätte ich gerne in meiner lokalen Installation als »Spielwiese«. Leider ist die Installation dieser Beispieldatenbanken bei der lokalen Verwendung von MongoDB umständlich. Auf GitHub gibt es Dumps (Backups) der Beispieldateien im JSON-Format:

git clone https://github.com/mcampo2/mongodb-sample-databases.git
cd mongodb-sample-databases
lstree sample_*

  sample_airbnb/
    listingsAndReviews.json
  sample_analytics/
    accounts.json
    customers.json
    transactions.json
  sample_geospatial/
    shipwrecks.json
  ...

Jetzt geht es darum, die Datenbanken zu importieren. Unter Linux oder macOS führen Sie dazu für jede JSON-Datei aus samples_xxx ein Kommando nach dem folgenden Muster aus:

cat sample_airbnb/listingsAndReviews.json | \
  docker exec -i mongo mongoimport --db sample_airbnb --collection listingsAndReviews

Beachten Sie, dass Sie docker exec mit der Option -i ausführen müssen (nicht -it wie bisher für den interaktiven Betrieb), damit die Weitergabe von Daten über den Pipe-Operator | funktioniert.

Anstatt nun jede JSON-Datei einzeln zu importieren, bietet sich die Formulierung eines winzigen Scripts an. Er richtet für jedes DB-Verzeichnis sample_xxx eine gleichnamige Datenbank ein und importiert jedes JSON-Dokument als Collection. (Beachten Sie, dass die auf Atlas definierten Indize nicht eingerichtet werden. Wenn Sie zum Testen einen Index brauchen, müssen Sie diesen selbst einrichten.)

#!/bin/sh
for db in sample_*; do
  for file in $db/*.json; do
      collection="$(basename $file .json)"
      cat $file | docker exec -i mongo mongoimport --db $db --collection $collection
  done
done

Das Script muss in dem Verzeichnis ausgeführt werden, in dem sich die von GitHub heruntergeladenen sample_xxx-Verzeichnisse befinden.

Nach dem Import können Sie sich in der Mongo Shell überzeugen, dass alles geklappt hat:

docker exec -it mongo mongosh

test> show dbs

  admin                40.00 KiB
  config               72.00 KiB
  local                40.00 KiB
  sample_airbnb        52.09 MiB
  sample_analytics      9.39 MiB
  sample_geospatial   784.00 KiB
  sample_mflix         28.39 MiB
  sample_supplies     968.00 KiB
  sample_training      61.30 MiB
  sample_weatherdata    2.55 MiB
  samples_airbnb       52.09 MiB
  test                112.00 KiB

test> use sample_airbnb

sample_airbnb> show collections

  listingsAndReviews

sample_airbnb> db.listingsAndReviews.findOne()

 {
    _id: '10009999',
    listing_url: 'https://www.airbnb.com/rooms/10009999',
    name: 'Horto flat with small garden',
    ...
  }

Quellen/Links

❌