B1gMail

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

b1gMail

b1gMail ist ein E-Mail-System, das in der Programmiersprache PHP und JavaScript entwickelt wird. Im Gegensatz zu den anderen Webmailer ist b1gMail darauf ausgerichtet, Besuchern eine eigene E-Mail-Adresse anbieten zu können. Es kann aber auch intern betrieben werden. Daher liefert b1gMail ein eigenes Speichersystem mit und kann somit auch auf einem Webspace laufen.

b1gMail verfügt über einen großen Funktionsumfang, wie beispielsweise Mehrsprachigkeit, Versand von E-Mail-Anhängen, volle Unterstützung für die Nachrichtenformate MIME und HTML, Kalender, Aufgabenliste, SMS-Unterstützung, umfangreiche Filterregeln sowie eingebauten Spam-Filter. Außerdem kann der Funktionsumfang von b1gMail mit Plug-ins erweitert werden.

Einrichtung

Datenbank

Zunächst benötigt b1gMail eine eigene MariaDB/MySQL-Datenbank. Auf Hostsharing läuft MariaDB, was die empfohlene Variante ist, da b1gMail MySQL 8 und höher aktuell noch nicht voll unterstützt.

Catchall-Postfach

In dem Setup wird als Empfangsmethode POP3-Gateway (Catchall) ausgewählt. Dazu muss eine Catchall E-Mail-Adresse eingerichtet werden, die alle E-Mails in einem Postfach ablegt.

Installation

In dieser Anleitung wird b1gMail in dem sub-Ordner www eingerichtet, es kann aber auch jeder andere beliebiger Ort gewählt werden.

Statt <domain.tld> setzt man die eigene Domain ein.

Folgende Kommandos sind auszuführen:

cd ~
rm -R ~/doms/<domain.tld>/subs-ssl/www
git clone https://codeberg.org/b1gMail/b1gMail.git
touch ~/b1gMail/src/serverlib/config.inc.php ~/b1gMail/src/serverlib/version.inc.php
ln -s ~/b1gMail/src ~/doms/<domain.tld>/subs-ssl/www

Anschließend wird zur webbasierte Installation gewechselt, dazu ruft man <domain.tld>/setup ruft. Sobald man auf dem Schritt E-Mail-Konfiguration landet, wählt als Empfangs-Methode POP3-Gateway (CatchAll) und als POP3-Server "localhost". Unter POP3-Benutzer und POP3-Passwort den Benutzer eintragen, der die CatchAll-E-Mail-Adresse hat. Als Versandmethode kann SMTP und als SMTP-Server sollte localhost stehen. Im nächsten Schritt die MySQL-Daten eintragen. Abschließend wird im letzten Schritt die E-Mail-Domain eingetragen und es kann ein Administrator-Passwort festgelegt werden. Erledigt!

Empfang via Pipe-Gateway

Statt POP3-Gateway können E-Mails auch an Pipe übergeben werden. Das hat gegenüber dem POP3-Gateway den Vorteil, dass b1gMail die E-Mails nicht abholen muss, sondern in Echtzeit direkt an b1gMail übergeben wird. Dazu stellt man die Empfangsmethode im Administrationsbereich unter Einstellungen -> E-Mail -> Empfang auf b1gMailServer / Pipe / Transportmap um.

im Benutzerverzeichnis, bei dem die CatchAll-E-Mail-Adresse angelegt wurde, eine .forward mit folgenden Inhalt erstellen:

"|/usr/bin/php /home/pacs/<xyz00>/doms/<domain.tld>/subs-ssl/www/interface/pipe.php"

anschließend prüfen, ob die E-Mails weiterhin zugestellt werden.

Add-On b1gMailServer

Das optionale Add-On b1gMailServer stellt POP3, IMAP und SMTP bereit. Es kann auch als MTA dienen, was aber hier nicht unterstützt wird. Es ist in C++ programmiert. Die webbasierte Administration selbst erfolgt über b1gMail mit dem Modul b1gMailServerAdmin.

Das fertige binary ist ein Installer. Das kann aber nicht genutzt werden, da es root-Rechte braucht. Daher muss b1gMailServer selbst kompiliert und einige Änderungen im Quelltext vorgenommen werden.

Installation b1gMailServer

Zuerst muss in b1gMail-Administrationsbereich unter Plugins das Modul b1gMailServer Administration PlugIn aktiviert, damit die benötigte Datenbanktabellen für b1gMailServer angelegt werden. Anschließend geht es weiter mit SSH.

