!!!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.
!!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
relay_domains = /etc/postfix/relay_domains
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 = mailMessageStore
}}}
{{{
#virtual_transport
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|https://www.whisperedshouts.de/dokumente/postfix-und-ldap-part-3-postfix-konfigurieren]
!!Dovecot
!!~PostgreSQL
!!SOGo
!!Apache2