Featured image of post Proton Mail Bridge (Linux, CLI)

Proton Mail Bridge (Linux, CLI)

Proton Mail Bridge unter Linux auf der CLI (ohne GUI) installieren und verwenden.

Einleitung

Für meine Emails nutze ich schon immer einen Anbieter im Internet, da ich Selfhosting in diesem Bereich für zu aufwändig halte, gerade wenn es um den Versand von Emails geht. Um trotzdem unabhängig von der Erreichbarkeit des Anbieters dauerhaft Zugriff auf meine Emails zu haben, speichere ich eine Kopie aller meiner Emails in einem lokalen Archiv. Dabei handelt es sich um einen einfachen Dovecot-Server, der in einem LXC läuft und ausschließlich über das LAN erreichbar ist. Die Synchronisation von Online- / und Offline-Postfach erfolgt über imapsync.

Besonderheit bei Proton Mail

Vor Kurzem bin ich zum Anbieter Proton Mail gewechselt. Die Besonderheit bei diesem Anbieter ist, dass die Daten dort Ende-zu-Ende verschlüsselt auf dem Server liegen. Das bedeutet, das nur ich die dort abgelegten Daten lesen kann und sonst niemand anderes, nicht mal Proton selbst. Dieser Vorteil führt auch gleichzeitig zu einem Nachteil, weil man damit gezwungen ist die offiziellen Programme und Apps von Proton Mail zu benutzen, um seine Emails einsehen zu können. Es ist somit nicht ohne weiteres möglich, das Mailprogramm eines Drittanbieters wie Thunderbird oder Apple Mail oder eben mein eingangs erwähntes Tool imapsync zu benutzen. Mir persönlich gefallen die Apps sehr gut, aber durch das Fehlen eines öffentlich zugänglichen IMAP-Servers ist ohne weiteres keine Synchronisation mit meinem Offline-Postfach möglich.

Die Proton Mail Bridge

Um weiterhin auch mit anderen Emailprogrammen arbeiten zu können, bietet Proton Mail die “Proton Mail Bridge” an. Dabei ist vorab direkt zu erwähnen, dass dieses Tool nur für zahlende Kunden zur Verfügung steht und nicht für Benutzer des kostenlosen Accounts.

Die Bridge ist ein kleines Tool, das man auf seinem Gerät installiert und mit dem man sich dann in seinem Mailaccount einloggt. Die Bridge wiederum stellt einen IMAP- und SMTP-Server bereit, die dann jeweils nur lokal verfügbar sind. Diese können nun von anderen Programmen genutzt werden, um wieder ganz normal Emails abrufen und versenden zu können. Die Proton Mail Bridge übernimmt dabei die Ent- und Verschlüsselung der Daten.

Die Bridge bietet eine Oberfläche an, über die alles leicht eingestellt werden kann. Ich persönlich benötige das Tool aber auf einem LXC, also einem kleinen Linux-Container ohne grafische Oberfläche. Deswegen geht es in diesem Beitrag um die Installation und den Betrieb der Proton Mail Bridge unter Linux ohne eine grafische Oberfläche.

Systemumgebung

Da mein System für die Mailbackups unter Debian läuft, ist dies die Basis für diesen Beitrag. Das Ganze sollte aber auch problemlos auf RHEL-basierten Systemen wie Alma Linux funktionieren. Für die Installation unter Linux stellt Proton ein deb-Paket (Debian/Ubuntu) und ein rpm-Paket (RHEL/openSUSE) zur Verfügung.

Installation und Einrichtung

Die Proton Bridge benötigt einen Passwortmanager, um sensible Daten sicher speichern zu können. Dafür kommt das Kommandozeilentool pass zum Einsatz. Dieser benötigt wiederum einen GPG-Key, um initialisiert werden zu können. Dies werden wir jetzt in den nachfolgenden Kapiteln Schritt für Schritt einrichten.

Notwendige Komponenten

Bevor es richtig losgehen kann, müssen wir sicherstellen dass alle notwendigen Tools installiert sind. Wir werden gpg, pass und tmux benötigen.

1
sudo apt install gpg pass tmux

Proton Mail Bridge installieren

Da wir zur Installation der Bridge nur ein Paket haben und keine Paketquellen, die wir bequem zum Paketmanager hinzufügen können, müssen wir uns selbst darum kümmern dass alle notwendigen Abhängigkeiten auf dem System installiert sind.

