(2003/03/04更新) sendmail 8.12.7までのバージョンに共通するセキュリティホールが2003年3月4日に報告されましたので、sendmail 8.9.3へのセキュリティパッチの適用を反映しました。
(2003/04/01更新) 新たなセキュリティホールが2003年3月30日に報告されましたので、sendmail 8.9.3へのセキュリティパッチの適用を反映しました。
|
ここでは、UNIX系のOSを使った単一のメールサーバを設けることを前提として、SMTPサービスプログラムsendmailの設定方法を説明します。
スパムメール中継拒否対策を施した設定ファイルsendmail.cfのテンプレートを提供していますので、参考になさってください。
ここでご紹介する設定方法はsendmail 8.9.3のものです。提供しているsendmail.cfのテンプレートは、8.9.3への適合を確認しているものです。8.12.7までのバージョンに共通するセキュリティホールが2003年3月4日および3月30日に報告されましたが、それ以外に8.9.3のセキュリティホールは発見されていませんので、ここで述べる方法でメールサーバを安全に運用できると思います。
1. sendmail 8.9.3を入手する
sendmail 8.9.3を入手してください。
IIJなどからダウンロードできます。ファイル名は「sendmail.8.9.3.tar.gz」です。
また、
sendmailコンソーシアムのFTPサイトからsendmail 8.9.3セキュリティパッチファイル「sendmail.8.9.3.security.cr.patch」および「prescan.tar.gz.uu」を入手してください。
もしUNIXマシンがまだインターネットに接続できないなら、Windowsのブラウザでダウンロードして、Windows対応のFTPクライアントソフト(
FFFTPなど)でサーバに送り込むのが簡単でしょう。
2. sendmailをインストールする
入手したsendmail 8.9.3のファイルとそのセキュリティパッチのファイルを作業用ディレクトリに置き、そのディレクトリ位置で以下のようにコマンドを打ちます(「make install」を行う直前にsuコマンドでrootになってください)。
tar xvfz sendmail.8.9.3.tar.gz
uudecode -p < prescan.tar.gz.uu | gunzip -c | tar -xf -
cd sendmail-8.9.3
patch -p0 < ../sendmail.8.9.3.security.cr.patch
cd src
patch < ../../prescan.8.9.3.patch
cd ..
make
su
make install
|
これでsendmailがインストールされます。
今までsendmailがインストールされていなかった場合は、ブート時に自動実行されるコマンドを収めたファイルに
/usr/lib/sendmail -bd -q30m
|
というコマンドを追記してください。ここで「-q30m」は、一時的なトラブルと考えられる原因で配送が失敗した場合の再試行間隔を30分と指定するものです。1時間なら「-q1h」と指定します。
3. sendmail.cfを作成する
設定ファイルsendmail.cfの作成は、慣れていない人には非常にやっかいです。そこで、
Gabacho-Netのメールサーバのsendmail.cfを真似ていただく方法を説明します。
まず、sendmail.cfのテンプレートを
ここからダウンロードしてください(Microsoft Internet Explorerをお使いの方は、
ここを右クリックして「対象をファイルに保存」を選んでください)。
次に、それをサーバに置き、viやmuleなどのエディタを使って、以下に示す文字列を検索して編集してください。
- DmDOMAINNAME
DOMAINNAMEの部分をあなたのドメイン名に置き換えてください。たとえば「mydomain.co.jp」のような形です。「Dm」の後にスペースを入れないでください。
- DwHOSTNAME
HOSTNAMEの部分をメールサーバのホスト名に置き換えてください。たとえばメールサーバの完全修飾ドメイン名が「myhost.mydomain.co.jp」である場合は、「myhost」に置き換えます。「Dw」の後にスペースを入れないでください。
- C{LocalIP} 192.168.0 222.222.222.1 222.222.222.2 222.222.222.3 222.222.222.4 222.222.222.5 222.222.222.6
192.160.0は、サイト内で使うプライベートIPアドレスブロックです。192.168.0.1〜192.168.0.254を使う場合はこのままでかまいません。別のプライベートIPアドレスを使う場合は、それに応じて書き換えてください。
222.222.222.1〜222.222.222.6は、ISPから割り当てられたグローバルIPアドレスで置き換えます。たとえば8個のIPアドレスの割り当てを受けた場合は、そこからネットアドレスとブロードキャストアドレスを除いた6個のIPアドレスを列挙してください。
- C{LocalDom} DOMAINNAME
DOMAINNAMEの部分をあなたのドメイン名に置き換えてください。
- O MaxMessageSize=1000000
1000000の部分は、メールの大きさ(ヘッダと本文を合わせたバイト数)の制限値です。制限値を変えたい場合は、ここを書き換えてください。無制限にしたい場合は、行頭に「#」を入れてコメントアウトします。
以上のように編集したファイルを、rootになって/etcディレクトリの下に置いてください。なお、所有者はrootとし、所有者以外に書き込み権を与えないようにモードを設定してください。
4. 設定の試験
sendmail.cfが正しくできているかどうかを試験するには、sendmailをテストモードで起動します。以下に、gabacho-unet.ocn.ne.jpドメインでの例を示します(入力する部分を下線で示します)。
おことわり gabacho-unet.ocn.ne.jpドメインは、このページを最初に作成した時のものであり、現在は無効になっています。
% /usr/lib/sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 0 root@gabacho-unet.ocn.ne.jp
rewrite: ruleset 0 input: root @ gabacho-unet . ocn . ne . jp
…(省略)…
rewrite: ruleset 0 returns: $# local $: root
> 0 root@example.ad.jp
rewrite: ruleset 0 input: root @ example . ad . jp
…(省略)…
rewrite: ruleset 0 returns: $# smtp $@ example . ad . jp . $: root < @ example . ad . jp >
>
|
このように、自ドメインの適当なアドレスを指定した時に最後に「rewrite: ruleset 0 returns: $# local $: …」、他ドメインの適当なアドレスを指定した時に最後に「rewrite: ruleset 0 returns: $# smtp $@ …」が現れればOKです。
sendmailのテストモードを終了させるには、Ctrl+Dを打ってください。
5. スパムメール対策の試験
スパムメールの中継を拒絶する設定がうまくできているかどうかを試験するには、もしISPのダイヤルアップ接続サービスを契約しているなら、それを使う方法があります。ダイヤルアップ接続で、送信メールサーバとして自サイトのメールサーバを指定してメールを送信してみます。自ドメイン宛のメールは送信できて、他ドメイン宛の送信がエラーになればOKです(常時接続サイトから見てダイヤルアップ接続点は外部ですから、外から来て他ドメインへ行くメールを拒絶するのが正常です)。
なお、ダイヤルアップ接続でメールを正常に送信するには、[付録 A]をご覧ください。
あるいは、不正中継チェックサービスを利用する方法もあります。たとえば
長崎ネットワークサービスがそれを提供してくれています。自分のメールサーバを完全修飾ドメイン名で指定して、以下のような結果になればOKです(
Gabacho-Netの試験結果です)。
a.gabacho-unet.ocn.ne.jp (pri=10)
…(省略)…
正常:中継は拒否されました。
合格:
あなたがお使いのMXサーバーは、不正な中継を行わないように設定されています。
|
[付録 A] 外出先から送信可能にする方法
外出先でISPのダイヤルアップ接続を利用する場合、自サイトのメールサーバを送信サーバとして指定すると、スパムメール対策のために、他ドメイン宛のメールは拒絶されてしまいます。しかし、
- ダイヤルアップ接続に利用するISPが限られている
- そのISPのアクセスポイントのIPアドレスはDNSで逆引きでき、さらにその逆引き結果の完全修飾ドメイン名からそのIPアドレスを順引きできる(つまり、ISPのDNSがまともに設定されている)
という条件が満たされる場合には、以下の方法によって送信を可能にすることができます。
まず、エディタでsendmail.cfの中の次の二つの行を検索します。
- #F{RoamDom} -o /etc/sendmail.roamdomain
- #F{RoamUsers} -o /etc/sendmail.roamusers
それぞれ、コメントアウトを解除してください(行頭の「#」を削除します)。
そして、次の例のように、ISPのドメイン名を記述した/etc/sendmail.roamdomainファイル、およびユーザーの送信元メールアドレスを記述した/etc/sendmail.roamusersファイルを作ります。
cd /etc
echo isp.ne.jp > sendmail.roamdomain
echo taro@mydomain.co.jp > sendmail.roamusers
echo hanako@mydomain.co.jp >> sendmail.roamusers
|
以後、修正時にはエディタで編集してください。いずれのファイルも、記述項目が複数ある場合は一行に一つずつ書きます。
|
これらのファイルの作成あるいは修正が終わったら、次のようにしてsendmailを再起動します。
ps ax|grep sendmail
284 ? S 0:00 sendmail: accepting connections on port 25
kill -TERM 284
/usr/lib/sendmail -bd -q30m
|
psコマンドで調べたプロセス番号(ここの例では284)をkillコマンドで指定します。
|
ISPを限定しなくてすむ方法としては、まずPOP3でアクセスして認証をパスしたら送信できるという方式があります。しかし、付加プログラムが必要で、
qpopperやsendmail.cfにパッチを当てなければならないので、システム管理に慣れていない人には荷が重い方法です。
ここで説明した方法は、同じISPのユーザーが自サイトのユーザーのメールアドレスをかたればスパムメールを送信できてしまうという問題があります。しかし、その可能性は低いでしょうから、小規模サイトではこの簡単な方法でもよいだろうと思います。
ISPのメールサーバを利用できる契約があれば、外出先では送信にそれを利用する方が、ここで述べた方法をとるよりもいっそう安全です。メーラーで送信サーバの設定をISPのメールサーバに変更するだけです。メーラーに設定した差出人アドレスは、通常、ISPから割り当てられたものに変更する必要はなく、自サイトのものでかまいません。
[補足] このsendmail.cfの条件
ここでテンプレートとして提供しているsendmail.cfは、以下の条件で作成したものです。
- メールサーバは1台だけ。
- DNSの検索ができるようになっている。
- ホスト名省略のメールアドレス(ユーザー名@ドメイン名)で宛てられた受信メールも受け入れる。
- メールサーバに登録されたアカウントやエイリアスを探られないように、EXPNコマンドとVRFYコマンドを拒絶する。
- スパムメール対策のために、sendmail.cfに登録された自サイトのIPアドレスからのみ他ドメイン宛のメールを送ることができるようにする(よそから来て他ドメインへ行くメールの中継は拒否する)。ただし、必要な場合には、登録されたユーザーが、登録されたISPへのダイヤルアップ接続で他ドメインへ送信することもできる。
ご質問は
お受けしますが、これらの条件からはずれる場合についてのご質問はご勘弁ください。(_"_)