FreeBSD 10.1でSendmailを使用して外部SMTPサービスを介して電子メールを送信する方法

前書き

新しいWebサーバーをセットアップする際の最も一般的なニーズの1つは、電子メールの送信です。 これを行う最も安全で簡単な方法は、サーバーをSendGridやAmazon SESなどのメールサービスに接続することです。 外部サービスを使用すると、サーバーIPがスパム対策サービスによってブラックリストに登録されるなどの落とし穴を回避できます。

このチュートリアルでは、FreeBSDに組み込まれているSendmailサービスをSendGridに接続して、サーバーからメールを送信する方法について説明します。 面倒なことなく、別の外部メールサービス用に設定を調整することもできます。

FreeBSDを初めて使用する場合、私たちが行うことの一部は少し怖いように見えるかもしれませんが、すぐに袖をまくり、FreeBSDプロのようなシステムツールを少し再コンパイルすることに慣れるでしょう。

目標

このチュートリアルでは、次のことを行います。

  • サーバーが外部サービスで認証できるように、SASLサポートでSendmailを再コンパイルします

  • 適切な設定でSendmailメールサーバーを構成する

  • 送信メールをテストして、サーバーからメールが送信されることを確認します

前提条件

このガイドを始める前に、次のものが必要です。

  • FreeBSD 10.1ドロップレット

  • このhttps://www.digitalocean.com/community/tutorials/how-to-add-and-remove-users-on-freebsd[tutorial]に従って、* root *アカウントまたはsudo特権を持つアカウントにアクセスします

  • コマンドラインからテキストファイルを編集する方法に関する実用的な知識

  • + nano`や + vim`などのお気に入りのテキストエディターをインストールする必要があります。

  • テスト用の無料のhttps://sendgrid.com/user/signup[SendGrid]アカウント、またはサービスのSMTP詳細を提供する別のメールプロバイダー。 外部メールプロバイダーには次の詳細が必要になります。

  • SMTPホスト名

  • ユーザー名

  • パスワード

  • サーバーのホスト名。これは、「+ hostname +」を実行して見つけることができます

このチュートリアルは、* root *として最も簡単に実行できます。

sudo su

ステップ1-パッケージ管理のセットアップ

まず、外部メールサービス(この場合はSendGrid)で認証できるように、Sendmailを再コンパイルする必要があります。

すべての手順はここに含まれていますが、必要に応じて、https://www.freebsd.org/doc/handbook/SMTP-Auth.html [FreeBSDの公式ハンドブック]に従ってください。

一部のソフトウェアは、FreeBSDのhttps://www.freebsd.org/ports/[Ports Collection]からコンパイルされるため、最初に最新のものにする必要があります。

portsnap fetch && portsnap update

Portmasterユーティリティを使用すると、Portsツリーからソフトウェアを簡単にコンパイルできるので、インストールしてみましょう。

pkg install portmaster

次のコマンドを実行して、FreeBSDの最新のパッケージ形式で新しくコンパイルされたパッケージをインストールすることをシステムが認識していることを確認します。

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

手順2-SASLパッケージのインストールと構成

新しくインストールしたPortmasterユーティリティを使用して、次のコマンドで `+ cyrus-sasl2 +`パッケージをコンパイルしてインストールします。 これは、外部メールサービスでの認証に使用されます。

portmaster security/cyrus-sasl2

プロンプトが表示されたら、* LOGIN *がチェックされていることを確認します。これはデフォルトです。 * OK *を選択し、 `+ ENTER `を2回押してすべてのデフォルトを選択します。 プロンプトが表示されたら、「 y +」と答えてパッケージをアップグレードおよびインストールします。 次で終わる大量の出力が予想されます。

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)

ファイルを編集(まだ存在しない場合は作成) `+ / usr / local / lib / sasl2 / Sendmail.conf +`に以下を追加します:

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

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

pwcheck_method: saslauthd

次に、SASL認証用の `+ saslauthd +`サービスをインストールします。 プロンプトが表示されたら、デフォルトを受け入れて[OK]を選択します。

portmaster security/cyrus-sasl2-saslauthd

システム構成ファイル `+ / etc / rc.conf `を編集し、ファイルの最後に次の構成パラメーターを追加します。 `+`をサーバーのホスト名に置き換えます。

vim /etc/rc.conf

/etc/rc.conf

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

ここで、 `+ saslauthd`サービスを開始します。

service saslauthd start

この出力を見るはずです:

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

`+ / etc / make.conf +`ファイルを編集し、次のパラメーターを追加して、システムが使用するSASL Sendmailオプションを認識できるようにします。

vim /etc/make.conf

/etc/make.conf

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

手順3-SASLサポートを使用したSendmailの再コンパイル

このセクションでは、SASL認証を使用するためにSendmailを再コンパイルします。

次に、FreeBSD 10.1の最新のソースコードを同期する必要があります。

まず、必要なソースコードを簡単に入手できるようにSubversionをインストールします。

pkg install subversion

これで、FreeBSDプロジェクトのWebサイトから直接、再コンパイル用の最新コードをチェックアウトして、 `+ / usr / src +`のソースを更新できます。

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

次のコマンドは、一度に1グループずつ連続して実行する必要があります。 ここで行っているのは、新しいセキュリティ要件とログイン要件で組み込みのSendmailパッケージを再コンパイル(または再構築)し、Sendmailを再インストールするようにシステムに指示することです。

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

ステップ4-Sendmailの構成

ここまでで、あなたは物事を再コンパイルしました。 続けましょう!

次のステップでは、選択した外部スマートホスティングサービスを介してすべての送信メールをルーティングするようにSendmailに指示する基本的なSendmail構成について説明します。

