So senden Sie E-Mails über einen externen SMTP-Dienst mit Sendmail unter FreeBSD 10.1

Einführung

Eine der häufigsten Anforderungen beim Einrichten eines neuen Webservers ist das Senden von E-Mails. Der sicherste und einfachste Weg, dies zu tun, besteht darin, Ihren Server mit einem Mailing-Dienst wie SendGrid oder Amazon SES zu verbinden. Durch die Verwendung eines externen Dienstes können Sie vermeiden, dass die IP-Adresse Ihres Servers von Anti-Spam-Diensten auf die schwarze Liste gesetzt wird.

In diesem Tutorial erfahren Sie, wie Sie den in FreeBSD integrierten Sendmail-Dienst mit SendGrid verbinden, um E-Mails von Ihrem Server aus zu senden. Sie können die Einstellungen auch problemlos für einen anderen externen Mail-Dienst anpassen.

Wenn Sie neu in FreeBSD sind, werden einige unserer Aktionen vielleicht etwas beängstigend aussehen, aber Sie werden es bald nicht mehr schwer haben, die Ärmel hochzukrempeln, um ein wenig Systemtools wie die FreeBSD-Profis neu zu kompilieren.

Tore

In diesem Tutorial werden wir:

  • Kompilieren Sie Sendmail mit SASL-Unterstützung neu, damit sich der Server bei einem externen Dienst authentifizieren kann

  • Konfigurieren Sie den Sendmail-Mailserver mit den entsprechenden Einstellungen

  • Testen Sie ausgehende E-Mails, um sicherzustellen, dass E-Mails von Ihrem Server gesendet werden

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

  • Ein FreeBSD 10.1-Droplet

  • Zugriff auf Ihr * root * -Konto oder ein Konto mit Sudo-Rechten über dieses tutorial

  • Grundkenntnisse in der Bearbeitung von Textdateien über die Befehlszeile

  • Sie sollten Ihren bevorzugten Texteditor installieren, z. B. "+ nano" oder "+ vim"

  • Ein kostenloses Konto SendGrid für Testzwecke oder ein anderer E-Mail-Anbieter, der Ihnen SMTP-Details für den Dienst bereitstellt. Sie benötigen diese Angaben für Ihren externen Mailprovider:

  • SMTP-Hostname

  • Nutzername

  • Passwort

  • Den Hostnamen Ihres Servers finden Sie, indem Sie "+ Hostname +" ausführen

Dieses Tutorial ist am einfachsten als * root * zu befolgen:

sudo su

Schritt 1 - Paketverwaltung einrichten

Zuerst müssen wir Sendmail neu kompilieren, damit es sich bei einem externen Mail-Dienst authentifizieren kann - in diesem Fall SendGrid.

Alle Schritte sind hier enthalten, aber wenn Sie möchten, können Sie dem official FreeBSD handbook folgen.

Einige Software wird aus der Ports Collection von FreeBSD kompiliert, daher müssen wir sicherstellen, dass diese zuerst auf dem neuesten Stand ist.

portsnap fetch && portsnap update

Mit dem Portmaster-Dienstprogramm können wir auf einfache Weise Software aus dem Ports-Baum kompilieren. Lassen Sie uns diese also installieren.

pkg install portmaster

Führen Sie den folgenden Befehl aus, um sicherzustellen, dass das System neu kompilierte Pakete im neuesten Paketformat für FreeBSD installiert.

echo 'WITH_PKGNG=yes' >> /etc/make.conf

Schritt 2 - Installieren und Konfigurieren des SASL-Pakets

Kompilieren und installieren Sie mit unserem neu installierten Dienstprogramm Portmaster das Paket + cyrus-sasl2 + mit dem folgenden Befehl. Dies wird für die Authentifizierung beim externen Mail-Dienst verwendet.

portmaster security/cyrus-sasl2

Wenn Sie dazu aufgefordert werden, vergewissern Sie sich, dass * LOGIN * aktiviert ist. Dies sollte standardmäßig der Fall sein. Wählen Sie * OK * und drücken Sie zweimal + ENTER +, um alle Standardeinstellungen zu wählen. Wenn Sie dazu aufgefordert werden, antworten Sie mit + y +, um Ihre Pakete zu aktualisieren und zu installieren. Sie sollten mit einer großen Menge an Ausgaben rechnen, die mit Folgendem enden:

Output===>>> Done displaying pkg-message files

