電子メールの不正な中継からの防御

東北大学ベンチャー・ビジネス・ラボラトリー 中村和浩

日本酸素(株)勤務 北村祐一郎

1 はじめに

 sendmailに不正中継対策の機能が付加されてから,4年近くが ちました。電子メールの不正な中継に対して制限を加えることはもはや常識の感もあります。TAINS 内においても,既報(*1)を基に大部分の部局,研究室にて対策が施されていることと思います。しかし,最近はPC-UNIXが普及しており,個人利用のパソコンにおいて知らないうちにsendmailなどのネットワークサービスが起動している場合があります。また,qmail等の普及により,電子メールサーバをsendmailを用いないで設定する場合も増えてきています。そこで,本稿では,SMTPによる電子メールの中継について簡単に述べ,不正中継対策(spam対策)の基本となる点を説明したいと思います。また,起動スクリプト等の設定ファイルについて触れ,不必要なメールサーバを起動しないようにする方法について説明します(*2)


(*1) SuperTAINS ニュース No.15:``電子メールの不正な中継からの防御'',http://www.tains.tohoku.ac.jp/news/st-news-15/2234.html

(*2) なお,電子メールサーバの設定,インストールの仕方は,サーバやOSの種類,プログラムのバージョン等によって大きく異なるため,設定方法をホームページにまとめて記載する予定です。http://www.ja7yaa.org.tohoku.ac.jp/spamをご参考の上,設定下さい。また,お薦め版sendmail.cfの配布をこのホームページ上でおこなっています。是非ご利用下さい。


2 電子メールの不正な中継

2.1 spamとは

 極めて大量に,無差別的に配布する電子メールは,spam(スパム),と呼ばれます。アダルトホームページ宣伝,マルチ商法,商品の勧誘販売等,ほとんどが不要で迷惑な広告であることもあり,多くの人から嫌われています。最近では,携帯電話に送付される迷惑メールもspamと呼んでよいでしょう。spamの多くはメールの中継機能を悪用し,第三者のメールサーバを無断で中継地点として利用します。100万通の広告を配布するのに,1000か所のメールサーバに1000の宛て先を指示して再配布させれば,短時間で処理することができますし,発信者を偽ることで,クレームを回避することもできます。

 悪用されたメールサーバは,一時的に処理負荷が増大する被害を受けるほか,問題のメールの発信元であるという疑いをもたれる可能性があります。受けとった人から,中継したメールサーバやその組織の担当者へクレームの電子メールが送られることも少なくありません。TAINS を含めて,インターネットと通信できるワークステーションなどの管理者には,spamのような不正な中継を防止するように設定してメールサーバを運用することが期待されています。

2.2 電子メールの中継

 インターネットの電子メールは,中継の繰り返しにより配送するのが基本となっています。通信路の断続の多い時代においては相手と直接通信する経路が確保できない場合が多かったため,この中継機能は非常に有効なものでした。バケツリレー式に転送してもらうことで,遠くの相手に電子メールを送っていたのです。この場合,メールサーバ(特に,異種のネットワークを接続している組織に属するサーバ),においては組織外部からのメールを組織外部に転送する必要がありました。しかし,最近は常時接続が普及し,直接相手先のメールサーバと交信が可能なためバケツリレー式の中継が必要な電子メールはほとんど無くなってきています。(*3)

 現在は,メールサーバの機能を持たないパソコンから電子メールを受けとり,相手のメールサーバに転送する機能としてこの中継機能が利用されている場合がほとんどです。この場合,組織外部から組織外部への中継機能は無駄なばかりかspamの送信者に悪用される温床となります。図1に正しい中継動作と中継機能を悪用された不正な中継動作の例を示します。第2.4節で説明するように,送信元のメールアドレスを詐称する電子メールを送信することは容易であり,詐称された送信元は無実の罪をきせられることになります。


(*3) とはいえ,停電時等の転送先としてMXレコードのセカンダリ指定がなされている場合は,組織外部 から 組織外部への中継機能が必要な場合もあります。


図1:電子メール中継の模式図