1
sudo apt install fonts-dejavu fonts-dejavu-extra libasyncns0 libflac12 libmp3lame0 libmpg123-0 libogg0 libopus0 libpulse-mainloop-glib0 libpulse0 libsecret-1-0 libsecret-common libsndfile1 libvorbis0a libvorbisenc2

Anschließend laden wir das aktuellste Paket von der Proton Webseite herunter, dazu benötigen wir den direkten Downloadlink zum Paket.

Deswegen die Proton Mail Downloads aufrufen: Proton Mail Downloads und dort dann bis “Bridge” runterscrollen, auf “Linux” klicken und dort bei “Herunterladen (.deb)” einen Rechtsklick machen und mit “Linkadresse kopieren” die URL in die Zwischenablage kopieren.

Link zum Linux Paket (.deb) in die Zwischenablage kopieren

Mit dieser URL können wir nun das Paket mit curl laden:

1
curl https://proton.me/download/bridge/protonmail-bridge_3.17.0-1_amd64.deb -O

Und direkt installieren (den Dateinamen müsst ihr dann ggf. anpassen):

1
sudo dpkg -i protonmail-bridge_3.17.0-1_amd64.deb

Die Installation der Bridge ist dann auch schon abgeschlossen und es geht weiter mit der Einrichtung.

Benutzer anlegen

Um zu verhindern dass andere Benutzer im System Zugriff auf die Daten haben, legen wir einen neuen Benutzer für den Betrieb der Proton Mail Bridge an:

1
sudo adduser protonbridge

Ein Passwort muss nicht unbedingt vergeben werden, weil wir den Benutzer anschließend für den direkten Login sperren werden. Nur root soll in den Benutzer wechseln können. Dazu führen wir nach der Erstellung des Benutzers folgenden Befehl aus:

1
sudo usermod -L protonbridge

Jetzt nur noch in den Benutzer wechseln, damit es weitergehen kann:

1
sudo machinectl shell --uid protonbridge
Hinweis
Sollte machinectl nicht verfügbar sein, musst du systemd-container nachinstallieren: sudo apt install systemd-container

GPG-Key

Wir sind jetzt unter dem Benutzer protonbridge unterwegs und müssen als ersten Schritt einen GPG-Key anlegen. Dieser wird dann später vom Passwortmanager pass genutzt, um die Daten zu verschlüsseln. Dazu starten wir den Assistenten zur Keyerstellung mit nachfolgendem Befehl und beantworten die einzelnen Schritte wie unten angegeben:

1
gpg --full-generate-key
  • Key type: (1) RSA and RSA
  • Keysize: 4096
  • Key is valid for: 0 (= key does not expire)
  • Dies muss dann nochmal explizit bestätigt werden: y
  • Real Name: Pass for Proton Bridge (kann frei vergeben werden)
  • Email address: Kann leer bleiben
  • Comment: Kann leer bleiben
  • Abschließend nochmal mit “O” für (O)kay bestätigen. Wenn dass System auf deutsch steht kann es ggf. auch ein “F” für (F)ertig sein.
  • Dann kommt 2x eine Passwortabfrage. Der Key benötigt keine Passwortsicherung, deswegen einfach leer lassen und mit ENTER bestätigen, das muss man dann auch jeweils nochmal mit “Yes, protection is not needed” bestätigen.

Damit ist der Key fertig erstellt.

pass initialisieren

Nachdem wir jetzt einen GPG-Schlüssel haben, können wir den Passwortmanager pass mit diesem Schlüssel initialisieren. Dazu lassen wir uns zunächst alle verfügbaren Schlüssel von gpg anzeigen:

1
gpg --list-keys

Ausgabe:

1
2
3
4
5
6
7
gpg --list-keys
/home/protonbridge/.gnupg/pubring.kbx
-------------------------------------
pub   rsa4096 2025-02-21 [SC]
      F37FAF340EFDFA881669F74CEB8571456FE77F8A
uid           [ultimate] Pass for Proton Bridge
sub   rsa4096 2025-02-21 [E]

Die lange kryptische Zeichenkette “F37FAF340EFDFA881669F74CEB8571456FE77F8A” des Schlüssel benötigen wir zur Initialisierung von pass mit:

1
pass init F37FAF340EFDFA881669F74CEB8571456FE77F8A

Mehr Beachtung müssen wir diesem Tool dann auch schon gar nicht mehr schenken.