===>>> The following actions were performed:
   Upgrade of pkg-1.4.12 to pkg-1.5.0
   Upgrade of perl5-5.18.4_11 to perl5-5.18.4_13
   Installation of security/cyrus-sasl2 (cyrus-sasl-2.1.26_9)

Bearbeiten Sie die Datei (erstellen Sie sie, falls sie noch nicht existiert) + / usr / local / lib / sasl2 / Sendmail.conf + und fügen Sie Folgendes hinzu:

vim /usr/local/lib/sasl2/Sendmail.conf

/usr/local/lib/sasl2/Sendmail.conf

pwcheck_method: saslauthd

Installieren Sie als Nächstes den Dienst "+ saslauthd +" für die SASL-Authentifizierung. Übernehmen Sie die Standardeinstellungen, wenn Sie dazu aufgefordert werden, und wählen Sie * OK *.

portmaster security/cyrus-sasl2-saslauthd

Bearbeiten Sie die Systemkonfigurationsdatei "+ / etc / rc.conf " und fügen Sie die folgenden Konfigurationsparameter am Ende der Datei hinzu. Ersetzen Sie "+" durch den Hostnamen Ihres Servers.

vim /etc/rc.conf

/etc/rc.conf

hostname = ""
sendmail_enable="YES"
saslauthd_enable="YES"

Starten Sie nun den Dienst "+ saslauthd +".

service saslauthd start

Sie sollten diese Ausgabe sehen:

Outputusage: hostname [-fs] [name-of-host]
usage: hostname [-fs] [name-of-host]
Starting saslauthd.

Bearbeiten Sie die Datei "+ / etc / make.conf +" und fügen Sie die folgenden Parameter hinzu, damit das System weiß, welche SASL-Sendmail-Optionen verwendet werden sollen.

vim /etc/make.conf

/etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Schritt 3 - Sendmail mit SASL-Unterstützung neu kompilieren

In diesem Abschnitt kompilieren wir Sendmail erneut, um die SASL-Authentifizierung zu verwenden.

Jetzt müssen wir den neuesten Quellcode für FreeBSD 10.1 synchronisieren.

Zuerst installieren wir Subversion, damit wir den benötigten Quellcode problemlos erhalten können.

pkg install subversion

Jetzt können wir den neuesten Code zum Neukompilieren direkt von der FreeBSD-Projekt-Website herunterladen, um unsere Quellen in + / usr / src + zu aktualisieren.

svn co http://svn.freebsd.org/base/releng/10.1/ /usr/src

Die nächsten Befehle, die Sie nacheinander ausführen müssen, werden jeweils in einer Gruppe ausgeführt. Wir weisen das System an, die integrierten Sendmail-Pakete mit unseren neuen Sicherheits- und Anmeldeanforderungen neu zu kompilieren (oder neu zu erstellen) und Sendmail anschließend neu zu installieren.

cd /usr/src/lib/libsmutil
make cleandir && make obj && make
cd /usr/src/lib/libsm
make cleandir && make obj && make
cd /usr/src/usr.sbin/sendmail/
make cleandir && make obj && make && make install

Schritt 4 - Sendmail konfigurieren

Sie haben es bis hierher geschafft, und wir haben die Dinge neu kompiliert. Lasst uns weitergehen!

Für diesen nächsten Schritt gehen wir eine grundlegende Sendmail-Konfiguration durch, die Sendmail anweist, alle ausgehenden E-Mails über unseren ausgewählten externen Smarthosting-Dienst weiterzuleiten.

Zuerst werden wir sicher sein und eine Sicherungskopie des Verzeichnisses "+ / etc / mail" erstellen.

cp -a /etc/mail /etc/mail.bak

Geben Sie das Mail-Konfigurationsverzeichnis ein.

cd /etc/mail

Führen Sie den folgenden Befehl aus, um eine grundlegende Mail-Konfiguration zu generieren.

make

Erstellen und bearbeiten Sie die Datei + relay-domains + und fügen Sie die folgenden Parameter hinzu. Ersetzen Sie "" durch Ihren FQDN und "" durch Ihren Domainnamen.

vim /etc/mail/relay-domains

/ etc / mail / relay-domains

Erstellen und bearbeiten Sie die Datei + local-host-names + und fügen Sie die folgenden Parameter hinzu. Ersetzen Sie die Variablen durch Ihre lokalen Hostnamen.

vim /etc/mail/local-host-names

/ etc / mail / local-host-names

