FreeBSD10.1でSendmailを使用して外部SMTPサービスを介して電子メールを送信する方法
序章
新しいWebサーバーをセットアップする際の最も一般的なニーズの1つは、電子メールの送信です。 これを行う最も安全で簡単な方法は、サーバーをSendGridやAmazonSESなどのメールサービスに接続することです。 外部サービスを使用すると、サーバーIPがスパム対策サービスによってブラックリストに登録されるなどの落とし穴を回避するのに役立ちます。
このチュートリアルでは、FreeBSDの組み込みSendmailサービスをSendGridに接続して、サーバーから電子メールを送信する方法について説明します。 また、別の外部メールサービスの設定を問題なく調整することもできます。
FreeBSDを初めて使用する場合、私たちが行うことのいくつかは少し怖いように見えるかもしれませんが、FreeBSDプロのようなシステムツールの少しの再コンパイルを行うためにすぐに袖をまくり上げることができます。
目標
このチュートリアルでは、次のことを行います。
- サーバーが外部サービスで認証できるように、SASLサポートを使用してSendmailを再コンパイルします
- Sendmailメールサーバーを適切な設定で構成します
- 送信メールをテストして、サーバーからメールが送信されていることを確認します
前提条件
このガイドを開始する前に、次のものが必要です。
- FreeBSD10.1ドロップレット
- 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
次に、SASL認証用のsaslauthd
サービスをインストールします。 プロンプトが表示されたら、デフォルトを受け入れて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
ファイルを作成および編集し、次のパラメーターを追加します。 (SendGrid以外のプロバイダーを使用している場合は、smtp.sendgrid.net
アドレスを変更する必要があることに注意してください。)
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"
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などを設定する必要がある場合があることに注意してください。 なりすましの報告を避けるための記録。)
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 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
コマンドを実行したままにし、もう一方でテストメッセージを送信することができます。
結論
これで、SendGridまたはその他の好きなメールサービスを介してFreeBSDDropletから送信メールを送信する準備が整いました。 これで、デプロイするWebサイトまたはWebアプリケーションは、最小限の構成または構成なしでこれを利用できるようになります。
ご不明な点やご意見がございましたら、以下にご記入ください。