Am Dienstag 30.05.2017 habe ich im Metalab in der Selbsthilfegruppe Radical Server Unit Vienna über mein Mail-Setup gesprochen. Der Eintrag ist die nachgereichte Info dazu.

Ich lasse die angesprochenen Services auf OpenBSD und FreeBSD laufen, fast alles läuft aber auch unter anderen Systemen wie Linux.

Hardware

Die Network Services (Firewall, Load Balancer und dann auch SMTP/IMAP Services) laufen unter OpenBSD auf mehreren Netgate SG-4860 die von ADI gebaut werden - bestellt bei Voleatech (DE):

Ich habe lange überlegt ob ich nicht das orginale Setup mit pfSense verwenden soll, bin mit meiner Entscheidung aber sehr zufrieden.

Die restlichen Services laufen auf FreeBSD unter normalen Intel Xeon Servern von Delta-Computer mit allen Goodies von FreeBSD…

Mail Komponenten

Chess Griffin hat vor einigen Jahren eine schöne Blog-Serie geschrieben die das Standard Setup um Clam und Spam erweitert. Lesenswert.

OpenBSD Base:

  • smtpd(8)
  • spamd(8)
  • pf(8)
  • nsd(8)

OpenBSD Ports:

  • ClamAV
  • ClamSMTP
  • SpamAssassin
  • SpamPD
  • DKIMproxy
  • Dovecot

pf(8): Lokale Firewall

Die lokale Firewall pf(8) steuert hier mit Listen welche smtp Verbindungen auf den rechtigen smtp-Server dürfen und welche sich noch mit dem stotternden spamd(8) unterhalten müssen.

#       $OpenBSD: pf.conf,v 1.54 2014/08/23 05:49:42 deraadt Exp $

mail="192.0.2.16"

table <nospamd> persist file "/etc/mail/nospamd"
table <nospamdspf> persist file "/etc/mail/nospamdspf"
table <spamd-white> persist

pass in on egress inet proto tcp to $mail port {imaps submission}
pass in on egress inet proto tcp to $mail port smtp \
                                 rdr-to 127.0.0.1 port spamd
pass in on egress inet proto tcp from <nospamd> to $mail port smtp
pass in on egress inet proto tcp from <nospamdspf> to $mail port smtp
pass in on egress inet proto tcp from <spamd-white> to $mail port smtp

smtpd(8): OpenSMTPD

So sieht die default Konfig von OpenSMTPD aus - ich habe hier in der letzten Zeile nur den Beispiel-Relay eingetragen. Eine solche Konfig haben bei mir die meisten Server, die kein Mail Server sind.

#       $OpenBSD: smtpd.conf,v 1.9 2016/05/03 18:43:45 jung Exp $

# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

table aliases file:/etc/mail/aliases

# To accept external mail, replace with: listen on all
#
listen on lo0

# Uncomment the following to accept external mail for domain "example.org"
#
# accept from any for domain "example.org" alias <aliases> deliver to mbox
accept for local alias <aliases> deliver to mbox
accept from local for any relay via mail.example.com

Die Mail Server konfig sieht etwa so aus:

#	$OpenBSD: smtpd.conf,v 1.8 2015/12/21 16:25:44 sunil Exp $

ext_if="192.10.2.16"

pki mail.example.com certificate "/etc/ssl/mail.exmaple.com.crt"
pki mail.example.com key "/etc/ssl/private/mail.example.com.key"
ca  mail.example.com certificate "/etc/ssl/cert.pem"

table office { "10.120.0.0/20", "198.51.100.0/24" }
table aliases db:/etc/mail/aliases.db
table vdomains { "example.com" "example.org" }
table users db:/etc/mail/virtusertable.db

listen on lo0
listen on lo0 port 10026 tag CLAM_IN
listen on lo0 port 10028 tag CLAM_OUT
listen on lo0 port 10036 tag SPAM_IN
listen on lo0 port 10029 tag DKIM_OUT
listen on $ext_if tls pki mail.example.com
listen on $ext_if port submission tls-require pki mail.example.com auth

accept for local alias <aliases> deliver to maildir

accept tagged DKIM_OUT for any relay

accept tagged SPAM_IN for domain <vdomains> virtual <users> \
    deliver to lmtp "/var/dovecot/lmtp"

accept tagged CLAM_IN  for any relay via smtp://127.0.0.1:10035  # to spampd
accept tagged CLAM_OUT for any relay via smtp://127.0.0.1:10030  # to dkimproxy_out

accept from any for domain <vdomains> relay via smtp://127.0.0.1:10025 # in
accept from local for any relay via smtp://127.0.0.1:10027  # out

SOGo: CalDAV, CardDAV und WebUI

Nach langem Suchen habe ich SOGo gefunden. Das läuft bei mir in einem FreeBSD-Kerker und verwendet PostgreSQL, memcached und servisiert über Nginx.

Das SOGo User Interface greift auf Dovecot zu und hat auch für dessen Sieve scripts eine sehr benutzerfreundliche Administration. Die User-Sieve Scripts bleiben trotzdem auch im Home-Dir editierbar, wofür ich sehr dankbar bin.

LDAP

Die Sogo-Dokumentation ist etwas unglücklich in Bezug auf Authentication. Die meisten größeren Setups verwenden sicher LDAP für Authentication, aber das System kommt genauso gut mit einer Datenbank-Tabelle aus (siehe FreeBSD Konfig Template). Ich bin hier etwas sonderbar und habe zu LDAP eine gute Beziehung.

Well-Known

Damit das mit den Clients dann auch klappt, gibt es noch RFC6764 der die Well-Known URI und die Service Name Registration beschreibt.