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

Only authorized users are allowed to upload new attachments.

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
« This page (revision-19) was last changed on 01-Mar-2018 19:16 by Peter Hormanns