2009年6月25日木曜日

FreeBSD でサーバ構築 #14 リレー設定

林檎生活100: FreeBSD でサーバ構築 #13 ドメイン名のメールの受信の続き.今回は,メールクライアントからこのメールサーバをメール送信サーバ(SMTP サーバ)として使用できるように,リレーの設定をする.(次回説明する SMTP-AUTH を使用する場合は,今回の設定は必要ない.)

さて,メールクライアントからメール送信サーバとして使用できるようにするにはどうすればいいのか.逆に言えば,なぜメール送信サーバとして使用できないのかをまず考えよう.

SMTP サーバは,メールを受け取ると基本的には次の2つの処理をする.

1. ローカル配信
2. 転送(リレー)

1のローカル配信は,自ホスト宛のメールということで,どこから送られてきても基本的には受信してローカル配信をする.(メールアドレスさえ知っていれば,誰からのメールでもとりあえず届くよね.)2の転送は,自ホスト宛ではないメールを MX レコードを引いたりして,別のメールサーバに転送するということだ.これをどこから送られてきても処理していたら,問題になってしまうので,転送は制限されている.それゆえ,デフォルトでは,メールクライアントからメール送信サーバとして扱えないようになっている.

なぜ問題になるのか.それは,スパムメールの中継サーバに悪用される可能性があるからだ.(悪用される可能性と書いたけど,誰からのメールでも転送する(オープンリレー)状態で放置しておいたら,スパムを転送しようとしてオープンリレーのサーバを探しているクローラに発見されて悪用される.)なので,FreeBSD の Sendmail では,localhost 以外からのメールを転送はしないようにリレー設定されている.

では,ある特定のホストやユーザからのメールを転送するように設定しようと思う.普通に考えれば,ユーザ認証すればいいんじゃない?と思うところだけど,SMTP はスパムメールという概念すらなかったころの古いプロトコルなのでユーザ認証の仕組みがないんだよね.(ユーザ認証が使えるようにする設定は,次回やろうと思ってはいるんだけどね.)なので今回は,メールは自宅からしか使わないことを前提に,LAN 内のホストからの転送を許可するように設定してみる.

1. /etc/mail/access の変更
リレーを許可するホストを指定するには,/etc/mail/access ファイルに次のような行を追加する.これは,接続したホストの IP アドレスが 192.168.1.xxx であればリレーを許可するというものだ.LAN 内のホストの IP アドレスが 192.168.1.xxx である場合は,この設定でメールクライアントからメール送信サーバとして扱えるようになる.
Connect:192.168.1       RELAY

2. アクセスデータベースを再構築する.
# cd /etc/mail
# make maps

以上で設定完了だ.メールクライアントにこのメールサーバを設定するとリレーが可能になっているはずだ.今回は SMTP サーバと会話してみよう.(ちょくせつ SMTP コマンドを発行するということ.)Mac OS X などサーバではないクライアントから次のようにコマンドを打ってみよう.(適宜ホスト名などは,自分の環境に置き換えてほしい.)
$ telnet 接続先ホスト IP smtp
Trying 接続先ホスト IP...
Connected to 接続先ホスト IP.
Escape character is '^]'.
220 接続先ホスト名 ESMTP Sendmail 8.14.3/8.14.3; Fri, 26 Jun 2009 08:38:17 +0900 (JST)
HELO 接続元ホスト名
250 接続先ホスト名 Hello [接続元ホスト IP], pleased to meet you
MAIL From: 送信元メールアドレス
250 2.1.0 送信元メールアドレス... Sender ok
RCPT To: 送信先メールアドレス
250 2.1.5 送信先メールアドレス... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
To: 送信先メールアドレス
Subject: This is test mail.
This is test mail from Mac OS X.
.
250 2.0.0 n5PNcHsY002853 Message accepted for delivery
QUIT
221 2.0.0 lucifer.legna.org closing connection
Connection closed by foreign host.
$

接続元ホスト IP:192.168.1.7
接続先ホスト IP:192.168.1.255
接続元ホスト名:michael.legna.org(適当で OK.)
接続先ホスト名:lucifer.legna.org
送信元メールアドレス:takuya__at__legna.org
送信先メールアドレス:example__at__example.com

というかんじだ.送信できることを確認してほしい.時間があれば,access の内容を書き換えて実験してみてほしい.また,WAN 側から悪用されるようなリレーが働いていないかどうか,次のサイトにアクセスして調べてみよう.Address to test: の項目に接続先ホスト名 (lucifer.legna.org) を入力し,Test for relay をクリックするだけだ.出力の最後に Relay test result の項があり,All tests performed, no relays accepted. となっていれば WAN 側から悪用されることはないはずだ.

Abuse.net: Mail relay testing



というかんじ.リレーの話を理解してもらえたかな.SMTP がシンプルゆえの設定というかんじ.次回は,Sendmail に SMTP 認証する機能を付加したいと思う.いくつかインストールしなければならないプログラムがあるし,Sendmail をリビリルドしなきゃならないし,かなり面倒くさいかんじなんだよなぁ…….まあ,LAN 内からしか使わないっていう人は,次の回の設定はいらないね.

参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集

0 件のコメント: