#
# Presentation mgp-source of antibadmail ipsj-DSM35 2004/9/24
# $Id: abm-dsm35.mgp,v 1.5 2004/09/24 14:52:54 yuuji Exp $
#
%include "./style.mgp"
# %bgrad <xsize> <ysize> <nuncolor> <dir> <zoomflag> <colorlist...>
%page
%nodefault
%bgrad 0 0 128 0 1 "#1a6b86" "#1a6b86" "#7faec8", fore "lemonchiffon"
# %bgrad 2 2 128 135 1 "pink" "white", fore "#1a6b86"

%center

%size 8, font "thick", center
spam対策に特化した
SMTP wrapperの実装と検証


%font "thick", size 6
東北公益文科大学
広瀬雄二・大駒誠一


#################################
%page

背景


	電子メイルが生活にも浸透
	発信コストが低い
	良いことにも便利
	悪いことにも便利

%pause, center, size 7
↓
迷惑メイルが増大

#################################
%page

迷惑メイル



	悪徳業者による広告等の送信
		UBE(Unsolicited Bulk E-mail)  (通称spam)
		Webなどから自動収集したアドレスに無差別に送る
	ワームやウィルスの繁殖活動による送信
		感染PC所有者のアドレス帳などを参照して発信
			所有者の正規のアドレスから送ることもある
			詐称アドレスから送ることもある
			いずれにせよ中味は感染プログラム

本論で扱うのは主に前者


#################################
%page

メイルフィルタリング


spamを除外するためのフィルタ

	コンテンツフィルタ
		bogofilter, spamassassin などが有名
		一度全て受け取る
		受信したメイルの本体を走査して疑わしきパターンにマッチするものをspamと判定
		spamと判定したものは一時的ゴミ箱行き
%pause, size 7
          ↓
%leftfill
		頑張るのは受信側の計算機 → CPU負荷が上がる
		送信者はうまく送れたので満足‰
%pause

受け取る前に水際で食い止めたい!


#################################
%page

SMTPのHELO, MAIL FROM, RCPT TO

SMTP(Simple Mail Transfer Protocol) でのメイル送信前に必要な3要素

%center
%image "smtp.png"
%leftfill
	HELO <自己ホスト識別名>
	MAIL FROM: <実際の差出人アドレス>
	RCPT TO: <実際の受取人アドレス>


#################################
%page

SMTPレベルでの受信拒否

# SMTP(Simple Mail Transfer Protocol) でのメイル送信前に必要な3要素

	HELO <自己ホスト識別名>
	MAIL FROM: <実際の差出人アドレス>
	RCPT TO: <実際の受取人アドレス>

正常なメイルサーバから発せられる正常なメイルであれば、どれも正しい情報を送って来るはず。

	偽造されたもの、でたらめなものがあればそれはspamと考えられる!?
%pause
確かめてみた。

#################################
%page

Test case with qmail patches

