Automx2: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(31 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


= Beschreibung =
= Beschreibung =
Dieses Dokument erklärt, wie automx2 funktioniert, wie [https://rseichter.github.io/automx2/#muaconf die automatisierte Mail-Client-Konfiguration] funktioniert und was zur Installation und Konfiguration von automx2 erforderlich ist.
* Wenn Sie bereits mit automatisierten Mailbox-Konfigurationsmethoden vertraut sind, können Sie die folgenden Abschnitte überspringen und direkt mit [https://rseichter.github.io/automx2/#install Automx2 installieren] und [https://rseichter.github.io/automx2/#configure Automx2 konfigurieren fortfahren].
== Wie funktioniert automx2?  ==
automx2 ist ein Webdienst.  
automx2 ist ein Webdienst.  
* Es befindet sich normalerweise hinter einem Webserver wie NGINX und wartet auf Konfigurationsanfragen.
* Es befindet sich normalerweise hinter einem Webserver und wartet auf Konfigurationsanfragen
* Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver.  
* Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver.  
* Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.  
* Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.  


[[Image:Bild1.png|top]]
Image:Bild1.png


= Installation =
= Installation =
= Syntax =
== Parameter ==
== Optionen ==
= Konfiguration =
== Dateien ==
= Anwendungen =
= Dokumentation =
#
== Man-Pages ==
== Info-Pages ==
= Links =
== Intern ==
== Weblinks ==
# [https://mail.sys4.de/mailman/listinfo/automx-users Mailingliste]
# [https://github.com/rseichter/automx2/issues Issue-Tracker]
= Testfragen =
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>
[[Kategorie:Wiki]]
= TMP =
== Wie funktioniert die automatische Konfiguration?  ==
Moderne E-Mail-Clients (Mail User Agents) können nach Konfigurationsdaten suchen, wenn ein Benutzer beginnt, ein neues Konto zu erstellen.
* Sie senden entweder die E-Mail-Adresse des Benutzers an einen Dienst und bitten den Dienst, mit einer Konfiguration zu antworten, die zum Profil des Benutzers passt, oder sie fragen das DNS-System um Rat.
Die Verwendung eines spezialisierten Konfigurationsdienstes für E-Mail-Konten ermöglicht individuelle Einstellungen.
* Es ermöglicht auch die Durchsetzung einer bestimmten Richtlinie, die beispielsweise den E-Mail-Client so konfiguriert, dass er einen bestimmten Authentifizierungsmechanismus verwendet.
* Das Abfragen des DNS nach E-Mail-Dienststandorten ermöglicht allgemeine Anweisungen, gibt jedoch nicht so viel Kontrolle über die Einstellungen wie ein spezialisierter Dienst wie automx2.
Ab heute gibt es vier Methoden, die bei der Konfiguration eines E-Mail-Kontos helfen.
* Drei davon – [https://rseichter.github.io/automx2/#autoconfig Autoconfig ], [https://rseichter.github.io/automx2/#autodiscover Autodiscover ]und [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]– wurden von Anbietern entwickelt, um die spezifischen Anforderungen ihrer Produkte abzudecken.
* Der vierte ist ein RFC-Standard, der die oben erwähnten allgemeineren [https://rseichter.github.io/automx2/#dnsrr DNS-SRV-Ressourceneinträge ]Methode.
Die herstellerspezifischen Methoden haben gemeinsam, dass der Mail-Client, der eine Konfiguration sucht, eine Anfrage, die zumindest die Mail-Adresse des Benutzers enthält, an einen Konfigurationsdienst senden muss.
* Der Dienst verwendet die E-Mail-Adresse, um Konfigurationsdaten nachzuschlagen, und sendet diese Daten als Antwort an den Client zurück.
* Format – XML-Antwort oder Datei – und Komplexität unterscheiden sich je nach Methode.
automx2 implementiert alles, was zum Konfigurieren von E-Mail-Konten erforderlich ist.
* Funktionen zum Konfigurieren von Kalender- oder Adressbucheinstellungen sind nicht enthalten.
* Dies kann sich in einer zukünftigen Version ändern, aber der Fokus von automx2 liegt auf E-Mail.
=== Autokonfig  ===
Autoconfig ist eine proprietäre Methode, die von der Mozilla Foundation entwickelt wurde.
* Es wurde entwickelt, um ein E-Mail-Konto in Thunderbird und anderen E-Mail-Suiten wie Evolution und KMail zu konfigurieren [https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat haben ]den Mechanismus übernommen.
Wenn ein Benutzer beginnt, ein neues E-Mail-Konto zu erstellen, wird er aufgefordert, seinen echten Namen und seine E-Mail-Adresse einzugeben, z ''alice@example.com ''.
* Thunderbird extrahiert dann den Domänenteil ( ''example.com '') aus der E-Mail-Adresse und erstellt eine Liste von URIs, um in der folgenden Reihenfolge nach einem Konfigurations-Webdienst zu suchen:
https://autoconfig.thunderbird.net/v1.1/example.com
https://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=alice@example.com
https://example.com/.well-known/autoconfig/mail/config-v1.1.xml
http://autoconfig.thunderbird.net/v1.1/example.com
http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=alice@example.com
http://example.com/.well-known/autoconfig/mail/config-v1.1.xml
Ein Konfigurationsdienst wie automx2, der einen der aufgelisteten URIs überwacht, empfängt die Anfrage, verarbeitet sie und antwortet mit einer Reihe von Konfigurationsanweisungen.
Thunderbird verwendet die Anweisungen, um die erforderlichen Felder im Konto automatisch auszufüllen.
* Die einzige verbleibende Aufgabe für den Benutzer besteht darin, die Einstellungen zu bestätigen.
* Danach kann sie sofort mit der Nutzung ihres neuen E-Mail-Kontos beginnen.
=== Automatische Erkennung  ===
Autodiscover ist eine proprietäre Methode, die von Microsoft entwickelt wurde.
* Die von automx2 unterstützte Protokollversion wurde entwickelt, um ein E-Mail-Konto innerhalb von Outlook 2016 ff zu konfigurieren.
* Dienstsuchen verwenden die unten gezeigten URLs und als Fallback-Option DNS-Suchen.
* Bitte beachten Sie, dass Microsoft für Office 365 einen anderen Autodiscover-Mechanismus verwendet, der von automx2 noch nicht unterstützt wird, da Informationen zu den technischen Details nicht kostenlos zur Verfügung stehen.
https://example.com/autodiscover/autodiscover.xml
https://autodiscover.example.com/autodiscover/autodiscover.xml
http://autodiscover.example.com/autodiscover/autodiscover.xml
dns: autodiscover.example.com
dns: _autodiscover._tcp.example.com
Alle HTTP(S)-Abfragen senden eine POST-Anfrage und übermitteln XML, das Informationen über das zu konfigurierende Konto enthält.
* Die DNS-Abfragen suchen nach a <tt>CNAME</tt>Ressourceneintrag zuerst, der den E-Mail-Client auf eine Ressource außerhalb der Domäne des Postfachbesitzers umleiten soll, z. ''alice@example.com ''würde <tt>service.example-provider.com</tt>für Konfigurationsanweisungen.
* Wenn die erste DNS-Abfrage fehlschlägt, kann der Client mithilfe von a zu einem Konfigurationsdienst umgeleitet werden <tt>SRV</tt>RR so:
_autodiscover._tcp.example.com.  0  443 service.example-provider.com.
Die <tt>SRV</tt>Das im obigen Beispiel verwendete RR würde Alices Client an senden <tt>service.example-provider.com</tt>und weisen Sie ihn an, die Abfrage an den Konfigurationsdienst auf Port zu senden <tt>443</tt>.
=== Mobileconfig  ===
Anfragen und Antworten verwenden proprietäre Inhaltstypen mit einem zugrunde liegenden [https://en.wikipedia.org/wiki/Property_list Eigenschaftslistenformat ].
* automx2 gibt ''unsignierte ''Daten zurück, was bedeutet, dass auf den Dienst nur über HTTPS zugegriffen werden muss.
* Andernfalls haben Ihre Benutzer keine Möglichkeit zu wissen, ob sie auf den richtigen Dienst zugreifen, und sind anfällig für Man-in-the-Middle-Angriffe.
=== DNS-SRV-Ressourceneinträge  ===
_imap._tcp.example.com          SRV  10  20  143  mail.example.com.
_imaps._tcp.example.com        SRV  0  1  993  .
_pop3._tcp.example.com          SRV  0  1  110  .
_pop3s._tcp.example.com        SRV  0  1  995  .
_smtp._tcp.example.com.        SRV  0  1  25  .
_submission._tcp.example.com.  SRV  10  20  587  mail.example.com.
== automx2 installieren  ==
automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:  
automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:  
  $ python3 --version
  $ python3 --version
  Python 3.9.9
  Python 3.9.9


{|| class="wikitable sortable"
'''Nicht als root ausführen'''
|-
|| Nicht als root ausführen  


Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte.  
Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte.  
* Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten.  
* Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten.  
* Ich empfehle die Erstellung eines neuen Benutzerkontos namens <tt>automx2</tt>.  
* Ich empfehle die Erstellung eines neuen Benutzerkontos namens <tt>automx2</tt>.  
|-
 
|}
Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum).  
Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum).  
* Der Weg <tt>/srv/web/automx2</tt>wird in dieser Dokumentation als Beispiel verwendet.  
* Der Weg <tt>/srv/web/automx2</tt>wird in dieser Dokumentation als Beispiel verwendet.  
Zeile 153: Zeile 25:


# Best practice: Create a fresh user account.
# Best practice: Create a fresh user account.
sudo useradd --home-dir /srv/web/automx2 --create-home automx2
# useradd --home-dir /srv/web/automx2 --create-home automx2


# Alternative: If the user account already exists.
# Alternative: If the user account already exists.
  # sudo bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'
  # bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'


Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln.  
Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln.  
Zeile 167: Zeile 39:


Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt <tt>.venv</tt>im aktuellen Verzeichnis.  
Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt <tt>.venv</tt>im aktuellen Verzeichnis.  
  ./setupvenv.sh
  ./setupvenv.sh


Zeile 182: Zeile 53:


Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde.  
Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde.  
* Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips <tt>--upgrade</tt> option:  
 
Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips <tt>--upgrade</tt> option:  


  cd /srv/web/automx2
  cd /srv/web/automx2
Zeile 190: Zeile 62:
|-
|-
|}
|}
== automx2 konfigurieren  ==
 
= Syntax =
== Parameter ==
== Optionen ==
= Konfiguration =
automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.  
automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.  


Zeile 201: Zeile 77:
Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.  
Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.  


{|| class="wikitable sortable"
'''Läuft ohne Laufzeitkonfiguration'''
|-
Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen.
|| Läuft ohne Laufzeitkonfiguration
* Diese sind nur zum Testen geeignet.
* Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird.


Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen.
* Diese sind nur zum Testen geeignet.
* Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird.
|-
|}
Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration.  
Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration.  
* Die erste Übereinstimmung bestimmt die verwendete Konfiguration.  
* Die erste Übereinstimmung bestimmt die verwendete Konfiguration.  
Zeile 218: Zeile 90:
  file : /etc/automx2.conf
  file : /etc/automx2.conf


{|| class="wikitable sortable"
Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.  
|-
 
|| Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.  
|-
|}
Um Parameter und Optionen anzugeben, verwendet automx2 eine [https://docs.python.org/3.9/library/configparser.html#supported-ini-file-structure INI Dateisyntax ].  
Um Parameter und Optionen anzugeben, verwendet automx2 eine [https://docs.python.org/3.9/library/configparser.html#supported-ini-file-structure INI Dateisyntax ].  
* Die [https://github.com/rseichter/automx2/blob/master/contrib/automx2-sample.conf Beispiel Konfiguration ], die mit automx2 geliefert wird, sieht so aus:  
* Die [https://github.com/rseichter/automx2/blob/master/contrib/automx2-sample.conf Beispiel Konfiguration ], die mit automx2 geliefert wird, sieht so aus:  
Zeile 248: Zeile 117:


Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an.  
Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an.  
* Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.  
* Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.


=== Automx2 eigenständig testen  ===
=== Automx2 eigenständig testen  ===
Zeile 339: Zeile 208:
  curl http://127.0.0.1:4243/initdb/
  curl http://127.0.0.1:4243/initdb/


=== Destillierkolben ===
=== Alembic ===
Wie in einem vorherigen Abschnitt erwähnt, können Sie [https://alembic.sqlalchemy.org/ Alembic ], um Ihre Datenbank zu erstellen oder zu aktualisieren.  
Wie in einem vorherigen Abschnitt erwähnt, können Sie [https://alembic.sqlalchemy.org/ Alembic ], um Ihre Datenbank zu erstellen oder zu aktualisieren.  
* Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert.  
* Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert.  
Zeile 371: Zeile 240:
  INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support
  INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support


== Ausführen von automx2  ==
Zum Ausführen von automx2 muss automx2 als Dienst gestartet und seine Ausgabe über einen Webserver der Öffentlichkeit bereitgestellt werden.
* Sie sollten automx2 nicht mit Superuser-Rechten ausführen.
* Verwenden Sie stattdessen einen dedizierten Benutzer.


Die folgenden Beispiele gehen davon aus, dass Sie einen Benutzer und eine Gruppe erstellt haben <tt>automx2</tt> und diesem Benutzer die entsprechenden Rechte eingeräumt haben: * Leseberechtigungen für die <tt>automx2.conf</tt>Konfigurationsdatei.  
== Konfigurieren eines Webservers  ==
* Lese- und Zugriffsberechtigungen für die virtuelle Python-Umgebung.  
Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung.
* Lese- und Zugriffsberechtigungen für die SQLite-Datenbank.  
* Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde.  
* Features wie die Kryptografie der Transportschicht für HTTPS (erforderlich für [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt.  
* Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.  


=== Als Systemdienst  ===
In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren.  
Wenn Ihr System ''systemd ''verwendet, möchten Sie möglicherweise die folgende [https://rseichter.github.io/contrib/automx2.service automx2.service ]aus dem Abschnitt contrib bereitstellen und <tt>/etc/systemd/system/automx2.service</tt>:  
* Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet.  
* Ergänzen Sie die <tt>proxy_count</tt>Parameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:  


  [Unit]
  [automx2]
  After=network.target
  # A typical production setup would use loglevel = WARNING
  Description=MUA configuration service
loglevel = WARNING
  Documentation=https://rseichter.github.io/automx2/
# Disable SQL command echo.
  db_echo = no
  # SQLite database in a UNIX-like file system
db_uri = sqlite:////var/lib/automx2/db.sqlite
# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed. 
proxy_count = 1


  [Service]
  '''Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht'''
  Environment=FLASK_APP=automx2.server:app
  Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht.  
Environment=FLASK_CONFIG=production
ExecStart=/srv/www/automx2/bin/flask run --host=127.0.0.1 --port=4243
Restart=always
User=automx2
WorkingDirectory=/var/lib/automx2


  [Install]
=== Apache ===
WantedBy=multi-user.target
Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. <tt>ProxyPreserveHost</tt>Anweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.  


Sobald Sie den Dienst installiert haben, müssen Sie systemd anweisen, die Liste der verfügbaren Dienste neu zu laden:
# Apache 2.4 example configuration snippet to forward incoming requests to automx2.
# vim:ts=4:sw=4:et:ft=apache
<VirtualHost *:80>
    ServerName autoconfig.example.com
    ServerAlias autodiscover.example.com
    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:4243/"
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
    <Location /initdb>
        # Limit access to clients connecting from localhost
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>


sudo systemctl daemon-reload
== Dateien ==
 
Es sollte jetzt in der Lage sein, Sie über einen Dienst namens automx2 zu informieren:
 
sudo systemctl status automx2
● automx2.service - MUA configuration service
      Loaded: loaded (/etc/systemd/system/automx2.service; disabled; vendor preset: enabled)
      Active: inactive (dead)
 
Als nächstes aktivieren und starten Sie automx2 mit dem folgenden Befehl:
 
sudo systemctl enable automx2 --now
Created symlink /etc/systemd/system/multi-user.target.wants/automx2.service → /etc/systemd/system/automx2.service.
 
Sie sollten sehen, dass automx2 aktiviert ist und ausgeführt wird:
 
sudo systemctl status automx2
● automx2.service - MUA configuration service
      Loaded: loaded (/etc/systemd/system/automx2.service; enabled; vendor preset: enabled)
      Active: active (running) since Mon 2021-03-01 12:54:31 CET; 19s ago
    Main PID: 126966 (python)
      Tasks: 1 (limit: 4620)
      Memory: 46.1M
      CGroup: /system.slice/automx2.service
              └─126966 /srv/www/automx2/bin/flask run --host=127.0.0.1 --port=4243
[...]
Mar 01 12:54:32 mail python[126966]: Reading /etc/automx2.conf
Mar 01 12:54:32 mail python[126966]: Config.get: loglevel = WARNING
Mar 01 12:54:32 mail python[126966]:  * Running on http://127.0.0.1:4243/ (Press CTRL+C to quit)
 
beschrieben mit dem Testen von automx2 beginnen [https://rseichter.github.io/automx2/#localtest unten ].
 
=== Manuell aus einer Shell  ===
Wechseln Sie als nichtprivilegierter Benutzer in das Installationsverzeichnis und starten Sie die <tt>.venv/scripts/flask.sh</tt>Startskript:
 
cd /srv/web/automx2
.venv/scripts/flask.sh run --host=127.0.0.1 --port=4243
 
{|| class="wikitable sortable"
|-
|| Handhabung der Terminalausgabe
 
Das Startskript lässt automx2 absichtlich im Vordergrund laufen und die Protokolldaten werden im Terminal angezeigt.
* Wenn Sie Strg-C drücken oder die Shell-Sitzung schließen, wird die Anwendung beendet.
* Um automx2 im Hintergrund auszuführen, können Sie einen Fenstermanager wie [https://www.gnu.org/software/screen/ GNU Bildschirm ]oder [https://en.wikipedia.org/wiki/Tmux tmux ].
|-
|}
Nachdem automx2 nun läuft, müssen Sie den Webserver-Proxy konfigurieren, der Anfragen von außen entgegennimmt und an automx2 weiterleitet.


= Anwendung =
== Automx2 lokal testen  ==
== Automx2 lokal testen  ==
Sie können ''curl ''in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden.  
Sie können ''curl ''in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden.  
Zeile 487: Zeile 329:
  </clientConfig>
  </clientConfig>


Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.  
Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.


== Konfigurieren eines Webservers  ==
= Dokumentation =
Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung.  
#
* Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde.  
== Man-Page ==
* Features wie die Verschlüsselung der Transportschicht für HTTPS (erforderlich für [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt.
== Info-Pages ==
* Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.  
= Links =
 
== Intern ==
In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren.  
== Weblinks ==
* Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet.
# [https://mail.sys4.de/mailman/listinfo/automx-users Mailingliste]
* Ergänzen Sie die <tt>proxy_count</tt>Parameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:
# [https://github.com/rseichter/automx2/issues Issue-Tracker]
# https://rseichter.github.io/automx2/#muaconf


[automx2]
# A typical production setup would use loglevel = WARNING
loglevel = WARNING
# Disable SQL command echo. 
db_echo = no
# SQLite database in a UNIX-like file system
db_uri = sqlite:////var/lib/automx2/db.sqlite
# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed. 
proxy_count = 1
{|| class="wikitable sortable"
|-
|| Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht.
|- 
|| Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht.
|-
|}


=== Apache  ===
Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. <tt>ProxyPreserveHost</tt>Anweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.


# Apache 2.4 example configuration snippet to forward incoming requests to automx2.
[[Kategorie:Autodiscover]]
# vim:ts=4:sw=4:et:ft=apache
<VirtualHost *:80>
    ServerName autoconfig.example.com
    ServerAlias autodiscover.example.com
    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:4243/"
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
    <Location /initdb>
        # Limit access to clients connecting from localhost
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>

Aktuelle Version vom 6. November 2024, 12:26 Uhr

automx2 - Dienst zur automatischen Konfiguration von E-Mail-Clients

Beschreibung

automx2 ist ein Webdienst.

  • Es befindet sich normalerweise hinter einem Webserver und wartet auf Konfigurationsanfragen
  • Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver.
  • Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.
Image:Bild1.png

Installation

automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:

$ python3 --version
Python 3.9.9

Nicht als root ausführen

Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte.

  • Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten.
  • Ich empfehle die Erstellung eines neuen Benutzerkontos namens automx2.

Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum).

  • Der Weg /srv/web/automx2wird in dieser Dokumentation als Beispiel verwendet.
  • Die folgenden BASH-Shell-Befehle sollten mit jeder modernen Linux-Distribution funktionieren.
  1. Best practice: Create a fresh user account.
# useradd --home-dir /srv/web/automx2 --create-home automx2
  1. Alternative: If the user account already exists.
# bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'

Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln.

  • Dies ist wichtig, um die richtigen Dateiberechtigungen sicherzustellen.
  • Laden Sie das Skript herunter, das Ihren automx2-Dienst herunterlädt und einrichtet:
cd /srv/web/automx2
wget https://github.com/rseichter/automx2/raw/master/contrib/setupvenv.sh
chmod u+x setupvenv.sh

Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt .venvim aktuellen Verzeichnis.

./setupvenv.sh

Aktivieren Sie die virtuelle Umgebung und installieren Sie die neueste automx2-Version von PyPI.

  • Stellen Sie sicher, dass Sie die richtige Aktivierung für Ihre Shell aus der auswählen .venv/binVerzeichnis.
  • Dies ist ein Beispiel für BASH:
source .venv/bin/activate
pip install automx2
Aktualisieren auf eine neuere automx2-Version

Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde.

Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips --upgrade option:

cd /srv/web/automx2
source .venv/bin/activate
pip install --upgrade automx2

Syntax

Parameter

Optionen

Konfiguration

automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.

Platzhalter

Um die Konfiguration bequemer zu machen, unterstützt automx2 Platzhalter im Mozilla-Stil .

  • Zum Beispiel die Zeichenfolge %EMAILADDRESS%in Datenbankeinträgen wird durch die bei der Abfrage angegebene E-Mail-Adresse ersetzt.
  • Obwohl automx2 auf einer proprietären Funktion von Autoconfig basiert, wendet es Platzhalter auch auf Autodiscover- und Mobileconfig-Antworten an.

Laufzeitkonfiguration

Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.

Läuft ohne Laufzeitkonfiguration
Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen. 
* Diese sind nur zum Testen geeignet. 
* Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird. 

Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration.

  • Die erste Übereinstimmung bestimmt die verwendete Konfiguration.
env  : AUTOMX2_CONF  
file : ~/.automx2.conf
file : /etc/automx2/automx2.conf
file : /etc/automx2.conf

Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.

Um Parameter und Optionen anzugeben, verwendet automx2 eine INI Dateisyntax .

[automx2]
# A typical production setup would use loglevel WARNING.
loglevel = DEBUG
# Echo SQL commands into log? Used for debugging.
db_echo = no
# In-memory SQLite database
db_uri = sqlite:///:memory:
# SQLite database in a UNIX-like file system
#db_uri = sqlite:////var/lib/automx2/db.sqlite
# MySQL database on a remote server. 
  • This example does not use an encrypted
# connection and is therefore *not* recommended for production use.
#db_uri = mysql://username:password@server.example.com/db
# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed.
proxy_count = 1

Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an.

  • Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.

Automx2 eigenständig testen

Wenn Sie überprüfen möchten, ob eine Vanilla-Installation von automx2 funktioniert, können Sie sie mit internen Testdaten füllen.

  • Starten Sie automx2 wie im Abschnitt Ausführen von automx2 und senden Sie die folgende Anfrage, um Ihre Datenbank zu füllen:
curl http://127.0.0.1:4243/initdb/

Dieses Beispiel geht davon aus, dass Sie automx2 auf localhost ausführen und TCP-Port 4243 abhören, was der vorgeschlagene Standardport ist.

Nachdem Sie die Datenbank mit Beispieldaten gefüllt haben, können Sie testen, ob automx2 funktioniert.

  • Verwenden Sie curl, um eine Kontokonfigurationsanforderung für user@example.com zu senden:
curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'

Achten Sie, wie im Beispiel gezeigt, darauf, die URL nach Bedarf in Anführungszeichen zu setzen.

  • Andernfalls führt Ihre Befehlsshell möglicherweise einen Musterabgleich für Zeichen wie das Fragezeichen durch ?(FISCH tut es).

Datenbankkonfiguration

automx2 verwendet das SQLAlchemy-Toolkit, um auf Datenbanken zuzugreifen.

  • Dadurch können verschiedene Datenbanken, auch Dialekte genannt , verwendet werden, indem einfach die entsprechende Verbindungs-URL definiert wird.
API-basierte Konfiguration

Ich erwäge das Hinzufügen einer API für Konfigurationsänderungen in einer kommenden Version, habe aber noch nicht entschieden, wann dies geschehen könnte.

Datenbankunterstützung

Während Sie wahrscheinlich bereits SQLite-Unterstützung auf Ihrem lokalen Computer haben, müssen Sie möglicherweise zusätzliche Python-Pakete für PostgreSQL, MySQL usw.

  • installieren.
  • Detaillierte Anweisungen zur Unterstützung eines bestimmten Datenbankdialekts sind in diesem Dokument nicht enthalten.
  • Bitte suchen Sie im Internet nach detaillierten Anweisungen zur Unterstützung eines bestimmten Dialekts.
  • Die SQLAlchemy-Dokumentation bietet einen nützlichen Ausgangspunkt.

Während contribVerzeichnis Beispieldatenbankschemata enthält, die Sie als Referenz verwenden können, empfehle ich die Verwendung der integrierten Methode, um die erforderliche DB-Struktur von Grund auf neu zu erstellen, indem Sie auf die zugreifen /initdb/Dienstendpunkt.

  • Dadurch wird die Datenbank auch mit einigen Beispieldaten gefüllt.

Wenn Sie von einer frühen automx2-Version aktualisieren und Ihre vorhandene Datenbank migrieren möchten, können Sie die integrierte Alembic-Unterstützung verwenden.

  • Dies erfordert jedoch das Klonen des Git-Repositorys, das Ändern alembic.iniund Aufrufen der Migration von der Befehlszeile.
  • Es ist normalerweise einfacher, Ihre vorhandenen Daten zu exportieren, eine neue DB zu erstellen und die Daten zu importieren.

SQLite

Dieser Abschnitt zeigt, was Sie tun müssen, um SQLite Version 3 oder höher als Backend-Datenbank für automx2 zu verwenden.

Schritt 1: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.

  • Bitte beachten Sie, dass die Angabe eines absoluten Pfades für die Datenbank insgesamt vier Schrägstriche nach der Schema-Kennung erfordert:
[automx2]
db_uri = sqlite:////var/lib/automx2/db.sqlite

Schritt 2: Starten Sie automx2 und greifen Sie auf die DB-Initialisierungs-URL zu:

curl http://127.0.0.1:4243/initdb/

Das Git-Repository enthält ein sqlite-generate.sh-Hilfsskript , das demonstriert, wie die Datenbank programmgesteuert gefüllt werden kann.

  • Sie müssen nur wenige Einstellungen Ihren Bedürfnissen anpassen:
PROVIDER_NAME='Example Inc.'
PROVIDER_SHORTNAME='Example'
PROVIDER_ID=100
DOM='example'
TLD='com'

Das Skript gibt die SQL-Anweisungen auf der Standardausgabe aus, an die weitergeleitet werden kann sqlite3zum Bearbeiten.

  • Stellen Sie sicher, dass die automx2.conf übereinstimmt db_uriEinstellung bei der Angabe der Datenbank.

contrib/sqlite-generate.sh | sqlite3 /var/lib/automx2/db.sqlite

Sobald Sie die Datenbank gefüllt haben, ist automx2 betriebsbereit.

MySQL

Schritt 1: Erstellen Sie eine Datenbank.

CREATE DATABASE `automx2` COLLATE 'utf8mb4_general_ci';

Schritt 2: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.

  • Das folgende Beispiel verwendet pymysql als DB-Treiber, der nicht in der automx2-Distribution enthalten ist.
[automx2]
db_uri = mysql+pymysql://user:pass@dbhost/automx2?charset=utf8mb4

Schritt 3: Starten Sie automx2 und greifen Sie auf die DB-Initialisierungs-URL zu:

curl http://127.0.0.1:4243/initdb/

Alembic

Wie in einem vorherigen Abschnitt erwähnt, können Sie Alembic , um Ihre Datenbank zu erstellen oder zu aktualisieren.

  • Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert.
  • Datenbank-Upgrades basieren auf diesen Informationen.
  • Befolgen Sie die nachstehenden Schritte, um die einzustellen RELEASE-Variable zum GitHub-Tag oder zur Release-Nummer Ihrer Wahl.
export RELEASE="2021.6"
wget https://github.com/rseichter/automx2/archive/refs/tags/$RELEASE.zip
unzip $RELEASE.zip
cd automx2-$RELEASE/alembic

Ändern Sie als Nächstes den Wert für sqlalchemy.url in alembic.inipassend zu Ihrer automx2-Konfiguration.

  • Erstellen Sie eine leere Datenbank, es sei denn, Sie verwenden SQLite.
  • In diesem Fall erstellt Alembic die Datenbank für Sie.
  • Die letzten Schritte sind die Aktivierung der virtuellen Python-Umgebung automx2 und das Aufrufen von make .
source /path/to/automx2/.venv/bin/activate
make upgrade

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

PYTHONPATH=.. 
  • FLASK_APP=automx2.server:app flask db upgrade -d .
Running automx2 version 2021.6
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> f62e64b43d2f, DB schema for automx2 version 2020.0
Created: 2020-01-17 22:30:05.748651
INFO  [alembic.runtime.migration] Running upgrade f62e64b43d2f -> 5334f8a8282c, Add "prio" column to "server" table.
Created: 2020-12-15 15:04:49.371802
INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support


Konfigurieren eines Webservers

Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung.

  • Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde.
  • Features wie die Kryptografie der Transportschicht für HTTPS (erforderlich für Mobileconfig ) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt.
  • Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.

In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren.

  • Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet.
  • Ergänzen Sie die proxy_countParameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:
[automx2]
# A typical production setup would use loglevel = WARNING
loglevel = WARNING

# Disable SQL command echo.  
db_echo = no

# SQLite database in a UNIX-like file system
db_uri = sqlite:////var/lib/automx2/db.sqlite

# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed.  
proxy_count = 1
Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht
Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht. 

Apache

Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. ProxyPreserveHostAnweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.

# Apache 2.4 example configuration snippet to forward incoming requests to automx2.
# vim:ts=4:sw=4:et:ft=apache

<VirtualHost *:80>
    ServerName autoconfig.example.com
    ServerAlias autodiscover.example.com
    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:4243/"
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
    <Location /initdb>
        # Limit access to clients connecting from localhost
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>

Dateien

Anwendung

Automx2 lokal testen

Sie können curl in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden.

  • Das folgende Beispiel geht davon aus, dass Ihr Dienst auf localhost auf Port 4243 ausgeführt wird.
  • Die genaue Ausgabe hängt von Ihrem Datenbankinhalt ab, sollte aber ähnlich aussehen.
curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'
<clientConfig version="1.1">
    <emailProvider id="automx2-100">
        <identity/>
        <domain>example.com</domain>
        <displayName>Example Inc.</displayName>
        <displayShortName>Example</displayShortName>
        <incomingServer type="imap">
            <hostname>mail.example.com</hostname>
            <port>993</port>
            <socketType>SSL</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </incomingServer>
        <incomingServer type="pop3">
            <hostname>mail.example.com</hostname>
            <port>110</port>
            <socketType>STARTTLS</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </incomingServer>
        <outgoingServer type="smtp">
            <hostname>mail.example.com</hostname>
            <port>587</port>
            <socketType>STARTTLS</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </outgoingServer>
    </emailProvider>
</clientConfig>

Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.

Dokumentation

Man-Page

Info-Pages

Links

Intern

Weblinks

  1. Mailingliste
  2. Issue-Tracker
  3. https://rseichter.github.io/automx2/#muaconf