2.3 SMTPサーバとしてのsendmail

 数年前までは,メールサーバの大部分がsendmailを利用していましたが,巨大で複雑なプログラムのため,セキュリティホールが頻繁に発見されることや設定の複雑さといった点から,qmailやpostfixといったメールサーバに移行している所も多くなってきています。しかし,大部分のUnixシステムにおいて標準装備となっているため,いまだにsendmailの利用率は高いものがあります。

 sendmailの歴史は古く,UNIXが登場した時代にさかのぼります。そのため,良い面も,悪い面も含めて過去の影響を強く引きずったプログラムとなっています。1998年まで,フリーソフトとして開発がすすめられてきましたが,その後,開発者のEric Allman氏により, Sendmail社が設立され,商品化されています。こうした背景もあり,1999年2月に8.9.3が発表されて以降 2000年3月に8.10.0が出るまで,一時的に無償配布版の更新が停止していましたが,現在でも無償配布は依然として続けられています。無償配布版のsendmailは,2002年3月20日現在で,8.12.2が最新バージョンとなっており,SMTP_AUTHやRBL(Real Time Black List)の対応が含まれています(*4)

 8.8.*において不正な中継の防止機能が付加されており,8.9.*からは,メール中継をしない設定が標準となっています(*5)。不正な中継の防止という点から考えると,sendmail 8.9.3で充分ではありますが,セキュリティの対策上常に最新版をインストールする方がよいでしょう(*6)


(*4) 新しい機能がはいると,必ずといってよいほど,バグやセキュリティホールが見つかるものです。特に,sendmail 8.11.0 - 8.11.5では,ローカルユーザがメールキューに関する情報を不正に入手できる可能性が指摘されており,8.11.6 または 8.12.2へのアップグレードが強く推奨されています。

(*5) qmailや,postfixは開発当初からメールの中継をしない設定が標準です。

(*6) 今のところ,sendmail 8.9.3及び sendmail8.10.2においては,深刻なセキュリティホールの報告はありませんが,sendmail8.12から,実行ファイルに対してsetuidを必要としなくなっており,セキュリティ対策が強化されています。


2.4 電子メールにおけるTCP/IPパケット

 インターネット(TCP/IPネットワーク)上においてデータはIPパケットに包まれて転送されます(図2参照)。電子メールについても例外ではありません。ひとつのパケットには,いろいろなヘッダ情報が含まれますが,ネットワーク設定で利用する要素には,発信元のIPアドレス,送信先のIPアドレスがあります。こうしたパケットのヘッダ部分を変更するのは困難であり,IPアドレスを偽ることは容易ではありません。しかし,電子メールのヘッダ情報(From: ,To: や Cc:といった情報)は,パケット本文のデータとして与えられるものであり,こうした,From:や To:の部分を偽るのは非常に容易です。


図2:電子メールが送付される際のパケットの概念

2.5 対策の概略

 spamの対策にあたっては,このIPアドレスを利用する方法と電子メールのヘッダ情報(*8)。  その際,プライベートアドレスを使用している場合は,そのIPアドレスを記述するのを忘れないようにして下さい。情報シナジーセンターのPPPサービスを利用している場合は 192.168.1.x からの中継を許可する設定にすれば,情報シナジーセンターへPPP接続したとき,部局のメールサーバを用いた中継動作ができるようになります。

 設定ファイルは IP アドレスもしくはネットワークアドレスといった数字,もしくは,ドメイン名やホスト名といった文字で指定する方法が可能です(*9)。使っているパソコンが全てDNSに登録されていない限り,IP アドレスで指定する方が間違いが少なくてよいと思われます。


(*7) 厳密に言うと,メール先頭部分(ヘッダ)に記述されたFrom:やTo:の行を直接参照するのではなく,SMTP接続時にやり取りされるMAIL FROMやRCPT TOといった情報です。これらはFrom: や To:に記述された情報から,Outlook等のメール送信プログラムが生成します。

(*8) 研究室のサーバの場合,研究室に割り当てられているサブネットからの中継を許可すれば充分でしょう。

(*9) ドメイン名で指定した場合,DNSを用いてドメイン名からIPアドレスへの変換がおこなわれますので,結局はIPアドレスの情報を利用します。


3 不要なサービスの停止

3.1 サービス起動の確認

 もし,お使いのワークステーションやPC-UNIXが計算処理などの目的で使うものである場合には,メールを中継する機能が不要ですから,sendmail等のメールサーバのプログラムを止めて下さい。メールサーバに限らず,不要なサービスは悪意を持ったユーザからの攻撃対象となり得ます。停止させましょう。サービスが起動しているかどうかは,psコマンドを用いて確認できます。

ps ax|moreとして(SunOS 5.xの場合は ps -ef|more)
root xxx x x xxx xx x x:xx /usr/lib/sendmail -C /etc/mail/sendmail.cf -bd -q15m
root xxx x x xxx xx x x:xx qmail-send
root xxx x x xxx xx x x:xx smtpd
root xxx x x xxx xx x x:xx master

