序章

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

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

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

目標

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

  • サーバーが外部サービスで認証できるように、SASLサポートを使用してSendmailを再コンパイルします
  • Sendmailメールサーバーを適切な設定で構成します
  • 送信メールをテストして、サーバーからメールが送信されていることを確認します

前提条件

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

  • FreeBSD10.1ドロップレット
  • rootアカウントまたはこのtutorialに続くsudo権限を持つアカウントへのアクセス
  • コマンドラインからテキストファイルを編集する方法に関する実用的な知識
  • nanovimなどのお気に入りのテキストエディタをインストールする必要があります
  • テスト用の無料のSendGridアカウント、またはサービスのSMTP詳細を提供する別のメールプロバイダー。 外部メールプロバイダーについては、次の詳細が必要になります。
      SMTPホスト名ユーザー名パスワード
  • hostnameを実行して見つけることができるサーバーのホスト名

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

sudo su

ステップ1—パッケージ管理を設定する

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

すべてのステップがここに含まれていますが、必要に応じて、公式FreeBSDハンドブックに従ってください。

一部のソフトウェアはFreeBSDのPortsCollection からコンパイルされるため、最初にそれが最新であることを確認する必要があります。

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を編集し、ファイルの最後に次の構成パラメーターを追加します。 your_hostnameをサーバーのホスト名に置き換えます。

vim /etc/rc.conf
/etc/rc.conf
hostname = "your_hostname"
sendmail_enable="YES"
saslauthd_enable="YES"

次に、saslauthdサービスを開始します。

service saslauthd start

次の出力が表示されます。

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

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

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を再コンパイルします。

次に、FreeBSD10.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ファイルを作成および編集し、次のパラメーターを追加します。 your_server.example.comをFQDNに置き換え、example.comをドメイン名に置き換えます。

vim /etc/mail/relay-domains
/ etc / mail / relay-domains
your_server.example.com
example.com

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

vim /etc/mail/local-host-names
/ etc / mail / local-host-names
your_server
your_server.example.com

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

vim /etc/mail/access
/ etc / mail / access
smtp.sendgrid.net      OK
GreetPause:localhost    0

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

vim /etc/mail/authinfo
/ etc / mail / authinfo
AuthInfo:smtp.sendgrid.net "U:root" "I:smtp_username" "P:smtp_password" "M:LOGIN"
AuthInfo:smtp.sendgrid.net:587 "U:root" "I:smtp_username" "P:smtp_password" "M:LOGIN"

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

makemap hash access < access
makemap hash authinfo < authinfo

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

vim /etc/mail/your_server.example.com.mc

以下に示すように、dnl define( SMART_HOST’、your.isp.mail.server')ブロック、およびdnl Uncomment the first line to change the location of the defaultブロックの間に次の構成行を挿入します。

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

/etc/mail/<^>your_server.example.com<^>。mc
dnl define(`SMART_HOST', `your.isp.mail.server')

dnl SET OUTBOUND DOMAIN
MASQUERADE_AS(`example.com')
MASQUERADE_DOMAIN(example.com)
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

変更を適用する前に、上記の構成について少し説明します。 最初のブロックは、送信メールがドメインexample.comから送信されているように見せたいことをSendmailに通知しています。

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

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

service sendmail start

構成の更新:

make
make install restart

Sendmailを再起動します。

service sendmail restart

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

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

適切なセットアップのためのすべての手順を実行したので、すべてが機能していることを確認しましょう。

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

mailx [email protected]

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

Subject: test

次に、カーソルとテストメールの本文を書き込む機能が表示されます。 testをもう一度書き、ENTERをもう一度押します。

test

メッセージの作成が完了したことをmailxに伝える必要があります。 これを行うには、メッセージを1つの.で終了し、最後にもう一度ENTERを押す必要があります。 その確認として、すぐにEOTが表示されます。

.
EOT

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

mailq

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

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

今すぐメールをチェックして、メッセージが届いたことを確認してください。 [email protected]からのものである必要があります。

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

tail -f /var/log/maillog

ログ出力で探している2つのキーは次のとおりです。

  • Sent (<message id> Message accepted for delivery)
  • relay=smtp.sendgrid.net. [208.43.76.147], dsn=2.0.0, stat=Sent (Delivery in progress)

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

Mail Log
Feb 11 04:09:13 your_server sm-mta[49080]: t1B49CW0049080: from=<[email protected]_server>, size=331, class=0, nrcpts=1, msgid=<[email protected]_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=<[email protected]_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つのターミナルセッションを開いて、一方でtail -f /var/log/maillogコマンドを実行したままにし、もう一方でテストメッセージを送信することができます。

結論

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

ご不明な点やご意見がございましたら、以下にご記入ください。