開発者ドキュメント

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

序章

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

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

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

Note: As of July 1, 2022, DigitalOcean no longer supports FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

目標

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

前提条件

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

このチュートリアルは、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

次に、 saslauthd SASL認証のサービス。 プロンプトが表示されたら、デフォルトを受け入れて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 ファイル、次のパラメータを追加します。 (変更する必要があることに注意してください smtp.sendgrid.net SendGrid以外のプロバイダーを使用している場合はアドレス。)

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"

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

makemap hash access < access
makemap hash authinfo < authinfo

次に、いくつかのコマンドを生成した基本構成を編集します。 編集します your_server.mc ファイル。 (あなたはできる ls the /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 以下に示すようにブロックします。

を変更する必要があります smtp.sendgrid.net 例のようにSendGridアカウントを使用していない場合は、プロバイダーのサーバーアドレスへのアドレス。 また、の2つのインスタンスを更新する必要があります example.com メールを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

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

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

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

service sendmail start

構成の更新:

make
make install restart

Sendmailを再起動します。

service sendmail restart

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

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

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

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

mailx your_real_email_address@example.com

プロンプトが表示されたら、次のように入力します test またはあなたが主題のために望むものは何でも、そしてそれから押す ENTER.

Subject: test

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

test

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

.
EOT

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

mailq

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

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

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

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

tail -f /var/log/maillog

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

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

Mail Log
Feb 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: to=your_real_email_address@example.com, 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=<your_real_email_address@example.com>, 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つのターミナルセッションを開いて、 tail -f /var/log/maillog コマンドを一方で実行し、もう一方でテストメッセージを送信します。

結論

You’re now ready to start sending outbound email from your FreeBSD server via SendGrid or any other mail service you like. これで、デプロイするWebサイトまたはWebアプリケーションは、最小限の構成または構成なしでこれを利用できるようになります。

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

モバイルバージョンを終了