Kopano to grommunio HowTo: Unterschied zwischen den Versionen
(99 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 8: | Zeile 8: | ||
= Konfiguration = | = Konfiguration = | ||
Kopano Core ist bei mir als Applikation auf meinem UCS File- und Mailserver installiert. Die Benutzerkonten und deren Konfiguration werden von UCS verwaltet und stehen per LDAP zur Verfügung. | Kopano Core ist bei mir als Applikation auf meinem UCS File- und Mailserver installiert. Die Benutzerkonten und deren Konfiguration werden von UCS verwaltet und stehen per LDAP zur Verfügung. | ||
<pre># mein UCS-Kopano Server | |||
kopano_server=ucsmail | |||
echo "kopano_server=ucsmail" >> ~/.bashrc | |||
# ssh connections without prompts | |||
ssh-keygen | |||
ssh-copy-id $kopano_server | |||
# mount /var/lib/kopano/attachments per sshfs | |||
if [ -e /etc/debian_version ] then | |||
apt install sshfs screen | |||
else | |||
zypper in sshfs # (grommunio app/iso installation) | |||
fi | |||
mkdir -p /mnt/kopano_attachments | |||
sshfs $kopano_server:/var/lib/kopano/attachments /mnt/kopano_attachments | |||
</pre> | |||
== Zertifikate == | |||
Falls ein '''[https://help.univention.com/t/ssl-zertifikat-und-dns-alias/5780/7 Server Zertifikat von UCS]''' für den '''grommunio''' server erzeugt wurde kann das verwendet werden. | |||
Ich erstelle hier ein neues Zertifikat für den grommunio Server, der als DNS-Alternativen jeweils '''autodiscover''' (Outlook) und '''autoconfig''' (Android) Einträge für jede meiner Email Domains enthält. Damit erfolgt die Mail-Client Konfiguration automatisch, sofern der Rechner sich in einem '''lokalem''' Netzsegment befindet. | |||
Background:<br> | |||
Meine Emails werden extern gehostet, ich importiere sie per Fetchmail. Daher bin ich nicht in der Lage diese Autodiscover/Autoconf Einträge im (externen) DNS meines Hosters zu erstellen. Die entsprechende '''lokale DNS Auflösung''' übernimmt mein '''Unbound DNS''' Server mittels '''Overwrite''' Einträgen, welche auf den grommunio Server verweisen. Daher müssen diese DNS Alias Namen in dessen Zertifikat vorhanden sein. | |||
<pre>ssh ucs # UCS Master! | |||
univention-certificate new -name grommunio.domain.de | |||
cd /etc/univention/ssl/grommunio.domain.de | |||
# add DNS Aliases | |||
vi openssl.cnf | |||
# subjectAltName = DNS:grommunio.domain.de, DNS:grommunio | |||
# add all your email domains autodiscover/autoconfig entries: DNS:autodiscover.email_domain.de, DNS:autoconfig.email_domain.de | |||
DEFAULT_CRL_DAYS="$(/usr/sbin/univention-config-registry get ssl/crl/validity)" | |||
DEFAULT_DAYS="$(/usr/sbin/univention-config-registry get ssl/default/days)" | |||
DEFAULT_MD="$(/usr/sbin/univention-config-registry get ssl/default/hashfunction)" | |||
DEFAULT_BITS="$(/usr/sbin/univention-config-registry get ssl/default/bits)" | |||
export DEFAULT_MD DEFAULT_BITS DEFAULT_CRL_DAYS DEFAULT_DAYS | |||
openssl req -new -config openssl.cnf -key private.key -out req.pem | |||
univention-certificate renew -name grommunio.domain.de -days $DEFAULT_DAYS | |||
</pre> | |||
Damit funktioniert die Anmeldung am Webinterface auch per LDAP mit starttls, ansonsten nur LDAP ohne starttls oder halt mit SQL Accounts. | |||
<pre> | |||
cd /etc/grommunio-common/ssl | |||
scp $kopano_server:/etc/univention/ssl/grommunio/cert.pem server-bundle.pem | |||
scp $kopano_server:/etc/univention/ssl/grommunio/private.key server.key | |||
chown gromox:gromox server* | |||
chmod 660 server* | |||
# Root CA | |||
if [ -e /etc/debian_version ] then | |||
scp $kopano_server:/etc/univention/ssl/ucsCA/CAcert.pem /usr/local/share/ca-certificates/my-custom-ca/ | |||
else | |||
# SuSE appliance location | |||
scp $kopano_server:/etc/univention/ssl/ucsCA/CAcert.pem /etc/pki/trust/anchors/ | |||
fi | |||
update-ca-certificates | |||
systemctl restart nginx | |||
# autodiscover Eintrag testen | |||
PASS='email_passwort' gromox-dscli -ve user@domainname | |||
</pre> | |||
== LDAP == | == LDAP == | ||
Die LDAP Konfiguration kann mit dem UCS Template im Webinterface vorgenommen werden. | |||
<pre> | Ich übernehme einige Kopano Werte: | ||
ssh $kopano_server grep -e ^ | <pre> | ||
ssh $kopano_server grep -e ^ldap_uri -e ^ldap_bind -e ^ldap_search_base -e ^ldap_user_search -e ^ldap_group_search /etc/kopano/ldap.cfg | |||
ldap_uri = ldap://ucsmail.domain.de:7389/ | ldap_uri = ldap://ucsmail.domain.de:7389/ | ||
Zeile 19: | Zeile 88: | ||
ldap_search_base = dc=domain,dc=de | ldap_search_base = dc=domain,dc=de | ||
ldap_user_search_filter = (kopanoAccount=1) | ldap_user_search_filter = (kopanoAccount=1) | ||
ldap_group_search_filter = (&(kopanoAccount=1)(objectClass=kopano-group)) | |||
# configure LDAP accordingly | # configure LDAP accordingly | ||
Zeile 25: | Zeile 95: | ||
# test: list users | # test: list users | ||
grommunio-admin ldap search | grommunio-admin ldap search | ||
ID Type E-Mail Name | |||
2222222222-11-10111-22222-3333333333 user user@domainname User Name | |||
</pre> | </pre> | ||
== Email Domains und User == | == Email Domains und User == | ||
Debian: das Anlegen einer Domain im Web-Interface schlägt direkt fehl - "Bad Request".<br> | |||
<pre> | Nicht schlimm, aber vielleicht nehme ich doch lieber die fertige Appliance auf Basis von S.u.S.E. ? | ||
Per Kommandozeile funktioniert es jedenfalls. | |||
<pre> | |||
domains=$(ssh $kopano_server ucr get mail/hosteddomains) | domains=$(ssh $kopano_server ucr get mail/hosteddomains) | ||
users=$(grommunio-admin ldap search) | users=$(grommunio-admin ldap search) | ||
Zeile 36: | Zeile 111: | ||
for domain in $domains; do | for domain in $domains; do | ||
u_cnt=$(echo "$users" | grep -c $domain) | u_cnt=$(echo "$users" | grep -c $domain) | ||
[ $u_cnt -gt 0 ] && | [ $u_cnt -gt 0 ] && grommunio-admin domain create -u $u_cnt $domain | ||
done | done | ||
Zeile 42: | Zeile 117: | ||
grommunio-admin ldap downsync -c | grommunio-admin ldap downsync -c | ||
</pre> | </pre> | ||
Der Import der User funktioniert jedenfalls auch über das Webinterface. | |||
=== Export - Import via Outlook .pst === | === Export - Import via Outlook .pst === | ||
Da ich nur 5 Konten habe, ist | Da ich nur 5 Konten habe, ist diese Methode auch nicht ganz abwegig: | ||
<pre>gromox-pff2mt /tmp/neobiker_outlook.pst | gromox-mt2exm -u neobiker@neobiker.de | <pre>gromox-pff2mt /tmp/neobiker_outlook.pst | gromox-mt2exm -u neobiker@neobiker.de | ||
Zeile 56: | Zeile 126: | ||
=== Import von Emails aus Kopano === | === Import von Emails aus Kopano === | ||
Das hat für mein Neobiker Postfach | Der Import landet (leider) in einem separatem Verzeichnis: | ||
[[Datei:Grommunio Import.jpg|mini]] | |||
Das ist nicht ganz das was ich mir für einen Import vorstelle: Jeder User muss alle seine Inhalte manuell auf dem Server in die Hauptverzeichnisse verschieben ... ? | |||
Ansonsten hat der Import prinzipiell für mein Neobiker Postfach funktioniert. | |||
<pre># gromox-kdb2mt — Utility for analysis/import of Kopano mailboxes | <pre># gromox-kdb2mt — Utility for analysis/import of Kopano mailboxes | ||
# gromox-mt2exm — Utility for importing various mail items | # gromox-mt2exm — Utility for importing various mail items | ||
mkdir -p /mnt/kopano_attachments | mkdir -p /mnt/kopano_attachments | ||
Zeile 80: | Zeile 146: | ||
# ENVIRONMENT variable is used for SQL password | # ENVIRONMENT variable is used for SQL password | ||
# either EXPORT it or write in one line with cmd | # either EXPORT it or write in one line with cmd | ||
export_mbox="gromox-kdb2mt --sql-host 127.0.0.1 --sql-port 12345 --src-attach /mnt/kopano_attachments" | |||
SQLPASS=$(ssh $kopano_server cat /etc/mysql.secret) | |||
SQLPASS=$SQLPASS $export_mbox --mbox-mro neobiker | gromox-mt2exm -u neobiker@neobiker.de | |||
kdb2mt: No ACLs will be extracted. | kdb2mt: No ACLs will be extracted. | ||
kdb Server GUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx | kdb Server GUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx | ||
Zeile 114: | Zeile 184: | ||
</pre> | </pre> | ||
== Import aller Email Konten == | === Import aller Email Konten === | ||
<pre> | <pre> | ||
export_mbox="gromox-kdb2mt --sql-host 127.0.0.1 --sql-port 12345 --src-attach /mnt/kopano_attachments" | |||
SQLPASS=$(ssh $kopano_server cat /etc/mysql.secret) | |||
# LOOP over all email accounts (except SYSTEM) | # LOOP over all email accounts (except SYSTEM) | ||
# -------------------------------------------- | # -------------------------------------------- | ||
users=$(ssh $kopano_server kopano-admin -l | awk '{print $1}' | tail -n +4 | grep -v SYSTEM) | |||
for user in $users; do | for user in ${users}; do | ||
details=$(ssh $kopano_server kopano-admin --details $user) | details=$(ssh $kopano_server kopano-admin --details $user) | ||
Zeile 130: | Zeile 200: | ||
guid=$(echo "${details}" $user | awk '/Store GUID:/ {print $3}') | guid=$(echo "${details}" $user | awk '/Store GUID:/ {print $3}') | ||
SQLPASS=$SQLPASS $export_mbox --mbox-guid $guid | gromox-mt2exm -u $email | |||
done | done | ||
Zeile 139: | Zeile 209: | ||
# unmount kopano attachments | # unmount kopano attachments | ||
umount /mnt/kopano_attachments | umount /mnt/kopano_attachments | ||
</pre> | |||
== Datenablage == | |||
Eventuell möchte ich ein separates Filesystem für die Daten verwenden.<br> | |||
Die Daten liegen unter ''/var/lib/mysql*'' und ''/var/lib/grom*'' ? | |||
<pre>grommunio:/var/lib # ls mysql* grom* | |||
grommunio-admin-api: | |||
auth-private.pem auth-public.pem | |||
grommunio-antispam: | |||
110ec84de81cc98813b71d34d42dedbc199bd687.map 65b4e39783c10c8ed89dbec4983259f22418f34d.map ea942f35f2c82e84bdb7b8ceb34537f7dbe986eb.map stats.ucl | |||
2368c73b937d98513ed72c4b04f4247bda43fdb5.map 877aa38dd77ed707d20b2f77d46b905b69a6295a.map f3933e67d5f9574a9eaf78cd0a8e99140ecc502e.map | |||
2e66b2415ec9b99aaa155761c211e51def12016e.map 8fe64ecd161a46f91a78ece93609cb863f9f42f2.map rspamd.rrd | |||
3b1eab0b21b32c970b8fae4a9010a539879368e3.map cb5a8189726ac3a8880e1c44ed6220c6d794521b.map rspamd.sock | |||
grommunio-dav: | |||
grommunio-files: | |||
apps-external config data sessions tmp | |||
grommunio-web: | |||
session sqlite-index tmp | |||
gromox: | |||
domain queue timer.txt user | |||
mysql: | |||
aria_log.00000001 ddl_recovery.log grommunio ib_buffer_pool ib_logfile0 multi-master.info mysql_upgrade_info sys | |||
aria_log_control grofiles grommunio.pid ibdata1 ibtmp1 mysql performance_schema test | |||
mysql-files: | |||
</pre> | </pre> | ||
== Postfix == | == Postfix == | ||
Mail Delivery Agent (MDA) Konfiguration | Mail Delivery Agent (MDA) Konfiguration | ||
* zum versenden von Emails | * zum versenden von Emails (external relay host) | ||
* Mailaddress rewritings | * Mailaddress rewritings (neobiker@local -> neobiker@neobiker.de) | ||
Vergleich der wichtigsten Konfigurationsparameter | |||
<pre>grep -v ^# /etc/postfix/main.cf | grep [[:alnum:]] | sed -e 's/^\W+//g' | sort > postfix_config_sorted_grommunio | |||
ssh $kopano_server "grep -v ^# /etc/postfix/main.cf | grep [[:alnum:]] | sed -e 's/^\W+//g' | sort" > postfix_config_sorted_kopano | |||
diff -y postfix_config | |||
... | |||
# most relevant entries (differs/unconfigured) | |||
masquerade_domains = $mydomain | |||
content_filter = smtp-amavis:[127.0.0.1]:10024 | |||
disable_vrfy_command = no | |||
mailbox_size_limit | |||
message_size_limit | |||
relay_domains = $mydestination | |||
relayhost = smtp.mailhoster.de | |||
smtpd_tls_auth_only = yes | |||
smtpd_tls_cert_file = /etc/univention/ssl/ucsmail... | |||
smtpd_use_tls = yes | |||
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth | |||
smtp_sasl_security_options = noanonymous | |||
</pre> | </pre> | ||
Vermutlich muss ich mich nur um den externen Relay Host kümmern. | |||
== Mail Relay Server == | === Mail Relay Server === | ||
Postfix can use a mail relay server. | Postfix can use a mail relay server. | ||
<pre>ucr get mail/relayhost</pre> | <pre>ssh $kopano_server ucr get mail/relayhost</pre> | ||
<pre># authentification on relay host | <pre># authentification on relay host | ||
/etc/postfix/smtp_auth | # format: FQDN-Relayhost username:password | ||
ssh $kopano_server cat /etc/postfix/smtp_auth >> /etc/postfix/sasl_passwd | |||
vi /etc/postfix/main.cf | |||
relayhost = [smtp.provider.de] | |||
smtp_sasl_auth_enable = yes | |||
smtp_sasl_security_options = noanonymous | |||
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd` | |||
smtp_use_tls = yes | |||
postmap /etc/postfix/ | postmap /etc/postfix/sasl_passwd | ||
systemctl restart postfix | |||
</pre> | </pre> | ||
Das hat funktioniert: | |||
* Email nach EXTERN ging raus. | |||
* Email nach intern -> keine Postfix Aktion (nur intern innerhalb grommunio) | |||
Doku grommunio: [https://docs.grommunio.com/admin/administration.html#adding-a-file relayhost] | |||
Eine andere Info dazu [https://andersgood.de/kurz-notiert/smtp-relayhost-in-grommunio-konfigurieren hier]. | |||
'''ACHTUNG''': Appliance (SuSE) -> Ich vermute stark, dass ein versehentliches ''config.postfix'' auf dem server die Konfiguration zerschiesst, da man das wohl in der Setupdatei /etc/sysconfig/postfix (SuSE) eintragen sollte. | |||
Umso unverständlicher, warum die Doku zu Relay Server bei grommunio so schwach ist. | |||
=== Mail Address rewritings === | |||
Nix zu tun, denke ich. | |||
== Fetchmail == | == Fetchmail == | ||
Zeile 180: | Zeile 322: | ||
cat /etc/fetchmailrc | cat /etc/fetchmailrc | ||
</pre> | </pre> | ||
== Proxy Konfiguration (Nginx) == | |||
Ich habe für jede Email Domain einen deSEC (DynDNS) Eintrag auf mein Internetgateway (Nginx auf OPNSense) erstellt. | |||
Dafür verwende ich ein Let's Encrypt Zertifikat, welches die Domains als DNS Alternate Names beinhaltet. | |||
Das Webinterface von grommunio ist unter ''/web'' erreichbar, während in der Übergangszeit Kopano unter ''/webapp'' erreichbar bleibt. | |||
Active Sync für Mobile Devices (URL ist identisch) kann damit immerhin pro Email Domain separat umgestellt werden. Outlook ist bei mir derzeit nur intern erreichbar, also extern nur über VPN (oder halt das Webinterface). |
Aktuelle Version vom 7. Januar 2024, 14:23 Uhr
Installation auf Debian 12
Eine fertige grommunio Appliance ist auf Basis von S.u.S.E. erstellt und steht u.a. als ISO download zur Verfügung. Da ich derzeit ausschliesslich Debian basierte Systeme verwende, bevorzuge ich eine grommunio Installation auf Debian 12 (bookworm).
Im grommunio Forum findet sich ein Diskussionsthread für die grommunio Installation auf Debian 12 durch ein Script. Diese läuft auf einer neu erstellten VM auf Proxmox Server fehlerfrei durch. In einem LXC Container gab es Probleme, u.a. klemmte der POP3 Service.
Im Anschluss an das Installationsskript habe ich noch folgendes Script unter Additions - Fix Grommunio Admin Live Status page ausgeführt, welches ebenfalls funktionierte und die entsprechende Seite im Web Interface reparierte.
Konfiguration
Kopano Core ist bei mir als Applikation auf meinem UCS File- und Mailserver installiert. Die Benutzerkonten und deren Konfiguration werden von UCS verwaltet und stehen per LDAP zur Verfügung.
# mein UCS-Kopano Server kopano_server=ucsmail echo "kopano_server=ucsmail" >> ~/.bashrc # ssh connections without prompts ssh-keygen ssh-copy-id $kopano_server # mount /var/lib/kopano/attachments per sshfs if [ -e /etc/debian_version ] then apt install sshfs screen else zypper in sshfs # (grommunio app/iso installation) fi mkdir -p /mnt/kopano_attachments sshfs $kopano_server:/var/lib/kopano/attachments /mnt/kopano_attachments
Zertifikate
Falls ein Server Zertifikat von UCS für den grommunio server erzeugt wurde kann das verwendet werden.
Ich erstelle hier ein neues Zertifikat für den grommunio Server, der als DNS-Alternativen jeweils autodiscover (Outlook) und autoconfig (Android) Einträge für jede meiner Email Domains enthält. Damit erfolgt die Mail-Client Konfiguration automatisch, sofern der Rechner sich in einem lokalem Netzsegment befindet.
Background:
Meine Emails werden extern gehostet, ich importiere sie per Fetchmail. Daher bin ich nicht in der Lage diese Autodiscover/Autoconf Einträge im (externen) DNS meines Hosters zu erstellen. Die entsprechende lokale DNS Auflösung übernimmt mein Unbound DNS Server mittels Overwrite Einträgen, welche auf den grommunio Server verweisen. Daher müssen diese DNS Alias Namen in dessen Zertifikat vorhanden sein.
ssh ucs # UCS Master! univention-certificate new -name grommunio.domain.de cd /etc/univention/ssl/grommunio.domain.de # add DNS Aliases vi openssl.cnf # subjectAltName = DNS:grommunio.domain.de, DNS:grommunio # add all your email domains autodiscover/autoconfig entries: DNS:autodiscover.email_domain.de, DNS:autoconfig.email_domain.de DEFAULT_CRL_DAYS="$(/usr/sbin/univention-config-registry get ssl/crl/validity)" DEFAULT_DAYS="$(/usr/sbin/univention-config-registry get ssl/default/days)" DEFAULT_MD="$(/usr/sbin/univention-config-registry get ssl/default/hashfunction)" DEFAULT_BITS="$(/usr/sbin/univention-config-registry get ssl/default/bits)" export DEFAULT_MD DEFAULT_BITS DEFAULT_CRL_DAYS DEFAULT_DAYS openssl req -new -config openssl.cnf -key private.key -out req.pem univention-certificate renew -name grommunio.domain.de -days $DEFAULT_DAYS
Damit funktioniert die Anmeldung am Webinterface auch per LDAP mit starttls, ansonsten nur LDAP ohne starttls oder halt mit SQL Accounts.
cd /etc/grommunio-common/ssl scp $kopano_server:/etc/univention/ssl/grommunio/cert.pem server-bundle.pem scp $kopano_server:/etc/univention/ssl/grommunio/private.key server.key chown gromox:gromox server* chmod 660 server* # Root CA if [ -e /etc/debian_version ] then scp $kopano_server:/etc/univention/ssl/ucsCA/CAcert.pem /usr/local/share/ca-certificates/my-custom-ca/ else # SuSE appliance location scp $kopano_server:/etc/univention/ssl/ucsCA/CAcert.pem /etc/pki/trust/anchors/ fi update-ca-certificates systemctl restart nginx # autodiscover Eintrag testen PASS='email_passwort' gromox-dscli -ve user@domainname
LDAP
Die LDAP Konfiguration kann mit dem UCS Template im Webinterface vorgenommen werden. Ich übernehme einige Kopano Werte:
ssh $kopano_server grep -e ^ldap_uri -e ^ldap_bind -e ^ldap_search_base -e ^ldap_user_search -e ^ldap_group_search /etc/kopano/ldap.cfg ldap_uri = ldap://ucsmail.domain.de:7389/ ldap_bind_user = cn=ucsmail,cn=dc,cn=computers,dc=domain,dc=de ldap_bind_passwd = xxxxxxxxxxxxxx ldap_search_base = dc=domain,dc=de ldap_user_search_filter = (kopanoAccount=1) ldap_group_search_filter = (&(kopanoAccount=1)(objectClass=kopano-group)) # configure LDAP accordingly grommunio-admin ldap configure # test: list users grommunio-admin ldap search ID Type E-Mail Name 2222222222-11-10111-22222-3333333333 user user@domainname User Name
Email Domains und User
Debian: das Anlegen einer Domain im Web-Interface schlägt direkt fehl - "Bad Request".
Nicht schlimm, aber vielleicht nehme ich doch lieber die fertige Appliance auf Basis von S.u.S.E. ?
Per Kommandozeile funktioniert es jedenfalls.
domains=$(ssh $kopano_server ucr get mail/hosteddomains) users=$(grommunio-admin ldap search) # create email domains for domain in $domains; do u_cnt=$(echo "$users" | grep -c $domain) [ $u_cnt -gt 0 ] && grommunio-admin domain create -u $u_cnt $domain done # import and sync LDAP users grommunio-admin ldap downsync -c
Der Import der User funktioniert jedenfalls auch über das Webinterface.
Export - Import via Outlook .pst
Da ich nur 5 Konten habe, ist diese Methode auch nicht ganz abwegig:
gromox-pff2mt /tmp/neobiker_outlook.pst | gromox-mt2exm -u neobiker@neobiker.de
Import von Emails aus Kopano
Der Import landet (leider) in einem separatem Verzeichnis:
Das ist nicht ganz das was ich mir für einen Import vorstelle: Jeder User muss alle seine Inhalte manuell auf dem Server in die Hauptverzeichnisse verschieben ... ?
Ansonsten hat der Import prinzipiell für mein Neobiker Postfach funktioniert.
# gromox-kdb2mt — Utility for analysis/import of Kopano mailboxes # gromox-mt2exm — Utility for importing various mail items mkdir -p /mnt/kopano_attachments sshfs $kopano_server:/var/lib/kopano/attachments /mnt/kopano_attachments # detach (CTRL-A d) the SSH tunnel to SQL server (who only accepts localhost conections) screen ssh -L 12345:localhost:3306 "root@${kopano_server}" # EXAMPLE for user neobiker = neobiker@neobiker.de # ------------------------------------------------ # ENVIRONMENT variable is used for SQL password # either EXPORT it or write in one line with cmd export_mbox="gromox-kdb2mt --sql-host 127.0.0.1 --sql-port 12345 --src-attach /mnt/kopano_attachments" SQLPASS=$(ssh $kopano_server cat /etc/mysql.secret) SQLPASS=$SQLPASS $export_mbox --mbox-mro neobiker | gromox-mt2exm -u neobiker@neobiker.de kdb2mt: No ACLs will be extracted. kdb Server GUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx Database schema is kdb-118 Store GUID for MRO "neobiker": xxxxxxxxxxxxxxxxxxxxxxxxx Processing folder "" (7 elements)... Processing folder "IPM_SUBTREE" (19 elements)... Processing folder "Posteingang" (791 elements)... Processing folder "Postausgang" (0 elements)... Processing folder "Gelöschte Objekte" (1 elements)... Processing folder "Gesendete Objekte" (1 elements)... Processing folder "Kontakte" (0 elements)... Processing folder "Kalender" (1 elements)... Processing folder "Entwürfe" (0 elements)... Processing folder "Journal" (0 elements)... Processing folder "Notizen" (0 elements)... Processing folder "Aufgaben" (0 elements)... Processing folder "Junk E-Mail" (44 elements)... Processing folder "RSS Feeds" (0 elements)... Processing folder "Konversationseinstellungen" (0 elements)... Processing folder "Quickstep Einstellungen" (0 elements)... Processing folder "Vorgeschlagene Kontakte" (0 elements)... Processing folder "Spambox" (0 elements)... Processing folder "Junk-E-Mail" (0 elements)... Processing folder "Gelöschte Elemente" (0 elements)... Processing folder "Gesendete Elemente" (0 elements)... Processing folder "IPM_COMMON_VIEWS" (2 elements)... Processing folder "IPM_VIEWS" (0 elements)... Processing folder "FINDER_ROOT" (0 elements)... Processing folder "Verknüpfung" (0 elements)... Processing folder "Schedule" (0 elements)... Processing folder "Freebusy Data" (1 elements)...
Import aller Email Konten
export_mbox="gromox-kdb2mt --sql-host 127.0.0.1 --sql-port 12345 --src-attach /mnt/kopano_attachments" SQLPASS=$(ssh $kopano_server cat /etc/mysql.secret) # LOOP over all email accounts (except SYSTEM) # -------------------------------------------- users=$(ssh $kopano_server kopano-admin -l | awk '{print $1}' | tail -n +4 | grep -v SYSTEM) for user in ${users}; do details=$(ssh $kopano_server kopano-admin --details $user) email=$(echo "${details}" $user | awk '/Emailaddress:/ {print $2}') guid=$(echo "${details}" $user | awk '/Store GUID:/ {print $3}') SQLPASS=$SQLPASS $export_mbox --mbox-guid $guid | gromox-mt2exm -u $email done # stop ssh tunnel -> exit ssh on kopano server screen -r # unmount kopano attachments umount /mnt/kopano_attachments
Datenablage
Eventuell möchte ich ein separates Filesystem für die Daten verwenden.
Die Daten liegen unter /var/lib/mysql* und /var/lib/grom* ?
grommunio:/var/lib # ls mysql* grom* grommunio-admin-api: auth-private.pem auth-public.pem grommunio-antispam: 110ec84de81cc98813b71d34d42dedbc199bd687.map 65b4e39783c10c8ed89dbec4983259f22418f34d.map ea942f35f2c82e84bdb7b8ceb34537f7dbe986eb.map stats.ucl 2368c73b937d98513ed72c4b04f4247bda43fdb5.map 877aa38dd77ed707d20b2f77d46b905b69a6295a.map f3933e67d5f9574a9eaf78cd0a8e99140ecc502e.map 2e66b2415ec9b99aaa155761c211e51def12016e.map 8fe64ecd161a46f91a78ece93609cb863f9f42f2.map rspamd.rrd 3b1eab0b21b32c970b8fae4a9010a539879368e3.map cb5a8189726ac3a8880e1c44ed6220c6d794521b.map rspamd.sock grommunio-dav: grommunio-files: apps-external config data sessions tmp grommunio-web: session sqlite-index tmp gromox: domain queue timer.txt user mysql: aria_log.00000001 ddl_recovery.log grommunio ib_buffer_pool ib_logfile0 multi-master.info mysql_upgrade_info sys aria_log_control grofiles grommunio.pid ibdata1 ibtmp1 mysql performance_schema test mysql-files:
Postfix
Mail Delivery Agent (MDA) Konfiguration
- zum versenden von Emails (external relay host)
- Mailaddress rewritings (neobiker@local -> neobiker@neobiker.de)
Vergleich der wichtigsten Konfigurationsparameter
grep -v ^# /etc/postfix/main.cf | grep [[:alnum:]] | sed -e 's/^\W+//g' | sort > postfix_config_sorted_grommunio ssh $kopano_server "grep -v ^# /etc/postfix/main.cf | grep [[:alnum:]] | sed -e 's/^\W+//g' | sort" > postfix_config_sorted_kopano diff -y postfix_config ... # most relevant entries (differs/unconfigured) masquerade_domains = $mydomain content_filter = smtp-amavis:[127.0.0.1]:10024 disable_vrfy_command = no mailbox_size_limit message_size_limit relay_domains = $mydestination relayhost = smtp.mailhoster.de smtpd_tls_auth_only = yes smtpd_tls_cert_file = /etc/univention/ssl/ucsmail... smtpd_use_tls = yes smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth smtp_sasl_security_options = noanonymous
Vermutlich muss ich mich nur um den externen Relay Host kümmern.
Mail Relay Server
Postfix can use a mail relay server.
ssh $kopano_server ucr get mail/relayhost
# authentification on relay host # format: FQDN-Relayhost username:password ssh $kopano_server cat /etc/postfix/smtp_auth >> /etc/postfix/sasl_passwd vi /etc/postfix/main.cf relayhost = [smtp.provider.de] smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd` smtp_use_tls = yes postmap /etc/postfix/sasl_passwd systemctl restart postfix
Das hat funktioniert:
- Email nach EXTERN ging raus.
- Email nach intern -> keine Postfix Aktion (nur intern innerhalb grommunio)
Doku grommunio: relayhost
Eine andere Info dazu hier.
ACHTUNG: Appliance (SuSE) -> Ich vermute stark, dass ein versehentliches config.postfix auf dem server die Konfiguration zerschiesst, da man das wohl in der Setupdatei /etc/sysconfig/postfix (SuSE) eintragen sollte. Umso unverständlicher, warum die Doku zu Relay Server bei grommunio so schwach ist.
Mail Address rewritings
Nix zu tun, denke ich.
Fetchmail
Fetchmail Konfiguration zum abholen der Emails von meinem Email Provider. Emails werden entweder von UCS oder grommunio abgeholt und and Postfix übergeben!
Auf UCS für jeden Benutzer deaktivieren
-> Advanced settings ‣ Remote mail retrieval (single)
oder Postfix auf UCS zur weiterleitung an grommunio konfigurieren.
systemctl stop fetchmail systemctl disable fetchmail ucr set fetchmail/autostart=false # fetchmail config and passwords cat /etc/fetchmailrc
Proxy Konfiguration (Nginx)
Ich habe für jede Email Domain einen deSEC (DynDNS) Eintrag auf mein Internetgateway (Nginx auf OPNSense) erstellt. Dafür verwende ich ein Let's Encrypt Zertifikat, welches die Domains als DNS Alternate Names beinhaltet. Das Webinterface von grommunio ist unter /web erreichbar, während in der Übergangszeit Kopano unter /webapp erreichbar bleibt. Active Sync für Mobile Devices (URL ist identisch) kann damit immerhin pro Email Domain separat umgestellt werden. Outlook ist bei mir derzeit nur intern erreichbar, also extern nur über VPN (oder halt das Webinterface).