17.スパムや不要なメールをブロックしよう

スパムや不要なメールをブロックをするには、「中継の制限」の設定(マシン毎の中継、メールサイズ制限、CC:BCC:受領制限、ORDBによる制限)や、メールフィルタを設定してブロックすることになる。

「中継の制限」の設定

「中継の制限」には、次にあげる機能が用意されている。

  • マシン毎の中継
  • メールサイズ制限
  • メールボックスサイズ制限
  • CC:BCC:受領制限
  • ORDBによる制限

「マシン毎の中継」では、制限をかけたい送信元IPアドレスや、送信元エンベロープ(送信元メールアドレス)からのメール受領に対する振る舞いを指定できる。
「マシン毎の中継」の設定次第で、自身のSMTPサーバーと接続中のIPアドレス、または送信元のエンベロープを定義し、受信拒絶の有無を決めることができるようになっている。

「マシン毎の中継」設定ファイル(effect.dat)について

「マシン毎の中継」設定ファイル(effect.dat)での記述では、ドメイン名による指定は送信元エンベロープ(MAIL FROM:)との比較が行われる。メールヘッダFrom:との比較ではないので、その点は勘違いをしないでほしい。エンベロープとメールヘッダの扱われ方の違いは、他の解説サイトを参照してほしい。
つまりドメイン名の指定をする場合は、ネットワークの範囲指定としては設定できない。あくまでネットワークの範囲指定をしたいときは、必ずIPアドレスベースで記述する必要がある。

「マシン毎の中継」設定ファイル(effect.dat)での記述例

[無条件許可]
10.*.*.*
192.168.*.*
192.168.1.*
192.168.1.0/28

[無条件拒否]
192.168.1.0/28 false

[特定IP範囲からの受信・中継許可]
192.168.1.0/28 default
*.*.*.* false

[特定IP範囲からの受信のみ許可]
192.168.1.0/28 norelay
*.*.*.* false

[送信元エンベロープによる無条件許可](※危険)
abc.co.jp
abc@abc.co.jp
a*c@abc.co.jp
 または
abc@abc*.co.jp

[送信元エンベロープによる無条件拒否]
abc.co.jp false
abc@abc.co.jp false
a*c@abc.co.jp false
 または
abc@abc*.co.jp false

#blank false
#<> false
#number false
#nodomain false
#host false

←class A 範囲の無条件許可
←class B 範囲の無条件許可
←class C 範囲の無条件許可
←192.168.1.0〜192.168.1.15のアドレス範囲の無条件許可


←192.168.1.0〜192.168.1.15のアドレス範囲の無条件拒否


←192.168.1.0〜192.168.1.15のアドレスからのみデフォルト条件での中継を可、その他は拒否するとき


←192.168.1.0〜192.168.1.15のアドレスからのみ受信のみ可能にし、その他は拒否するとき



←送信元エンベロープが特定のドメインの場合
←送信元エンベロープが特定のメールアドレスの場合
←ワイルドカードによる送信元エンベロープの場合





←送信元エンベロープが特定のドメインの場合
←送信元エンベロープが特定のメールアドレスの場合
←ワイルドカードによる送信元エンベロープの場合



←送信元エンベロープが空白の場合
←送信元エンベロープが"<>"の場合
←送信元エンベロープのドメイン部が数値(IP)の場合
←送信元エンベロープのドメイン部が空白(アカウントのみ)の場合
←送信元エンベロープのドメイン部がホスト名のみの場合

設定に利用する情報は、前述した「ログを採ってみよう」での「SMTP受信ログ」を参照して決めるとよいだろう。
「SMTP受信ログ(inlog)」の記録フォーマットは以下の通りだ。

<メッセージ番号@自ドメイン> [日付] 接続元IPアドレス 接続元マシン名 送信元アドレス 送信先アドレス1 2 3......

ここで、IPアドレス拒否設定の場合は、上記の"接続元IPアドレス"に記録されたIPアドレスを設定すればよい。
一方、メールアドレスの拒否設定の場合は、上記の"送信元アドレス"に記録されたメールアドレスを設定することになる。

「メール受信時のサイズ制限」