cd ~
mkdir ~/b1gmailserver
mkdir ~/b1gmailserver/bin
mkdir ~/b1gmailserver/init
mkdir ~/b1gmailserver/plugins
mkdir ~/b1gmailserver/queue
mkdir ~/b1gmailserver/tls
git clone https://github.com/b1gMail/b1gMailServer.git b1gmailserver_src
cd ~/b1gmailserver_src
git checkout ubuntu-22.04-openssl-3.4.1
cd src
# Feste Pfade ersetzen, Platzhalter ersetzen und ggf. Pfad anpassen
sed -i 's|/opt/b1gmailserver|/home/pacs/<xyz00>/b1gmailserver|g' *.cpp
sed -i 's|/opt/b1gmailserver|/home/pacs/<xyz00>/b1gmailserver|g' core/*.cpp
sed -i 's|/opt/b1gmailserver|/home/pacs/<xyz00>/b1gmailserver|g' init/*
sed -i 's|/opt/b1gmailserver|/home/pacs/<xyz00>/b1gmailserver|g' core/*.h
sed -i 's|/opt/b1gmailserver|/home/pacs/<xyz00>/b1gmailserver|g' msgqueue-supervise/*.h

In CMakeLists.txt muss folgendes entfernt werden:

add_subdirectory(linux-setup-v2)

In dists/CMakeLists.txt muss folgendes entfernt werden:

add_dependencies(${NAME}-copy b1gmailserver bms-queue setup)

add_custom_target(${NAME})
add_custom_command(
  TARGET        ${NAME}
  COMMAND       ${CMAKE_SOURCE_DIR}/makeself-2.1.4/makeself.sh
    ${CMAKE_CURRENT_BINARY_DIR}/package/
    b1gmailserver-${BMS_VERSION}.${BMS_BUILD}-${BMS_ARCHNAME}.run
    "b1gMailServer ${BMS_VERSION}.${BMS_BUILD}"
    sh run-setup
)
add_dependencies(${NAME} ${NAME}-copy)

Anschließend kann b1gMailServer kompiliert werden

cmake -DCMAKE_BUILD_TYPE=Release .
make -j
cp b1gmailserver ~/b1gmailserver/bin
cp sendmail/bms-sendmail ~/b1gmailserver/bin
cp msgqueue-supervise/bms-queue ~/b1gmailserver/bin
cp pluginsdk/CLIQueueMgr.so ~/b1gmailserver/plugins
cp init/bms-queue ~/b1gmailserver/init

In ~/b1gmailserver die Datei b1gmailserver.cfg mit folgenden Inhalt erstellen und die Platzhalter ersetzen:

# b1gMailServer configuration file
mysql_host  = localhost
mysql_user  = <dbuser>
mysql_pass  = <dbpassword>
mysql_db    = <db>
user        = <xyz00>
group       = <xyz00>

Weitere optionale Parameter: https://github.com/b1gMail-OSS/b1gMail/wiki/b1gMailServer:Konfigurationsdatei

Mit ~/b1gmailserver/bin --help anschließend prüfen, ob die Hilfe ausgegeben wird.

Dienste erstellen und starten

Mitglieder, die einen Managed Webspace im Shared Hosting nutzen, müssen für ihre b1gMailServer-Installation einen "eigenen Serverdienst" beim Hostsharing-Service anmelden. Diese Option ist im Shared Hosting kostenpflichtig. Für den Serverdienst wird ein IP-Port mit dem Server vereinbart. Im Beispiel werden die Ports 19110,19143,19993,19995,19465 und 19587 genutzt. Nicht alle Ports müssen auch genutzt werden, wenn man einige der angebotene Dienste nicht genutzt werden soll.

b1gMailServer liefert im Installer standardmäßig die xinetd-Konfiguration aus und setzt dies im eigenen Installer voraus. Es ist aber möglich systemd dafür zu nutzen. Dazu muss folgendermaßen vorgegangen werden:

Für IMAP sieht es folgendermaßen aus

mkdir -p ~/.config/systemd/user/
vi  ~/.config/systemd/user/b1gmailserver-imap@.service

Der Inhalt der Datei soll sein:

[Unit]
Description=b1gMailServer IMAP Service
After=network.target

[Service]
Type=simple
ExecStart=/home/pacs/<xyz00>/b1gmailserver/bin/b1gmailserver --imap
StartLimitInterval=10s
StartLimitBurst=5

StandardInput=socket
StandardOutput=interhit

[Install]
WantedBy=multi-user.target

Weiter gehts mit

vi  ~/.config/systemd/user/b1gmailserver-imap.socket

Der Inhalt dieser Datei:

[Unit]
Description=Socket for b1gMailServer IMAP service

[Socket]
ListenStream=19143
Accept=yes

[Install]
WantedBy=sockets.target

Der IMAP-Dienst wird aktiviert mit:

systemctl --user daemon-reload
systemctl --user enable b1gmailserver-imap.socket
systemctl --user start b1gmailserver-imap.service

Für Submission, POP3 sowie POP3S und IMAPS einfach nochmal die Vorlage nehmen und entsprechend benennen. Für POP3 wird der Parameter --pop3 genutzt, bei Submission: --smtp --submission. Bei implizierten SSL/TLS-Verbindungen wird der Parameter um --ssl ergänzt.

SSL/TLS

b1gMailServer unterstützt sowohl impliziert als auch expliziertes SSL/TLS. Um SSL/TLS zu nutzen wird ein Zertifikat benötigt. Hierzu kann man ein TLS Zertifikat mit LEGO. Das löschen der Weiterleitungen wie in der verlinkten Anleitung muss übrigens nicht sein, es muss einfach nur das weitergeleitete Zielverzeichnis angegeben werden.

Anschließend

cd ~/.lego/certificates
cp <ihredomain.tld>.key ~/b1gmailserver/tls/server.key
cp <ihredomain.tld>.crt ~/b1gmailserver/tls/server.cert
cp <ihredomain.tld>.issuer.crt ~/b1gmailserver/tls/chain.cert

Leider bietet lego keine einzelne Zertifikate an (bei Zwischenzertifikate jedoch schon) und b1gMailServer erwartet bei server.cert exakt nur ein Zertifikat. Daher muss das letzte Zertifikat in server.cert mit einem Texteditor gelöscht werden. Ist man unsicher welches es ist, einfach chain.cert anschauen, es muss das Zertifikat gelöscht werden, dass bei chain.cert bereits vorhanden ist.

Signaturen-Plugin

Um das Signaturen-Plugin auch in b1gMailServer zu nutzen, muss das Plugin kompiliert und altermime installiert werden.

cd ~/b1gmailserver_src
wget ftp://ftp.b1g.de/b1gmailserver/altermime/altermime-current-x86_64.tar.gz
mkdir -p ~/b1gmailserver/3rdparty/altermime
tar --directory=/home/pacs/<xyz00>/b1gmailserver/3rdparty/altermime -xzf ~/b1gmailserver_src/altermime-current-x86_64.tar.gz
ln -s /home/pacs/<xyz00>/b1gmailserver/3rdparty/altermime/altermime ~/b1gmailserver/bin/altermime
cd ~/b1gmailserver_src/src/pluginsdk
vi CMakeLists.txt

in Datei CMakeLists.txt folgendes ergänzen:

add_library(Signature SHARED signature.cpp)
set_target_properties(Signature PROPERTIES PREFIX "")

Anschließend:

cmake -DCMAKE_BUILD_TYPE=Release .
make -j
cp Signature.so ~/b1gmailserver/plugins


TODO

SMTP/Submission: SMTP/Submission unter b1gMailServer funktioniert aktuell nicht und schlägt fehl, weil es keine Datei unter dem Ordner queue ablegen kann, evtl. weil der Warteschlangen-Manager noch fehlt.

Z-Push (experimentell)

Mit Z-Push können Clients angebunden werden, die das proprietäre Protokoll ActiveSync nutzen. Aktuell ist die Unterstützung mit b1gMail experimentell.

cd ~
git clone https://github.com/Z-Hub/Z-Push zpush
cd zpush
git checkout develop
cd src/backend
git clone https://github.com/b1gMail-OSS/zpush-b1gmail b1gmail
cd ..
ln -s ~/zpush/src ~/doms/<domain.tld>/subs-ssl/www/z-push
vi config.inc.php

In der config.inc.php dann den BACKEND_PROVIDER auf BackendB1GMail setzen. Ebenso muss der Pfad in LOGFILEDIR und STATE_DIR angepasst werden. Zum Schluss noch folgendes einfügen.

  define('B1GMAIL_DB_HOST',		'localhost');
	define('B1GMAIL_DB_USER',		'db_user');
	define('B1GMAIL_DB_PASS',		'db_password');
	define('B1GMAIL_DB_DB',			'db');
	define('B1GMAIL_DB_PREFIX',	'bm60_')

In der .htaccess unter ~/doms/<domain.tld>/subs-ssl/www folgendes einfügen.

RewriteEngine On
RewriteRule ^Microsoft-Server-ActiveSync(/.*)?$ /z-push/index.php [L]