Erstellen und bearbeiten Sie die Datei + access + und fügen Sie die folgenden Parameter hinzu. (Beachten Sie, dass Sie die Adresse "+ smtp.sendgrid.net +" ändern müssen, wenn Sie einen anderen Anbieter als SendGrid verwenden.)

vim /etc/mail/access

/ etc / mail / access

smtp.sendgrid.net      OK
GreetPause:localhost    0

Erstellen und bearbeiten Sie die Datei + authinfo + und fügen Sie die folgenden Parameter hinzu. Ersetzen Sie "" und "" durch Ihren SendGrid-Kontonamen und Ihr Kennwort. Wenn Sie sich für einen anderen externen E-Mail-Anbieter entschieden haben, müssen Sie auch den Wert "+ smtp.sendgrid.net +" in beiden Zeilen in die Serveradresse Ihres Anbieters ändern.

vim /etc/mail/authinfo

/ etc / mail / authinfo

AuthInfo:smtp.sendgrid.net "U:root" "I:" "P:" "M:LOGIN"
AuthInfo:smtp.sendgrid.net:587 "U:root" "I:" "P:" "M:LOGIN"

Die Dateien + access + und + authinfo + sind wirklich einfache Datenbanken, aus denen Sendmail Konfigurationsparameter liest. Dies mag verwirrend klingen, besonders wenn Sie FreeBSD und Sendmail noch nicht kennen, aber Sie müssen nur diese beiden schmerzlosen Befehle aus dem + / etc / mail / + ausführen, um die Datenbanken zu generieren.

makemap hash access < access
makemap hash authinfo < authinfo

Jetzt bearbeiten wir die Basiskonfiguration, für die wir einige Befehle generiert haben. Bearbeiten Sie die + .mc + Datei. (Sie können das Verzeichnis "+" / etc / mail / + "verwenden, wenn Sie den Dateinamen nicht kennen.)

vim /etc/mail/.mc

Fügen Sie die folgenden Konfigurationszeilen zwischen den Block + dnl define (+ SMART_HOST ', + your.isp.mail.server') + und den Block + dnl Uncomment ein, um die Position des Standardblocks + zu ändern unten gezeigt.

Sie müssen die "+ smtp.sendgrid.net " - Adresse in die Serveradresse Ihres Providers ändern, wenn Sie kein SendGrid-Konto wie im Beispiel verwenden. Sie müssen auch die beiden Instanzen von "+" auf die Domain aktualisieren, von der die E-Mail stammen soll. (Beachten Sie, dass Sie möglicherweise die entsprechenden Einstellungen für TXT, DKIM, PTR usw. vornehmen müssen.) Aufzeichnungen, um Spoofing-Meldungen zu vermeiden.)

your_server.example.com.mc ’> / etc / mail / .mc