「メール受信時のサイズ制限」は、1メールの受信最大サイズをバイト単位で指定する。
設定すると、指定したサイズ以上のメールは受信拒否され、および指定されたサイズ以上のメールを送信しようとしたときに受領時に拒絶される。

「メールボックスの保管サイズ制限」

「メールボックスの保管サイズ制限」は、全ユーザの1メールボックス当たりの保管サイズをバイト単位で指定する。
1つのメールボックスに蓄えられているメールの総容量が指定サイズを超える場合に受信拒否する場合に設定する。

「"CC,BCC"受領制限」

「"CC,BCC"受領制限」は、1メール送信当たりの配送先数(同報先数の合計)の最大数を指定する。
1メール送信当たり同報先がこの指定を超えた分には、送信拒否をする場合に設定する。


「ORDBによる制限」

「ORDBによる制限」では、"ordb.dat"ファイルが表示される。
"ordb.dat"ファイルでは、オープンリレーデータベース(ORDB)に記載されたデータを元に制限を行う場合に、サービスを実施しているサイトを指定する。DNSBLまたはRBLとも呼ばれることがあるが、これらは基本的に同じものである。
自身のSMTPサーバーに接続してきたIPアドレスを元に、ブラックリストが登録されているデータベースサービスを参照することにより、IPアドレスがブラック判定されてくれば、受信拒絶を決めることができる。

時間がかかってしまって、遅くなることも考えられるため、たとえば、"spamcop(bl.spamcop.net)"のように、有力なサイト1つだけ設定することをお薦めしたい。
なお、デフォルトでコメント行付きで書かれている"relays.ordb.org"は、下のFAQにもあるように、2011年10月現在、閉鎖されて久しいので、決して有効にしないように注意してほしい。思い切って該当行を削除しておくとよい。

「問い合わせないIP」

また、「問い合わせないIP」は、"オープンリレーデータベース(ORDB)"に問い合せる必要のないIPアドレスを指定する。つまり、信頼できるIPのホワイトリストを指定する部分だ。問い合わせをパスすることで、そのIPアドレスからの送信レスポンスを向上させる場合に設定する。内部のLANからの接続時には問い合わせる必要はないので、ローカルIPアドレスを指定しておこう。

オープンリレーデータベースについて