Erster Login

Damit sind jetzt alle Voraussetzungen geschaffen, um die Proton Mail Bridge zu starten. Wir sind weiterhin als Benutzer protonbridge unterwegs und führen nachfolgenden Befehl aus:

1
protonmail-bridge --cli

Wir befinden uns jetzt direkt in der interaktiven Shell der Bridge und können dort Befehle ausführen. Die Bridge läuft jetzt im Vordergrund und wird beim Verlassen auch direkt wieder beendet, aber darum kümmern wir uns in einem späteren Schritt. Die Ausgabe sollte jetzt ungefähr so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
protonmail-bridge --cli
WARN[Feb 22 11:23:58.274] Failed to add test credentials to keychain    error="failed to open dbus connection: exec: \"dbus-launch\": executable file not found in $PATH" helper="*keychain.SecretServiceDBusHelper"
WARN[Feb 22 11:23:58.403] no vault key found, generating new            error="could not get keychain item: credentials not found in native keychain"

            Welcome to Proton Mail Bridge interactive shell
                              ___....___
    ^^                __..-:'':__:..:__:'':-..__
                  _.-:__:.-:'':  :  :  :'':-.:__:-._
                .':.-:  :  :  :  :  :  :  :  :  :._:'.
             _ :.':  :  :  :  :  :  :  :  :  :  :  :'.: _
            [ ]:  :  :  :  :  :  :  :  :  :  :  :  :  :[ ]
            [ ]:  :  :  :  :  :  :  :  :  :  :  :  :  :[ ]
   :::::::::[ ]:__:__:__:__:__:__:__:__:__:__:__:__:__:[ ]:::::::::::
   !!!!!!!!![ ]!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!![ ]!!!!!!!!!!!
   ^^^^^^^^^[ ]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[ ]^^^^^^^^^^^
            [ ]                                        [ ]
            [ ]                                        [ ]
      jgs   [ ]                                        [ ]
    ~~^_~^~/   \~^-~^~ _~^-~_^~-^~_^~~-^~_~^~-~_~-^~_^/   \~^ ~~_ ^
>>>

Mit help könnt ihr euch alle verfügbaren Befehle anzeigen lassen.

Wir loggen uns jetzt in unseren Proton Account ein, dazu reicht die Eingabe von

1
login

gefolgt von der Taste ENTER. Ihr werdet dann dazu aufgefordert, den Proton “Username” anzugeben, das entspricht der Email-Adresse eures Accounts. Danach erfolgt die Eingabe des Passworts und wenn aktiviert, die des Zwei-Faktor-Codes.

Bei einem erfolgreichen Login beginnt die Bridge dann mit der Synchronisierung eures Email-Postfachs, diesen Prozess müssen wir jetzt einmal abwarten, bevor es weitergehen kann:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> login
Username: username@proton.me
Password: 
Authenticating ... 
Two factor code: 111111
Account username was added successfully.
>>> A sync has begun for username.
Sync (username): 0.6% (Elapsed: 0.3s, ETA: 56.1s)
[...]
A sync has finished for username.

Sobald die Synchronisation abgeschlossen ist könnt ihr euch mit list alle verbundenen Accounts anzeigen lassen. Wichtiger jedoch ist folgender Befehl:

1
info

Das sind die IMAP- und SMTP-Verbindungsdaten, die ihr dann für euer externes Mailprogramm oder Tool benötigt, deswegen kann man sich diese schonmal irgendwo sicher zwischenspeichern.

Mit exit verlassen und beenden wir die Bridge nun und machen mit der Einrichtung des systemd-Dienstes weiter.

systemd Dienst

Die Proton Mail Bridge kann ohne GUI von sich aus nicht als Daemon laufen, sodass sie für einen im Hintergrund laufenden Dienst ungeeignet ist. Deswegen nehmen wir das Tool tmux zur Hilfe, mit der man Sessions im Hintergrund laufen lassen kann.

Für die nachfolgenden Schritte sind root-Berechtigungen (sudo) notwendig, deswegen verlassen wir den Benutzer protonbridge jetzt mit exit.

Hilfsskript anlegen

Wir benötigen ein Hilfsskript, dass die Kommandos start/stop/status versteht und dann entsprechende tmux-Befehle ausführt. Also legen wir erstmal einen Ordner für das Skript an

1
sudo mkdir /var/lib/protonbridge