まず、安全を確保し、 `+ / etc / mail`ディレクトリのバックアップを作成します。

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

メール構成ディレクトリを入力します。

cd /etc/mail

次のコマンドを実行して、基本的なメール構成を生成します。

make

次のパラメーターを追加して、 `+ relay-domains +`ファイルを作成および編集します。 「」をFQDNに、「」をドメイン名に置き換えます。

vim /etc/mail/relay-domains

/ etc / mail / relay-domains

次のパラメーターを追加して、 `+ local-host-names +`ファイルを作成および編集します。 変数をローカルのホスト名に置き換えます。

vim /etc/mail/local-host-names

/ etc / mail /ローカルホスト名

次のパラメーターを追加して、 `+ access `ファイルを作成および編集します。 (SendGrid以外のプロバイダーを使用している場合は、 ` smtp.sendgrid.net +`アドレスを変更する必要があります。)

vim /etc/mail/access

/ etc / mail / access

smtp.sendgrid.net      OK
GreetPause:localhost    0

次のパラメーターを追加して、 `+ authinfo `ファイルを作成および編集します。 「」と「」をSendGridアカウント名とパスワードに置き換えます。 別の外部メールプロバイダーを使用することを選択した場合は、両方の行の ` smtp.sendgrid.net +`値をプロバイダーのサーバーアドレスに変更する必要もあります。

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"

`+ access `および ` authinfo `ファイルは、実際にはSendmailが設定パラメーターを読み取る単純なデータベースになります。 これは、特にFreeBSDとSendmailを初めて使用する場合は混乱を招くかもしれませんが、データベースを生成するには、これらの2つのコマンドを ` / etc / mail / +`から実行するだけです。

makemap hash access < access
makemap hash authinfo < authinfo

次に、いくつかのコマンドを生成して、基本構成を編集します。 `+ .mc `ファイルを編集します。 (ファイル名がわからない場合は、 ` / etc / mail / `ディレクトリを ` ls +`できます。)

vim /etc/mail/.mc

+ dnl define(+ SMART_HOST '、 `+ your.isp.mail.server')`ブロックと ` dnl最初の行のコメントを外してdefault +`ブロックの場所を変更するために、次の設定行を挿入します。下に示された。

例のようにSendGridアカウントを使用していない場合は、 `+ smtp.sendgrid.net `アドレスをプロバイダーのサーバーアドレスに変更する必要があります。 また、 `+`の2つのインスタンスを、メールを* from *にするドメインに更新する必要があります。 (適切なTXT、DKIM、PTRなどを設定する必要がある場合があることに注意してください。 なりすましの報告を避けるための記録。)

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

変更を適用する前に、上記の構成を少し見てみましょう。 最初のブロックは、送信メールがドメイン「++」から送信されているように見えるようにしたいことをSendmailに伝えることです。

2番目のブロックは、前の手順で設定したポート、認証方法、認証情報など、メールを_スマートホスト_する場所を定義しています。 `+ / etc / mail / authinfo.db +`ファイルを参照していることに注意してください。

次に、行った変更を適用します。 まだ `+ / etc / mail / +`ディレクトリにいることを確認してください。 Sendmailが開始されていることを確認します。

service sendmail start

構成の更新:

make
make install restart

Sendmailを再起動します。

service sendmail restart

Sendmailの構成が完了しました。 次のステップは、テストメールを送信することです。

ステップ5-テストメールを送信する

適切なセットアップのためのすべてのステップを完了したので、すべてが機能していることを確認しましょう。

`+ mailx +`コマンドを使用して、毎日使用する実際のメールアカウントにテストメッセージを送信します。

mailx

プロンプトが表示されたら、「+ test」または件名に必要なものを入力し、「+ ENTER」を押します。

Subject:

その後、カーソルとテストメールの本文を書く機能だけが表示されます。 1つの単語「+ test」をもう一度書き、もう一度「+ ENTER」を押します。

test

メッセージの作成が完了したことを「+ mailx 」に伝える必要があります。そのためには、メッセージを単一の「。」で終了し、最後に「 ENTER 」を押す必要があります。 その確認としてすぐに「 EOT +」が表示されます。

.
EOT

次に、次のコマンドを実行して、メールキューが空であり、メッセージが送信されたことを確認します。

mailq

テストメッセージが正常に送信された場合、出力は次のようになります。すぐに受信トレイに表示されます。

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

今すぐメールをチェックして、メッセージが到着したことを確認してください。 * freebsd @ *からのはずです。

メールキューが空であることを盲目的に信頼することは、有効なテストではありません。 既にメッセージを受信して​​いる場合でも、メールログを表示するための基本を知りたいと思うでしょう。 次のコマンドを実行します。

tail -f /var/log/maillog

ログ出力で探している2つのキーは

  • * + Sent(<メッセージID>配信のために受け入れられたメッセージ)+ *

  • * `+ relay = smtp.sendgrid.net。 [208.43.76.147]、dsn = 2.0.0、stat = Sent(配信中)+ `*

以下のログ出力でこれらのメッセージを見つけられることを確認してください。

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)

これは、あなたのメッセージが受け入れられ、受信トレイに送られていることを示しています。すでに受信している場合は、少し逆境になります。

ライブテストとトラブルシューティングを行うには、2つのターミナルセッションを開いて、1つで `+ tail -f / var / log / maillog`コマンドを実行したまま、もう1つでテストメッセージを送信します。

結論

これで、SendGridまたは他の任意のメールサービスを介して、FreeBSD Dropletから送信メールを送信する準備が整いました。 展開するWebサイトまたはWebアプリケーションは、最小限の構成から構成なしでこれを利用できるようになります。

ご質問やご意見がありましたら、下に残してください。

Related