などといったコマンドが見られる場合,sendmail,qmail等のメールサーバが起動しています。必要が無いのならすぐサービスを停止しましょう。

 また,inetd,xinetdから起動するように設定されている場合は,psコマンドでは動作が確認できない場合があります。/etc/inetd.conf,あるいは/etc/xinetd.confを確認して,qmail,exim,sendmail,masterと書かれている行が # などでコメントアウトされているかどうか確認下さい。# が行の先頭に無い場合は,接続要求があった場合その行が実行されます。必要が無いのなら,サービスが記述された行の先頭に # を加えて,コメントアウトしてしまいましょう。

 以下代表的なシステムについて起動処理の設定ファイルにおけるサービスの停止方法について簡単に説明します。

3.2 SunOS(SunOS 4.*以前)の場合

 SunOS 4.*では,/etc/rc.localにおいて,sendmailが起動されます。/etc/rc.localの部分から,sendmail を起動する行の先頭に # を付けて,無効にします。また,現に走っている sendmail のプロセスを kill コマンドで停止します。

3.3 Solaris2.*(SunOS 5.*)以降の場合

 SunOS 5.*では,/etc/rc2.dの S88sendmailという起動スクリプトでsendmailが起動されます(*11)。その後 /etc/init.d/sendmailを stopオプション付きで実行することで,sendmailが停止します。

/etc/init.d/sendmail stop

Tru64 UNIX(OSF/1,Digital UNIX) や HP-UX などの,いわゆる SystemV 系 UNIX も同様の方法でsendmailを停止することができます。


(*10) 実際は/etc/init.d/sendmailのハードリンクです。

(*11) 大文字のSで始まらなければ,どんなファイル名でも構いませんし, /etc/init.dの下に実体があるので/etc/rc2.dのファイルは消してしまっても構いません。


3.4 Linuxの場合

 ディストリビューションによって異なりますが,基本的にはSunOS5.*と同じで,/etc/rc.d/rcX.dのディレクトリのSで始まるファイルが順番に,startオプションを伴って実行されます。ここでXは/etc/inittabに記述されているディフォルト・ランレベルです。ランレベルが5の場合/etc/rc.d/rc5.d/の下にあるスクリプトが実行されます。このディレクトリにあるメールサーバを起動するスクリプトのファイル名をSunOS5.*と同様に変更して下さい。Linuxの場合はsendmail以外にもqmail,postfix,exim等が起動する場合があります。ファイル名としてこれらのメールサーバの名前が含まれていますので,こうしたファイル名の先頭の文字をS以外の文字に変更して下さい。ディストリビューションによっては起動時の設定をグラフィカルに設定できるものもあります。こうしたプログラムを利用してみるのもよいでしょう。その後,現に走っているプロセスを killコマンドで停止するか,再起動して下さい。

3.5 FreeBSDの場合

 起動時に実行されるスクリプトは /etc/rcですが,実行時に,/etc/rc.confというファイルを参照するため,この設定ファイルを変更すれば充分です。/etc/rc.confにsendmail_enable="YES"という記述がある場合はsendmail_enable="NO"と変更して下さい。無い場合はsendmail_enable="NO"を付け加えて下さい。その後,現に走っている sendmailのプロセスを kill コマンドで停止するか,再起動して下さい。

4 外部プロバイダから学内のSMTPサーバを利用するために

 図1に示すように,プロバイダ等ヘPPP接続した状態でTAINS 内のSMTPサーバを利用したい場合があります。しかし,この場合,組織外部から組織外部の中継というspamメールと同様の中継になり,spam対策をおこなうと,電子メールが送付できないという状況が生じます。この場合,解決策として2つの方法が考えられます。

(1) 送信時にパスワード認証機能を付与する方法

 SMTP AUTH または POP before SMTPという手法を用います(*12)

(2) 送信サーバ(SMTPサーバ)はプロバイダのものを利用する方法

 電子メールを送信する機能と受信する機能は 別のプログラムが対応しているため,電子メールにおいて送信するサーバと受信するサーバを個別に設定することができます。POPサーバとしてTAINS 内のサーバを設定すれば,普段通り電子メールを読むことができます。また,発信元のメールアドレスは書き換えが可能であるためプロバイダのSMTPサーバへ From:行が,hoge@hoge.tohoku.ac.jpというメールを送れば,普段学内から送付しているのと同じように見せられます。


(*12) ここでは詳細な設定等は割愛させていただきます。

5 最後に

 部局単位でプライベートネットワークへの移行が進んでいる所もありますが,TAINS ではクラスBという,豊富なIPアドレス資源があるため,グローバルIPアドレスに個人のパソコンを繋ぐ例も少なくありません。グローバルIPアドレスのパソコンは常に攻撃を受けており,セキュリティホールがある場合は,重大な事態を招くということを頭に置きながら,自分のコンピュータの設定を今一度確認いただければ幸いです。

参考文献