This page (revision-19) was last changed on 01-Mar-2018 19:16 by Peter Hormanns 

This page was created on 19-Feb-2018 17:57 by Peter Hormanns

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
19 01-Mar-2018 19:16 10 KB Peter Hormanns to previous
18 01-Mar-2018 18:54 10 KB Peter Hormanns to previous | to last
17 01-Mar-2018 18:33 10 KB Peter Hormanns to previous | to last
16 01-Mar-2018 18:24 9 KB Peter Hormanns to previous | to last
15 01-Mar-2018 18:16 9 KB Peter Hormanns to previous | to last
14 01-Mar-2018 16:42 8 KB Peter Hormanns to previous | to last
13 01-Mar-2018 16:38 8 KB Peter Hormanns to previous | to last
12 01-Mar-2018 16:35 7 KB Peter Hormanns to previous | to last
11 01-Mar-2018 14:23 7 KB Peter Hormanns to previous | to last
10 01-Mar-2018 14:03 7 KB Peter Hormanns to previous | to last main.cf bisher
9 01-Mar-2018 13:16 3 KB Peter Hormanns to previous | to last
8 01-Mar-2018 13:16 3 KB Peter Hormanns to previous | to last erster LDAP User
7 28-Feb-2018 14:12 2 KB Peter Hormanns to previous | to last
6 28-Feb-2018 13:53 1 KB Peter Hormanns to previous | to last
5 28-Feb-2018 13:36 1 KB Peter Hormanns to previous | to last
4 28-Feb-2018 13:33 1 KB Peter Hormanns to previous | to last
3 28-Feb-2018 13:24 896 bytes Peter Hormanns to previous | to last
2 28-Feb-2018 13:22 842 bytes Peter Hormanns to previous | to last
1 19-Feb-2018 17:57 748 bytes Peter Hormanns to last neue Seite

Page References

Incoming links Outgoing links

Version management

Difference between version and

!!!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

}}}

<<DasEin>> Passwort für den LDAP-Admin <<ist in diesem Schritt egal.vergeben!>>

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:!!~PostgreSQL>>

<<{{{

   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|https://www.whisperedshouts.de/dokumente/postfix-und-ldap-part-3-postfix-konfigurieren]

!!Dovecot

<<!!~PostgreSQL

!!SOGo

!!Apache2