dnl define(`SMART_HOST', `your.isp.mail.server')

dnl SET OUTBOUND DOMAIN
MASQUERADE_AS(`')
MASQUERADE_DOMAIN()
FEATURE(masquerade_envelope)
FEATURE(masquerade_entire_domain)

dnl SMART HOST CONFIG
define(`SMART_HOST', `smtp.sendgrid.net')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash /etc/mail/authinfo.db')dnl
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

dnl Uncomment the first line to change the location of the default

Bevor wir die Änderungen anwenden, gehen wir zunächst die oben beschriebene Konfiguration durch. Der erste Block teilt Sendmail mit, dass wir sicherstellen möchten, dass unsere ausgehende Mail von unserer Domain "++" stammt.

Der zweite Block definiert, wo wir unsere E-Mails hosten wollen, einschließlich des Ports, der Authentifizierungsmethoden und unserer Authentifizierungsinformationen, die wir in einem vorherigen Schritt eingerichtet haben. Beachten Sie, dass wir auf die Datei "+ /etc/mail/authinfo.db +" verweisen.

Wenden wir nun die von uns vorgenommenen Änderungen an. Stellen Sie sicher, dass Sie sich noch im Verzeichnis "+ / etc / mail / +" befinden. Stellen Sie sicher, dass Sendmail gestartet ist:

service sendmail start

Aktualisierung unserer Konfiguration:

make
make install restart

Starten Sie Sendmail neu:

service sendmail restart

Unsere Sendmail-Konfiguration ist abgeschlossen. Der nächste Schritt ist das Senden einer Test-E-Mail.

Schritt 5 - Senden Sie eine Test-E-Mail

Nachdem wir alle Schritte für eine ordnungsgemäße Einrichtung durchlaufen haben, stellen wir sicher, dass alles funktioniert.

Verwenden Sie den Befehl "+ mailx +", um eine Testnachricht an ein echtes E-Mail-Konto zu senden, das Sie täglich verwenden.

mailx

Wenn Sie dazu aufgefordert werden, geben Sie "+ Test" oder was auch immer Sie für ein Motiv wollen ein und drücken Sie dann "+ ENTER".

Subject:

Sie erhalten dann nur einen Cursor und die Möglichkeit, den Text Ihrer Test-E-Mail zu schreiben. Schreiben Sie einfach das einzelne Wort "+ test" erneut und drücken Sie "+ ENTER" erneut.

test

Sie müssen "+ mailx " mitteilen, dass Sie mit dem Schreiben Ihrer Nachricht fertig sind. Dazu müssen wir die Nachricht mit einem einzigen ". " beenden und ein letztes Mal " ENTER " drücken. Sie sehen sofort " EOT +" als Bestätigung dafür.

.
EOT

Führen Sie als Nächstes den folgenden Befehl aus, um zu überprüfen, ob die E-Mail-Warteschlange leer ist und unsere Nachricht gesendet wurde.

mailq

Die Ausgabe sollte so aussehen, wenn unsere Testnachricht erfolgreich gesendet wurde, und Sie sollten sie in Kürze in Ihrem Posteingang sehen.

/var/spool/mqueue is empty
               Total requests: 0

Überprüfen Sie jetzt Ihre E-Mails, um sicherzustellen, dass die Nachricht eingetroffen ist. Es sollte von * freebsd @ * sein.

Das blinde Vertrauen, dass die Mail-Warteschlange leer ist, ist kein gültiger Erfolgstest. Auch wenn Sie die Nachricht bereits erhalten haben, möchten Sie die Grundlagen der Anzeige Ihrer E-Mail-Protokolle kennen. Führen Sie den folgenden Befehl aus.

tail -f /var/log/maillog

Die beiden Schlüssel, nach denen Sie in der Protokollausgabe suchen, sind:

  • * + Gesendet (<Nachrichten-ID> Nachricht zur Zustellung angenommen) + *

  • * `+ relay = smtp.sendgrid.net. [208.43.76.147], dsn = 2.0.0, stat = Gesendet (Lieferung in Bearbeitung) + `*

Stellen Sie sicher, dass Sie diese Meldungen in der folgenden Protokollausgabe finden.

Mail LogFeb 11 04:09:13 your_server sm-mta[49080]: t1B49CW0049080: from=<freebsd@your_server>, size=331, class=0, nrcpts=1, msgid=<201502110409.t1B49CZ4049079@your_server>, proto=ESMTP, daemon=Daemon0, relay=localhost [127.0.0.1]
Feb 11 04:09:13 your_server sendmail[49079]: t1B49CZ4049079: [email protected], ctladdr=freebsd (1001/1001), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30040, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (t1B49CW0049080 Message accepted for delivery)
Feb 11 04:09:13 your_server sm-mta[49082]: STARTTLS=client, relay=smtp.sendgrid.net., version=TLSv1/SSLv3, verify=FAIL, cipher=AES128-GCM-SHA256, bits=128/128
Feb 11 04:09:13 your_server sm-mta[49082]: t1B49CW0049080: to=<[email protected]>, ctladdr=<freebsd@your_server> (1001/1001), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30331, relay=smtp.sendgrid.net. [208.43.76.147], dsn=2.0.0, stat=Sent (Delivery in progress)

Dies zeigt an, dass Ihre Nachricht angenommen wurde und sich auf dem Weg zu Ihrem Posteingang befindet. Dies kann ein wenig enttäuschend sein, wenn Sie sie bereits erhalten haben.

Um Live-Tests und Fehlerbehebungen durchzuführen, können Sie zwei Terminalsitzungen öffnen und den Befehl + tail -f / var / log / maillog + in einer ausführen lassen, während Sie in der anderen Testnachrichten senden.

Fazit

Sie können nun ausgehende E-Mails von Ihrem FreeBSD-Droplet über SendGrid oder einen beliebigen anderen E-Mail-Dienst senden. Alle Websites oder Webanwendungen, die Sie bereitstellen, können dies jetzt mit minimaler bis keiner Konfiguration nutzen.

Wenn Sie Fragen oder Kommentare haben, lassen Sie diese bitte unten.