E-Post Mail Serverでは、「ORDBによる制限」によって、問合せサイトのサーバー名の設定を行うと接続時に、ブラックリストに載っているIPアドレスか否かの判定処理をして接続を制限することができる。
このオープンリレーデータベースについて、非営利団体のORDB(open relay database http://www.ordb.org)が、日本国内ではこの種の1つの団体として一般的に知られているが、その他様々なポリシーで作成する団体が公開しているDBがある。
DBによってそれぞれ特徴があるので、特性やレスポンス速度を調べてみて、参照先を決めるとよいだろう。
ただし、問い合わせ先データベースがあまり多すぎても、問合せに時間がかかり過ぎるだけで、受信レスポンスが悪くなるので、1つか、多くても2つのサイト程度の指定にとどめておこう。


「メールフィルタ」設定

「メールフィルタ」設定では、一度受領してから、件名やメールヘッダの条件に基づいて、ふるまいを決めることができる。
「メールフィルタ」は、全体用および、個人用の2種が用意されている。

「メールフィルタ」設定 全体用

「メールフィルタ」設定 個人用

メールフィルタ(mail.dat)ファイルの書式について

"mail.dat"ファイルでは、以下の書式に従って、フィルタしたいメールの特徴を記入する。EPSTRSサービスが、受信したメールデータと比較して問題がある場合、指定した処理を行う。

メールフィルタ(mail.dat)ファイルの書式

Virus:<name>

Received:<token>

Subject:<Subject>

From:<mailaddress>

To:<mailaddress>

Content-Type:<token>

X-Mailer:<token>

X-UIDL:<token>

Body:
<Body token>
BodyEnd:

Folder:<ドライブ>:
<フォルダパス>

Level:<n>















RBL:<URIBL(URI Blacklists)>

Tag:<token>

Forward:<forwardaddress>

Unique-Header:
<unique header>:<token>

Warning:
 <warningmesseges>
WarningEnd:

VirusEnd:

1つのフィルタの始まり

"Recieved"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定

"Subject"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定

"From"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定

"To"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定

"Content-Type"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合
'#blank'を指定
"X-Mailer"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定

"X-UIDL"ヘッダの特徴を定義、項目なしもしくは空白が特徴の場合'#blank'を指定


本文での特徴を記入(最大5行)('#blank'は使えません)


検出メールの保管フォルダを指定 デフォルトは、viruslog


フィルタ条件に一致した場合の対処方法
n=x0x メールのバックアップしない。
n=x1x メールのバックアップする。
n=0xx 通過させる。
n=1xx 拒否する。
n=2xx 本文の先頭に警告メッセージの添付を行い通過させる。
n=3xx Subject:へ"Tag:"で指定した文字列の挿入を行い通過させる。
n=4xx ヘッダとして"Tag:"で指定した文字列の挿入を行い通過させる。
n=5xx "Forward:"で指定したアドレスへ転送する。
n=6xx Subject:へ"Tag:"で指定した文字列の挿入を行い、
    "Forward:"で指定したアドレスへ転送する。
n=7xx ヘッダとして"Tag:"で指定した文字列の挿入を行い、
    "Forward:"で指定したアドレスへ転送する。
n=xx0 送信元IPをEffect.datに登録しない。
n=xx1 送信元IPをEffect.datに登録する。

本文中のURLに記載されたドメインを指定したURIBLに問い合わせする。

定義に一致した場合に<token>をSubject:ヘッダに挿入。
(Level=3xx,4xx,6xx,7xxとセット)
強制転送するメールアドレスを指定。(Level=5xx,6xx,7xxとセット)

任意のヘッダの特徴を定義。項目なしもしくは空白が特徴の場合'#blank'を指定。


ここに抑制するメールへの警告文を記入最大5行。(Level=2xxとセット)



1つのフィルタの終わり

「メールフィルタ」の動作については、受信メールのヘッダー情報と本文すべてと、設定したキーワードでの比較、あるいはSURBLへの問い合わせなどに応じて、一致個所が発見されると、受信拒否を実施する流れとなる。これは「マシン毎の中継」や「ORDBによる制限」が、接続時に即座に判断して拒絶していたのに対し、メールフィルタはいったんメールデータを受け付けてみてから、そのデータの中身を走査して行われることが大きな違いだ。
たとえで言うと、セールスマンが家に訪れたとき、門前払いで断るのと、玄関に入れて話を聞いてから断るような違いと同じだ。
なお、メールフィルタ機能での比較方式は、フィルタ項目内は「トークン一致」で、項目間は「AND条件」として処理される。
設定する内容は通常、ASCII文字のみだが、From:とSubject:には、MIME-Bエンコード指定が可能になっているので、ややトリッキーな方法を使うことになるが、JISの全角文字に対しても、フィルタが可能になっている。

SURBLとは

SURBLとは、「Spam URI Realtime Blocklists」のことで、surbl.orgサイトとして運営されているURIBLの一種。
スパムメールのほとんどは、本文中に広告のためのURLを含んでいることから、本文中から抽出したURIからドメインを取り出して、RBLやORDBと同等の方式を使い、DNSへ問い合わせることによって、その応答結果から、含まれているドメインがSPAMサイトであるかを判断する仕組みだ。
E-Post Mail Serverのメールフィルタ機能では、"RBL:"命令でSURBL機能がサポートされている。これらを有効に設定することにより、かなりのSPAMメールの拒否が期待できる。

MIME-Bエンコードとは

MIME-Bエンコードとは、日本語JISなどの文字列、たとえば、JISコードで"未承諾"という文字列ならば、base64形式で変換(GyRCTCQ+NUJ6GyhC)し、前後に"=?iso-2022-jp?B?"と、"?="でパックした次のような形式である。
(=?iso-2022-jp?B?GyRCTCQ+NUJ6GyhC?=)
これにより、JISコードで送られてくる文字列の比較を行うことができる。

フィルタ記述での注意点

フィルタ記述では、記述する書式の文字は正確に記述しないと、正しく処理されないので注意が必要だ。
たとえば、フィルタに記述する Subject:キー を subject: としたり SUBJECT: としたりしてはいけない。
また、フィルタ記述内容は、厳密に大小文字の区別がされる。
たとえば、Subject:ABC と Subject:abc では、それぞれ、大文字の"ABC"の文字列、小文字の"abc"の文字列の有無チェックが行われる。

メールフィルタ(mail.dat)設定例1

本文中に含まれるURL(ドメイン)をSURBLサイト
"multi.surbl.org"に問い合わせスパムと判定する場合
'--------------------------
Virus:URIBL multi.surbl.org
RBL:multi.surbl.org
Level:300
Warning:
------- warning -----------
"URIBL multi.surbl.org"
---------------------------
WarningEnd:
Tag:[SPAM !!]
VirusEnd:
'---------------------------

←コメント行
←フィルタの開始(必須)とタイトル(タイトルは任意)
←SURBLサイトの指定
←処理レベル(必須)300は、件名にTagで指定された文字列を付けて通す
←受信した電子メールに挿入する警告文(任意)
(実際にはLevel:3xxでは挿入されずここではコメント的に追加)



←Subject:にこの文字列を追加
←フィルタの終了(必須)
←コメント行

メールフィルタ(mail.dat)設定例2

件名(Subject)ヘッダがないか空白の場合を拒否する場合
'--------------------------
Virus:BLANK Subject
Subject:#blank
Level:110
Warning:
------- warning -----------
"BLANK Subject"
---------------------------
WarningEnd:
VirusEnd:
'---------------------------

←コメント行
←フィルタの開始(必須)とタイトル(タイトルは任意)
←件名(Subject)ヘッダがないか空白
←処理レベル(必須)110は、viruslogにメールデータを残し、
 相手に拒絶を返す設定
←記録したメールに挿入する警告文(任意)



←フィルタの終了(必須)
←コメント行

メールフィルタ(mail.dat)設定例3

件名="Trojaner-Info Newsletter"で添付ファイルが含まれる場合を拒否する場合
'--------------------------
Virus:W32/Yarner.A@MM
Subject:Trojaner-Info Newsletter
Body:
--

Content-
BodyEnd:
Level:110
Warning:
------- warning -----------
"W32/Yarner.A@MM".
---------------------------
WarningEnd:
VirusEnd:
'---------------------------

←コメント行
←フィルタの開始(必須)とタイトル(タイトルは任意)
←メッセージソースベースで見た件名
←本文比較する内容の始まり
←メッセージソースベースで添付ファイルを示す記述

←本文比較する内容の終わり

←処理レベル(必須)110は、viruslogにメールデータを残し、
 相手に拒絶を返す設定

←記録したメールに挿入する警告文(任意)


←フィルタの終了(必須)
←コメント行

メールフィルタ(mail.dat)設定例4

特定ドメインや特定アカウントのみを許可し、それ以外は拒否する場合
'---------------------------
Virus:True Address(1)
From:xxx1@xxx.co.jp
Level:000
VirusEnd:
'---------------------------
Virus:True Address(2)
From:xxx.com
Level:000
VirusEnd:
'---------------------------
:
:
:
'---------------------------
Virus:Reject All(1)
Level:100
VirusEnd:
'---------------------------




「特定のドメインまたはアドレスを通過させる設定」
メールフィルタの Level:指定を"00"にして設定
←特定アドレス許可




←特定ドメイン許可



←通過させる条件を引き続き設定



「上記以外の設定を拒絶」常に最後に記述



※メールフィルタは先頭の条件から順次処理される。
特定ドメインや特定アカウントだけを許可するポイントは次の手順
1.先頭の処理にて通過条件としてフィルタに設定
2.通過条件を全て設定した最後に全ての電子メールを拒絶する設定

メールフィルタ(mail.dat)設定例5

From:ヘッダに指定された特定の全角文字で拒絶する場合
'---------------------------
Virus:SPAM(1) "高確率 (From:JIS)"
From:=?iso-2022-jp?B?GyRCOWIzTk4oGyhC?=
Level:110
Warning:
------- warning -----------
"高確率 (From:JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(2) "高確率 (From:S-JIS)"
From:高確率
Level:110
Warning:
------- warning -----------
"高確率 (From:S-JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(3) "当る (From:JIS)"
From:=?iso-2022-jp?B?GyRCRXYkaxsoQg==?=
Level:110
Warning:
------- warning -----------
"当る (From:JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(4) "当る (From:S-JIS)"
From:当る
Level:110
Warning:
------- warning -----------
"当る (From:S-JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------



←JISの文字列はMIME-Bのパックで指定








←Shift-JISの文字列はそのまま指定可能










←JISの文字列はMIME-Bのパックで指定








←Shift-JISの文字列はそのまま指定可能







メールフィルタ(mail.dat)設定例6

Subject:ヘッダに指定された特定の全角文字で拒絶する場合
'--------------------------
Virus:SPAM(1) "無料(Subject:JIS)"
Subject:=?iso-2022-jp?B?GyRCTDVOQRsoQg==?=
Level:110
Warning:
------- warning -----------
"無料(Subject:JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(2) "無料(Subject:S-JIS)"
Subject:無料
Level:110
Warning:
------- warning -----------
"無料(Subject:S-JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(3) "未承諾(Subject:JIS)"
Subject:=?iso-2022-jp?B?GyRCTCQ+NUJ6GyhC?=
Level:110
Warning:
------- warning -----------
"未承諾(Subject:JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------
Virus:SPAM(4) "未承諾(Subject:S-JIS)"
Subject:未承諾
Level:110
Warning:
------- warning -----------
"未承諾(Subject:S-JIS)"
---------------------------
WarningEnd:
VirusEnd:
'--------------------------




←JISの文字列はMIME-Bのパックで指定








←Shift-JISの文字列はそのまま指定可能










←JISの文字列はMIME-Bのパックで指定









←Shift-JISの文字列はそのまま指定可能







MIME-Bエンコードの文字列の作り方

文字列をMIME-Bエンコードする方法は、次のように行ってみよう。
メールクライアントで設定したい文字列をSubjectにした空メールを自分のメールアドレス宛に送り、送信済みのメールソースなどを参照すると、Subject:にMIME-Bエンコードされた文字列が作成されているので、その文字列をコピー&ペーストして利用する方法だ。
Microsoft Outlook Expressでの作成例をあげてみる。

新規作成で対策したい全角文字列(たとえば、「未承諾」)を Subject:に記入して自身のメールアドレス宛にメール送信を行う。本文は空でもかまわない。

「送信済アイテム」もしくは、自分宛に送ったメールを受信し、メールの「プロパティ」を開く。

表示されたダイアログの「詳細」タブを選択し、「メッセージのソース」ボタンをクリック、ソースを表示する。

"Subject:"に表示されている文字列は、MIME-Bエンコードされた「未承諾」の文字列になっているので、"=?iso-2022-jp?B?"〜"?="までの範囲をコピーして、メールフィルタ設定のSubject:部分に貼り付ける。
これで、JISコードで届く「未承諾」文字列が含まれる表題のメールは、拒否の対象になる。

実際のフィルタ例
'---------------------------------------------------
Virus:"未承諾(Subject:JIS)"
Subject:=?iso-2022-jp?B?GyRCTCQ+NUJ6GyhC?=
Level:110
Warning:
---------------- warning ---------------------
"未承諾(Subject:JIS)"
----------------------------------------------
WarningEnd:
VirusEnd:
'--------------------------------------------------

設定されたフィルタ情報の設定パターン数の変更

デフォルトでは、設定されたフィルタ情報は、設定パターン数として、500定義パターンまで、一括チェックされる。
一括処理できる定義パターン数を500以上に増やすには、以下のレジストリ値を作成し、値を設定することになる。
ただし、あまり巨大な値にした場合、メモリ領域が確保できなくなる可能性もあるので、設定する場合は注意して行いたい。

HKEY_LOCAL_MACHINE
 → SYSTEM
  → CurrentControlSet
   → Services
    → EPSTRS
     → PatternOfTheOnce
      (DWORD) このレジストリ値を手動で作成



書籍『E-Post Mail Server完全ガイド』ご案内