【製品情報】Mobile Beholder:簡易ネットワーク管理/調査支援ツール公開(2008/05/28)
【技術メモ】DDoS 攻撃的な SMTP 接続の分析を掲載(2007/08/13)
【技術メモ】Beholder を利用したサイトへのアクセス動向の分析を掲載(2007/08/08)
【お知らせ】ウェブサイトを刷新(2007/08/02)

ManticoreTM
Postfix 用国別アクセス制御 milter

ManticoreTM は、 SMTP 接続元のサーバの国毎にアクセス制御を行うための Postfix メールサーバ用の milter ソフトウェアです。 接続元の国の判定には、 弊社製の Kobold ライブラリを利用しています。 また、アクセス制御の管理には、 SQLite データベースを利用しています。

本 milter は、標準設定では、日本国に割り当てられた IP アドレス以外からの SMTP 接続は拒否します。 ただし、この仕様では不便ですので、 mailbox(受信メールアドレス)毎に自由にアクセス制御の規則を 設定できる設計となっています。 また、ヘッダに独自の拡張ヘッダを付与しますので、 これらの情報を元に procmail でユーザ毎に処理することも可能です。 現在、FreeBSD/i386 6.2-RELEASE 用のパッケージとしてダウンロードできます。

導入手順

パッケージの導入

ダウンロードページから Manticore のパッケージを入手します。 ここでは、パッケージのファイル名を manticore-x.y.z.tbz として説明します。 x.y.z には、バージョン番号を表す数字が入ります。 Manticore の動作には、 SQLitePostfix を必要としますので、 FreeBSD の ports などを利用して予め導入してください。 次のコマンドを実行すると Manticore が FreeBSD システムに導入されます。


  # pkg_add manticore-x.y.z.tbz

FreeBSD の設定ファイルの編集

Manticore を利用するための設定を /etc/rc.conf あるいは /etc/rc.conf.local ファイルに記述します。vi などのエディタを使って以下の内容を記述してください。


  manticore_enable="YES"

アクセス制御データベースのコピー

Manticore のアクセス制御の規則を記述したデータベースは、 /usr/local/share/manticore/manticore.db として導入されます。 これを /usr/local/etc/postfix/manticore.db としてコピーしてください。 また、一緒に manticore.sql ファイルが /usr/local/share/manticore に導入されていますので、 必要であれば manticore.sql の内容を編集して manticore.db ファイルを作成しなおして、上記の場所にコピーしてください。 データベースは、次のコマンドで作成できます。


  % sqlite3 manticore.db < manticore.sql

postfix の main.cf ファイルの編集

最後に、postfix の設定ファイル main.cf に次に示す一文を追加します。 main.cf は、FreeBSD の ports を利用した場合は、 /usr/local/etc/postfix ディレクトリに存在します。


  smtpd_milters = unix:/tmp/.s.manticore

postfix と manticore の起動

postfix と manticore を連動させて起動させます。 今回は、手動で実行しますが、次回からはシステムの起動時に自動的に行われます。


  # /usr/local/etc/rc.d/postfix stop
  # /usr/local/etc/rc.d/manticore start
  # /usr/local/etc/rc.d/postfix start

データベースの概要

Manticore は、SQLite データベースでアクセス制御の規則 "access_list" と mailbox(受信メールアドレス) "recipient" を管理しています。 設定は、手動による SQL 文の実行となりますが、必要であれば PHP などを用いて独自のインタフェースを実装してください。 各テーブルは次の通りです。


  CREATE TABLE access_list (
    no       INTEGER,       -- rule number (default rule = 0)
    field    TEXT NOT NULL, -- "cc" |"network" |"ipaddr" |"helo" |"mailfrom"
    name     TEXT NOT NULL, -- Country Code | Client IP | hostname | mailbox
    action   TEXT NOT NULL, -- "reject" | "discard" | "accept"
    rcode    TEXT,          -- RFC 821/2821 reply code
    xcode    TEXT,          -- RFC 1893/2034 reply code
    message  TEXT,          -- reply message
    mark     TEXT,          -- text for X-Manticore header field
    PRIMARY KEY (no,field,name,action)
  );


  CREATE TABLE recipient (
    email    TEXT NOT NULL UNIQUE, -- E-Mail address
    name     TEXT,                 -- user name of recipient
    rule_no  REFERENCES access_list(no) NOT NULL,
    PRIMARY KEY (email,rule_no)
  );

システム標準のアクセス制御の規則は、 "access_list" の 0番(つまり、no = 0)で管理します。 標準では日本国以外の接続は、拒否する規則となっています。 実際の規則の一部を以下に示します。


  INSERT INTO access_list
    VALUES(0,'cc','CN','reject',554,'5.7.1','I guess your mail as spam.','spam');

また、mailbox 毎に規則を適用したい場合は、次のようにします。 ここでは、"manticore@example.com" 宛の規則を考えます。


  INSERT INTO recipient
    VALUES('manticore@example.com','Mail Admin',100);

  INSERT INTO access_list
    VALUES(100,'mailfrom','admin@example.net','accept',
           NULL,NULL,NULL,'admin');

  INSERT INTO access_list
    VALUES(100,'cc','US','accept',NULL,NULL,NULL,'spam');

最初の行では、recipient テーブルに固有の規則番号 "100" 番を割り当てた "manticore@example.com" の mailbox を所有する "Mail Admin" を登録しています。 次の行では、Envelope-From が "admin@example.net" からのメールは受信可能であるとアクセス制御規則に登録しています。 最後の行は、US(米国)からのメールは受信するけど "spam" とみなす旨をアクセス制御規則に登録しています。 mailbox 毎の規則は、基本的に受信を許可する規則を記述します。 いわゆる、ホワイトリストとお考えください。

なお、Manticore は、次の順番でアクセス制御の規則を適用します。

  1. ユーザ毎の規則でアクセス制御を実行し、その規則に従う。
  2. システム標準規則でアクセス制御を実行し、その規則に従う。
  3. 上記に適合しない場合は全てのメールを受信する。

また、access_list テーブルの "field" に基づく規則の評価は、以下の順番になります。

  1. "network"(接続元の割り当てネットワークアドレス)
  2. "ipaddr"(接続元の IP アドレス)
  3. "mailfrom"(Envelope-From)
  4. "helo"(HELO で渡されるホスト名)
  5. "cc"(国コード)

拡張ヘッダ

Manticore 経由のメールには必ず X-Connected-From 拡張ヘッダが付与されます。 また、アクセス制御の規則に適合してメールの受信が行われた場合は、 X-Manticore 拡張ヘッダも追加されます。


  X-Connected-From: US [64.52.77.90] (ARIN) 64.52.32.0/18
  X-Manticore: US [spam]

上記の例は、US(米国)をアクセス制御の規則から外していたために来た 迷惑メールに付与されたヘッダフィールドです。 X-Connected-From フィールドの内容は、 順に、国コード、接続元 IPアドレス、管理組織名、 割り当てネットワークアドレスです。 また、接続元 IPアドレスを含む Received フィールド行から解析すれば、 Received フィールドの偽造も見抜けます。 X-Manticore フィールドの情報は、先の例に示した規則を適用した場合の内容です。

たとえば、 X-Connected-From フィールドの情報を元に先の mailbox 毎への規則を追加する場合は、 次のようにします。


  INSERT INTO access_list
    VALUES(100,'network','64.52.32.0/18','reject',554,'5.7.1',
           'I guess your mail as spam.','spam');

Manticore で規則を設定した場合は、必要なメールを拒否する可能性も考えられます。 この場合は、X-Manticore フィールドの情報を元にユーザ自身で、 procmail を用いた方法でフィルタリングの処理を行うようにするとよいでしょう。

製品紹介

TrickBSDTM

ネットワーク用途向けコンパクトフラッシュ版 FreeBSD

KoboldTM

IPv4アドレスから国名を検索するC言語用ライブラリ

BeholderTM

出力モジュールを拡張可能なパケットキャプチャとネットワークツール

ManticoreTM

接続元の国毎にアクセス制御 を行うための Postfixmilter