SOGo Groupware#
Dokumentation einer Test-Konfiguration von SOGo als E-Mail-/Kalender-/Adressbuch-Server
Die Installation erfolgt auf Debian 9.x ("Stretch").
Ich nutze die SOGo-Pakete von SOGo.nu, weil die Version 3.2.6, die in Debian Stretch paketiert ist, beim Teilen von Kalendern und Adressbüchern mit anderen Nutzern keinen funktionierenden Dialog für die Vergabe von Zugriffsrechten besitzt.
Folgende Software-Komponenten müssen installiert und konfiguriert werden:
- LDAP-Server
- PostgreSQL-Datenbank
- Postfix SMTP-Server für den E-Mail-Transport
- Dovecot IMAP-Server für E-Mail Postfächer
- der SOGo-Server
- Apache-Webserver
OpenLDAP#
aptitude install slapd ldap-utils ldapvi
Das Passwort für den LDAP-Admin ist in diesem Schritt egal.
Den LDAP-Server ans das localhost-Interface binden. Dazu in der Datei /etc/default/slapd die Zeile SLAPD_SERVICES wie folgt anpassen:
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldapi:///"
Den LDAP-Server neu starten und mit netstat die Änderung kontrollieren.
systemctl restart slapd.service netstat -tlpn
Meine eigene Domain konfiguriere ich im LDAP mit dem Kommando
dpkg-reconfigure slapd
Folgende Antworten habe ich bei der Paketkonfiguration gegeben:
- OpenLDAP-Server-Konfiguration auslassen?
- Nein
- DNS-Domainname
- Meine E-Mail-Domain, also zum Beispiel example.com
- Name der Organisation
- Meine Organisation, zum Beispiel Linuxclub e.V.
- Administrator-Passwort
- Ein gutes Passwort für den LDAP-Admin, zum Beispiel Besonders-geheimes-LDAP-Passwort
- Passwort bestätigen
- Besonders-geheimes-LDAP-Passwort
- Zu verwendendes Datenbank-Backend
- MDB
- Soll die Datenbank entfernt werden, wenn slapd vollständig gelöscht wird?
- Nein
- Alte Datenbank verschieben?
- Ja
Zum Schluss erweitere ich das LDAP-Schema um die Erweiterungen des Mail-Programm qmail
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/qmail.ldif
Die Datei qmail.ldif wird vom Debian-Projekt nicht mitgeliefert. Ihr findet eine passende Version als Anlage zu dieser Wiki-Seite.
Ich benutze ldapvi zur Administation des LDAP.
Der Aufruf von ldapvi zum Bearbeiten des LDAP-Verzeichnis:
ldapvi -D cn=admin,dc=example,dc=com -d
Nach Eingabe des Passworts zu cn=admin,dc=example,dc=com bekommt man im vi das Folgende angezeigt:
0 dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Linuxclub e.V. dc: example 1 cn=admin,dc=example,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword: {SSHA}mvlu89+Yq1LBiCRl05t2hNpEH55RK2M8
Ich ergänze den Knoten ou=users und meinen ersten User-Eintrag, indem ich den Inhalt wie folgt ergänze:
0 dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Linuxclub e.V. dc: example 1 cn=admin,dc=example,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword: {SSHA}mvlu89+Yq1LBiCRl05t2hNpEH55RK2M8 add ou=users,dc=example,dc=com ou: users objectClass: organizationalUnit objectClass: top add uid=maxi,ou=users,dc=example,dc=com uid: maxi cn: Max Muster givenName: Max sn: Muster mail: max.muster@example.com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: qmailUser objectClass: top mailAlternateAddress: maxi@example.com userPassword: {ssha}4WRzS4hnn3oqd2m1mvwSMPQLB4Lff5ulxPB8ZQ==
Beim Speichern fragt ldapvi nach, ob die beiden neuen Objekte im LDAP angelegt werden sollen.
Weitere Knoten im LDAP-Verzeichnisbaum sind:
- ou=domains,dc=example,dc=com
- Liste der Domains, deren Postfächer dieser Server verwaltet
- ou=forwardDomains,dc=example,dc=com
- Liste der Domain, für die der Server E-Mail annimmt und weiterleitet
Beispiele dazu:
add ou=domains,dc=example,dc=com ou: domains objectClass: organizationalUnit objectClass: top add ou=example.com,ou=domains,dc=example,dc=com objectClass: domainRelatedObject objectClass: top objectClass: organizationalUnit associatedDomain: example.com ou: example.com add ou=example.org,ou=domains,dc=example,dc=com objectClass: domainRelatedObject objectClass: top objectClass: organizationalUnit associatedDomain: example.org ou: example.org
add ou=forwardDomains,dc=example,dc=com ou: forwardDomains objectClass: organizationalUnit objectClass: top add ou=external.com,ou=forwardDomains,dc=example,dc=com ou: external.com associatedDomain: external.com destinationIndicator: smtp:mail.external.com:25 objectClass: organizationalUnit objectClass: top objectClass: domainRelatedObject
Postfix#
Zunächst lege ich eine Gruppe und einen User vmail an. Mit den Rechten dieses Users werden die Mails der virtuellen Mail-Postfächer verwaltet.
groupadd -g 800 vmail useradd -m -u 800 -g 800 -d /var/lib/vmail -s /bin/false vmail
Meine Start-Konfiguration für Postfix in der Datei /etc/postfix/main.cf sieht wie folgt aus:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no myhostname = example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = example.com, localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all readme_directory = no # tls settings tls_random_source = dev:/dev/urandom tls_high_cipherlist = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+RC4:EDH+aRSA:EECDH:DES-CBC3-SHA:AES:CAMELLIA:!aNULL:!eNULL:!LOW:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!EDH smtp_tls_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtpd_tls_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtp_tls_mandatory_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtpd_tls_mandatory_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtp_tls_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtpd_tls_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtp_tls_mandatory_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES smtpd_tls_mandatory_exclude_ciphers = aNULL, DES, RC4, MD5, 3DES # smtpd settings smtpd_tls_cert_file=/etc/ssl/certs/example.com.crt smtpd_tls_key_file=/etc/ssl/private/example.com.key smtpd_tls_CAfile=/etc/ssl/certs/example.com.chain smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_mandatory_ciphers = high smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, TLSv1.2 smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtpd_delay_reject = yes smtpd_helo_required = yes smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, warn_if_reject reject_unknown_helo_hostname, permit smtpd_client_restrictions = reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, permit smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, permit smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_rbl_client ix.dnsbl.manitu.net, reject_rbl_client dnsbl.inps.de, check_policy_service inet:127.0.0.1:10023, permit # smtp client settings smtp_tls_cert_file=/etc/ssl/certs/example.com.crt smtp_tls_key_file=/etc/ssl/private/example.com.key smtp_tls_CAfile=/etc/ssl/certs/example.com.chain smtp_use_tls=yes smtp_tls_mandatory_ciphers = high smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, TLSv1.2 smtp_tls_loglevel = 1 smtp_tls_note_starttls_offer = yes # virtual mailboxes virtual_alias_maps = ldap:/etc/postfix/ldap/virtual_aliases.cf virtual_mailbox_domains = ldap:/etc/postfix/ldap/virtual_domains.cf virtual_mailbox_maps = ldap:/etc/postfix/ldap/virtual_mailboxes.cf virtual_mailbox_base = /var/lib/vmail/ virtual_uid_maps = static:800 virtual_gid_maps = static:800 virtual_transport = lmtp:unix:private/dovecot-lmtp # transport transport_maps = ldap:/etc/postfix/ldap/virtual_transport.cf relay_domains = ldap:/etc/postfix/ldap/virtual_relay.cf
Im Abschnitt #smtpd settings befinden sich zur Spam-Abwehr die DNS-Blacklists ix.dnsbl.manitu.net und dnsbl.inps.de. Dahinter der Eintrag für das Greylisting mit Postgrey.
Die Maps in den Bereichen #virtual users und #transport werden jeweils durch LDAP-Abfragen ermittelt:
#virtual_aliases.cf server_host = localhost server_port = 389 search_base = dc=example,dc=com query_filter = (|(mail=%s)(mailAlternateAddress=%s)) result_attribute = mailForwardingAddress
#virtual_domains.cf server_host = localhost server_port = 389 search_base = ou=domains,dc=example,dc=com query_filter = (associatedDomain=%s) result_attribute = associatedDomain
#virtual_mailboxes.cf server_host = localhost server_port = 389 search_base = dc=example,dc=com query_filter = (|(mail=%s)(mailAlternateAddress=%s)) result_attribute = mail
#virtual_transport.cf server_host = localhost server_port = 389 search_base = ou=forwardDomains,dc=example,dc=com query_filter = (associatedDomain=%s) result_attribute = destinationIndicator
#virtual_relay.cf server_host = localhost server_port = 389 search_base = ou=forwardDomains,dc=example,dc=com query_filter = (associatedDomain=%s) result_attribute = associatedDomain
Diese fünf Dateien speichern wir im Verzeichnis /etc/postfix/ldap. Eine kurze Erklärung zu den LDAP-Abfragen finden sich im Artikel "Postfix und LDAP – Part 3" auf www.whisperedshouts.de
Dovecot#
PostgreSQL#
SOGo#
Apache2#
Add new attachment
List of attachments
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
ldif |
qmail.ldif | 9.0 kB | 1 | 28-Feb-2018 13:46 | Peter Hormanns | LDAP Schema qmail |