2002/12〜 qmail-1.03のqmail-smtpdにパッチを当てたものでspam拒否実験
(http://www.gentei.org/~yuuji/software/qmpatch/)

	MAIL FROMがブラックリストに一致するか
	MAIL FROMに@を含まないでたらめ文字列か
	MAIL FROMのドメイン部が存在しないドメインか
	RCPT TOがブラックリストに一致するか

などの条件に一致するものは、SMTPエラーコードを返して受信拒否する。
%size 4
(TCPパケット的に拒否するとセカンダリサーバから流れ込むので×)



#################################
%page

qmail patches の成果

2003年11月19日〜11月26日の7日間の結果

	接続総数 8031
	受信許可 4897
	受信拒否 3134

うち、すり抜けて受信してしまったのは63通
(報告をもらえたもののみ)
    拒否総数からみた比率は63/(63+3134)≒0.0197≒2%

	約98%のspamが軽いCPU負荷で撃退できる
	全てのMTA(qmail以外)でも使えるはずだ

#################################
%page

"antibadmail" SMTP wrapper

spam control に特化したSMTPラッパー
	外部からのSMTP接続を受け、受信するか否かだけを判定して実際のMTAに渡す。
%center
%image "wrapper.eps" 0 80 60
%leftfill, size 4
MDA: Mail Delivery Agent

#################################
%page

MTAとの組み合わせ方

【qmailの場合】
	qmail-smtpd 起動スクリプトを以下のように変更
%font "typewriter"
       ..... qmail-smtpd ....
                ↓
       ..... antibadmail qmail-smtpd ....

%font "standard"
【qmail以外の場合】
	元のMTAを別ポートで動かす(例:10025番)
	qmail-smtpd起動スクリプトと同様のものを作成し
       ..... antibadmail mconnect 10025
   とする
%size 4

※mconnectはSMTPサーバとstdioで通信するための ucspi-tcp 付属ツール

#################################
%page

ブラックリストの作成
	badheloデータベース
		拒否したいHELO文字列のリスト → badhelodir/ へ

	badmailfromデータベース
		拒否したいFROMアドレスのリスト → badmailfromdir/ へ

	badrcpttoデータベース
		拒否したいRCPT(宛先)のリスト → badrcpttodir/ へ

	smtp.cdb
		tcpserverの接続ルールデータベース
		接続クライアントのIPアドレス(またはドメイン)に応じて環境変数をセットする
			常に信頼できるホストなら RELIABLECLIENT
			常に拒否すべきホストなら BADHOST
			その他ホワイトリスト等

#################################
%page

datadir形式によるデータ管理


	1つのディレクトリにデータを集約
	1エントリは同名のファイルで表現
	ファイルの中味は不問(touchで良い)
	ファイルのタイムスタンプがエントリの生成日時

badheloデータベースの例...
%pause
%system "./k24"


#################################
%page

運用実験結果

2004年8月17日〜(5日間)

  接続総数  受信許可  受信拒否
      8635     3498       5137
        -      40.5%      59.5%
%pause
%size 4


(2003年11月19日〜7日間の結果)

  接続総数  受信許可  受信拒否
      8031     4897      3134
        -      61.0%     39.0%

#################################
%page

拒否理由の内訳

期間中の外部からのSMTP接続拒否全てについて調査

%center
%image "rejtable.png" 0

#################################
%page

拒否結果の正当性

評価期間中
	間違って拒否してしまったもの(第1種の誤り)
		2件
%pause

	拒否すべきなのに受けてしまったもの(第2種の誤り)
		47件(推定)
		全体(5137+47)からみた割合は約1%


第2種の誤りをもっと減らすのは難しいが、コンテンツフィルタと組み合わせることでほぼ完ぺきに駆除できるだろう。
コンテンツフィルタのためのサーバ負荷も軽減できる。

#################################
%page

検討


	qmail patch と同等以上のspam拒否効果が得られた
	パッチ形式からの脱却によりMTA挙動全体への依存がなくなった
		既存のシステムへの組み込みが容易
		改良が容易
		元のsmtpdの信頼性を下げない
	詳細ログを見ることでspammerの動向をつかみやすい

#################################
%page

その他


	qmail以外のMTAではリレーコントロールも面倒を見る
	SMTP-AUTHはスルーしているが自前で持つのも良い
	TLSは非対応だが ssl-wrapper を使うのが美しいだろう(未調査)


#################################
%page

結論


	SMTPレベルでのspam拒否は効果的
	送信そのものを失敗させることは有意義
	spam control, relay control は wrapper で面倒見るのが効率的

%pause, center, size 7
メイルサーバ管理者は
積極的に導入しましょう

#################################
%page

antibadmailに関する情報

	Webページ
		http://www.gentei.org/~yuuji/software/antibadmail/

	プログラムソース
%size 4
    % cvs -d :pserver:anonymous@yatex.org:/qmail  ＼
       co antibadmail

%size 5
	spamデータベース
%size 4
    % cvs -d :pserver:anonymous@yatex.org:/qmail ＼
       co spamdb

%size 5
	紹介文献
%size 3
     ソフトバンクパブリッシング UNIXUSER 2004年11月号

#################################
%page

余談


個人では、antibadmail+qmail のSMTPサーバと、しょぼいコンテンツフィルタを組み合わせて使用。
%size 3
メイルのヘッダをgrepして
  Content-Type: text/html;
または
  Content-Type: text/alternative;
をゴミ箱行きさせているだけ(高尚な理論何も無し♭)。

%size 5
spamを1日1通もらうかもらわないかという程度...
%size 3
(個人アドレスに限定)


%size 6
おためしあれ
