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.
目標
このチュートリアルでは、次のことを行います。
- サーバーが外部サービスで認証できるように、SASLサポートを使用してSendmailを再コンパイルします
- Sendmailメールサーバーを適切な設定で構成します
- 送信メールをテストして、サーバーからメールが送信されていることを確認します
前提条件
このガイドを開始する前に、次のものが必要です。
- A FreeBSD 10.1 server
- rootアカウントまたはこのtutorialに続くsudo権限を持つアカウントへのアクセス
- コマンドラインからテキストファイルを編集する方法に関する実用的な知識
- 次のようなお気に入りのテキストエディタをインストールする必要があります
nano
またvim
- テスト用の無料の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
pwcheck_method: saslauthd
次に、 saslauthd
SASL認証のサービス。 プロンプトが表示されたら、デフォルトを受け入れてOKを選択します。
portmaster security/cyrus-sasl2-saslauthd
システム構成ファイルを編集します /etc/rc.conf
ファイルの最後に次の構成パラメーターを追加します。 交換 your_hostname
サーバーのホスト名を使用します。
vim /etc/rc.conf
hostname = "your_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
ファイルに次のパラメータを追加して、システムが使用するSASLSendmailオプションを認識できるようにします。
vim /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
your_server.example.com
example.com
を作成および編集します local-host-names
ファイル、次のパラメータを追加します。 変数をローカルホスト名に置き換えます。
vim /etc/mail/local-host-names
your_server
your_server.example.com
を作成および編集します access
ファイル、次のパラメータを追加します。 (変更する必要があることに注意してください smtp.sendgrid.net
SendGrid以外のプロバイダーを使用している場合はアドレス。)
vim /etc/mail/access
smtp.sendgrid.net OK
GreetPause:localhost 0
を作成および編集します authinfo
ファイル、次のパラメータを追加します。 交換 smtp_username
と smtp_password
SendGridアカウント名とパスワードを使用します。 別の外部メールプロバイダーを使用することを選択した場合は、 smtp.sendgrid.net
プロバイダーのサーバーアドレスへの両方の行の値。
vim /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 access
と authinfo
ファイルは実際には、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などを設定する必要がある場合があることに注意してください。 なりすましの報告を避けるための記録。)
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 [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 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つのターミナルセッションを開いて、 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アプリケーションは、最小限の構成または構成なしでこれを利用できるようになります。
ご不明な点やご意見がございましたら、以下にご記入ください。