Bei OpenSMTPd handelt es sich um einen Mailserver der vom OpenBSD-Team entwickelt wird um einen robusten, sicheren Mailserver anzubieten der sich durch eine einfache und verständliche Konfiguration auszeichnet. Somit ist es recht schnell möglich einen Mailserver für die meisten Aufgabengebiete zu konfigurieren. Die Einfachheit geht zu Lasten der Vielfältigkeit. Besteht der Bedarf an speziellen Lösungen die über die Basisfunktionalität herausgeht muss man sich mit den komplexeren Konfigurationen von den großen Mailservern auseinandersetzen (z.B. Postfix, exim, sendmail, etc.).
OpenSMTPd wird aktuell sehr aktiv entwickelt und es können sich noch recht kurzfristig Änderungen ergeben.
Zur Installation von OpenSMTPd mit Hilfe von Portmaster wird wie folgt vorgegangen:
# portmaster mail/opensmtpd
Hinweis:
Wenngleich der Port sich opensmtpd nennt so sind alle installierten Dateien und Konfigurationsvariablen nur noch mit smtpd benannt, was ggf etwas unübersichtlich sein könnte.
Nachdem der Mailserver installiert ist geht es darum ihn zu Konfigurieren bevor er in Betrieb geht.
Hinweis: Der Hostname des Systems (in der Variable hostname in der /etc/rc.conf muss ein FQHN - bestehend aus Hostname und Domain - sein, sonst startet smtpd nicht).
Die Datei /etc/mail/mailer.conf muss angepasst werden, damit OpenSMTPD und die zugehörigen Programme in Zukunft von System gefunden und verwendet werden können. Hier die /etc/mail/mailer.conf wie folgt anpassen:
sendmail /usr/local/sbin/smtpctl send-mail /usr/local/sbin/smtpctl mailq /usr/local/sbin/smtpctl makemap /usr/local/libexec/opensmtpd/makemap newaliases /usr/local/libexec/opensmtpd/makemap
Um verschlüsselte Verbindungen auf dem Mailserver zuzulassen ist ein SSL-Zertifikat notwendig. Dieses kann entweder selbst signiert sein (was in einigen Mailprogrammen zu Fehlermeldungen führt) oder durch eine offizielle CA signiert sein (was im Allgemeinen jedoch etwas kostspielig ist).
Das Erzeugen von Zertifikaten ist nicht notwendig wenn man lediglich einen lokalen Mailserver installieren will der nicht nach außen hier erreichbar ist. In allen anderen Fällen ist es dringend zu empfehlen eine verschlüsselte Verbindung zu verwenden wenn sich Benutzer hierüber auf dem System anmelden (z.B. um den Server als Postausgangsserver für ihren Mailclient zu verwenden) da hierbei deren Passwort im Klartext übertragen wird! Bei verschlüsselten Verbindungen ist dies ebenfalls der Fall, jedoch innerhalb des verschlüsselten Kanals. Soll der Server in der Lage sein Mails direkt zu empfangen (indem man eine Mail an benutzername@mailserver richtet sollte Port 25 keine Verschlüsselung fordern - jedoch darf er sie anbieten), da nicht jeder Mailserver der ggf. diese Mail zustellen will dies unterstützt. Mailversand an sich ist nun einmal ein unverschlüsseltes und somit unsicheres Medium (siehe GnuPG).
Der im Beispiel verwendete Domainname mail.example.com muss entsprechend des Domainnamens des Systems angepasst werden.
Zunächst wird ein Verzeichnis angelegt um die Zertifikate darin zu speichern.
# mkdir /usr/local/etc/mail/certs
Anschließend wird der Schlüssel erzeugt mit welcher zur Verschlüsselung genutzt wird.
# openssl genrsa -out /usr/local/etc/mail/certs/mail.example.com.key 4096
Anschließend wird das selbst signierte Zertifikat erstellt. Soll das Zertifikat von einer offiziellen CA unterzeichnet werden….
# openssl req -new -x509 -key /usr/local/etc/mail/certs/mail.example.com.key -out /usr/local/etc/mail/certs/mail.example.com.crt -days 365 # chmod 600 /usr/local/etc/mail/certs/mail.example.com.*
Hinweis: Um lediglich lokale Mails des Systems zu verarbeiten genügt die Standardkonfiguration wie sie in /usr/local/etc/mail/smtpd.conf.sample vorgegeben wird. In diesem Fall muss die Datei lediglich nach /usr/local/etc/mail/smtpd.conf kopiert werden.
Für den Fall eines echten Mailservers der Mails von außen empfangen, und nach außen senden kann, ist eine weiter angepasste /usr/local/etc/mail/smtpd.conf notwendig. Die folgende Konfigurationsdatei entspricht folgenden Voraussetzungen. Der Mailserver:
# Zuerst werden Zertifikat und Schluessel festgelegt pki mail.example.com certificate "/usr/local/etc/mail/certs/mail.example.com.crt" pki mail.example.com key "/usr/local/etc/mail/certs/mail.example.com.key" # Um nur lokale Mails zuzustellen kann der smtpd an localhost lauschen # listen on localhost # # Um Mails von aussen zu empfangen wir an Port 25 gelauscht und verschluesselte Verbindungen angeboten listen on re0 port 25 tls pki mail.example.com # Um den Server als Relay nutzen zu koennen muessen sich Benutzer per smtps verbinden und anmelden listen on re0 smtps pki mail.example.com auth # Tabellen setzen # Die System-Alias-Tabelle table aliases file:/etc/mail/aliases # Tabelle der Domains fuer welche Mails angenommen werden sollen table domains file:/etc/mail/domains # Tabelle der virtuellen Nutzer. Mapping von virtuellen Mailadressen auf Systembenutzer table vusers file:/etc/mail/vusers # Alles was lokal ist wird direkt zugestellt accept from local for local alias <aliases> deliver to maildir accept from local for local deliver to maildir # Empfangene Mails in die Maildirverzeichnisse der Benutzer zustellen: # Im einfachsten Fall koennen einfach alle Mails an die Benutzer des Systems angenommen und zugestellt werden. # accept from any for domain mail.example.com deliver to maildir # Alle Mails von aussen akzeptieren wenn sie zu den akzeptierten domains und virtuellen usern gehoert accept from any for domain <domains> virtual <vusers> deliver to maildir # Angemeldete Benutzer (die sich per smtps gegen ihre lokalen Benutzerdaten authentifizieren) duerfen Relay nutzen accept for any relay
Hinweis: Das Lauschen an localhost führte (in Version 5.4.1,1 ) in einer Jail hinter einer IPFW-Firewall zu einem Fehler der das Starten des Servers verhindert. Wird statt localhost die Adresse 0.0.0.0 eingetragen konnte der Fehler umgangen werden.
Um die bereits vorhandenen aliases des Systems auch mit OpenSMTPd zu nutzen wurden sie in der /usr/local/etc/mail/smtpd.conf für die Tabelle aliases eingetragen. Die Datei kann wenn nötig noch angepasst werden (z.B. Mails an root umleiten).
Um Mails für verschiedene Domainnamen als Empfänger zu akzeptieren wird eine Tabelle angelegt. Diese Tabelle wird als Datei unter /etc/mail/domains erzeugt und als Tabelle domains in der /usr/local/etc/mail/smtpd.conf verbunden. Um als Mailserver (zum Mailempfang) von verschiedenen Domains zu fungieren werden die Domains zeilenweise hinzugefügt.
example.com anotherexample.net andathirdexample.org
Mit virtuellen Usern können Mails auch für Mailadressen angenommen werden für die es keinen echten Benutzer auf dem System gibt. Die Tabelle wird in der /usr/local/etc/mail/smtpd.conf als vusers hinzugefügt'''. Um virtuelle User anzulegen wird eine weitere Alias-Tabelle angelegt. Die Datei wird ebenfalls unter /etc/mail/vusers angelegt und kann z.B. wie folgt aussehen:
# Mails die an einen Benutzer 'sepp' (den es nicht als Systembenutzer gibt) geschickt werden, # werden an den Systembenutzer 'fritz' zustellen. sepp fritz # Mails die an egon@anotherexample.com gesendet werden, werden dem Systembenutzer fritz zugestellt # anotherdomain.net muss dabei der Domain-Tabelle hinzugeuegt sein. egon@anotherexample.net fritz # Alle Mails an die Domain athirdexample.org werden an den Systembenutzer 'franz' zugestellt # auch hier muss athirdexample.org in der Domain-Tabelle aufgefuehrt sein. @andathirdexample.org franz
sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" smtpd_enable="YES"