um direkt danach das Skript dort zu platzieren:

1
sudo nano /var/lib/protonbridge/protonbridge.sh

Der Inhalt sieht folgendermaßen aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

case "$1" in
  start)
    tmux new-session -d -s protonbridge protonmail-bridge --cli
    echo "Dienst gestartet."
    ;;
  status)
    if tmux has-session -t protonbridge; then
      echo "Proton Mail Bridge Dienst läuft."
    else
      echo "Proton Mail Bridge Dienst läuft NICHT."
    fi
    ;;
  stop)
    tmux kill-session -t protonbridge
    echo "Dienst gestoppt."
    ;;
  *)
    echo "Unbekannter Befehl: $1"
    exit 1
  ;;
esac

Speichern und Beenden mit STRG + O -> ENTER -> STRG + X (Mac: control statt STRG).

Jetzt benötigt das Skript nur noch Ausführungsberechtigungen:

1
sudo chmod +x /var/lib/protonbridge/protonbridge.sh

systemd Service

Ein neu zu erstellender systemd-Service soll nun das soeben angelegte Skript nutzen. Um den Service anzulegen, führen wir den nachfolgenden Befehl aus:

1
sudo systemctl edit protonbridge.service --full --force

Darin muss dann folgender Inhalt eingefügt werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Unit]
Description=Proton Mail Bridge Service
After=network.target

[Service]
Type=oneshot
User=protonbridge
ExecStart=/var/lib/protonbridge/protonbridge.sh start
ExecStop=/var/lib/protonbridge/protonbridge.sh stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Speichern und Beenden mit STRG + O -> ENTER -> STRG + X (Mac: control statt STRG).

Bei jeder Änderung an systemd-Services benötigen wir den Befehl:

1
sudo systemctl daemon-reload

Wir aktivieren den neuen Service und starten ihn auch direkt. Durch die Aktivierung startet er bei einem Neustart des Systems von selbst wieder mit:

1
sudo systemctl enable protonbridge.service --now

Die Proton Mail Bridge nutzt die Ports 1143 und 1025 (nur lokal erreichbar). Um sicherzustellen dass die Bridge korrekt gestartet wurde, prüfen wir einfach ob einer dieser Ports geöffnet wurde:

1
sudo ss -tulpn | grep 1025

Wenn die Ausgabe des Befehls nicht leer ist, ist der Port geöffnet. Ebenfalls kann man erkennen, dass das Programm “bridge” den Port belegt:

1
2
ss -tulpn | grep 1025
tcp   LISTEN 0      4096       127.0.0.1:1025       0.0.0.0:*    users:(("bridge",pid=60787,fd=9))

Laufende Bridge nutzen

Falls ihr nochmal an die interaktive Shell der im Hintergrund laufenden Bridge müsst, um euch zum Beispiel mit dem Befehl info nochmal die Logindaten anzeigen zu lassen, so ist dies kein Problem. Da das Programm in einer tmux-Session im Hintergrund läuft, kann man diese auch ohne Probleme zur Laufzeit nach vorne holen.

Zunächst müsst ihr dafür in den Benutzer wechseln, unter der die Bridge läuft:

1
sudo machinectl shell --uid protonbridge

Mit tmux list-sessions kann man sich alle aktuell laufenden Sessions anzeigen lassen, wenn man den Namen auch so schon kennt kann der auch direkt eingegeben werden. Um nun in die Session zu springen, reicht folgender Befehl:

1
tmux a -t protonbridge
Achtung!
Wenn ihr in der Bridge seid, nicht mit exit verlassen, da ihr damit sonst das Programm beendet.

Um die tmux-Session wieder zu verlassen ohne sie zu beenden, müsst ihr die Tastenkombination “STRG + b”, loslassen, dann “d” verwenden. (Mac: control statt STRG).

Abschluss

Die Proton Mail Bridge läuft jetzt automatisch im Hintergrund mit und ermöglicht den Zugriff auf das Proton Mail Postfach über jedes normale Email-Tool. Die Bridge aktualisiert sich auch automatisch im Hintergrund, diese Funktion ist standardmäßig aktiv und kann sonst über die interaktive Shell der Bridge angepasst werden. Damit ist es jetzt auch ohne weiteres möglich, mit einem Tool wie zum Beispiel imapsync eine lokale Kopie aller Mails anzulegen und diese automatisch aktuell zu halten.

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy