ウイルス&スパム管理(Maia Mailguard)

初  版: 2006/1/8

メールのウイルス対策として利用させてもらってきた H+BEDV の AntiVir Mailgate for Linux がフリーでは利用できなくなったので、その対策としてウイルススキャナとしてClamAV(FRISK の F-Prot Antivirus for Linux も可)を利用し始めました。Postfix との中継役としてはAmavisd-newを使用しましたので、Spamassassin も統合してスパム対策を行いましたが、特にバーチャルドメイン環境ではProcmailが使えないためスパム対策が難しく、フィルタスクリプトを導入してメール振り分けを行ってきました。しかし、この方法ではひとつのメールがPostfixで何度も同じサービスを通過するので性能面や事故が気になってきたのと、管理が面倒くさくなってきたので管理ツールを導入することにしました。それが、Maia Mailguard と呼ばれるAmavisd-newとSpamAssassinのために開発されたWebベースの管理システムです。Maia Mailguard は、PHPとPerlで書かれており、管理者はシステム全体の管理やデフォルト値の設定を可能にし、エンドユーザには自分宛のメールに対するウィルススキャナやスパムフィルタの設定を可能にします。
おやじが Maia Mailguard を導入した当初は、 1.0.0 の日本語化対応がされていなかったため自分で日本語化を行いましたが、0.9.xのころから対応されていた株式会社サードウェアさんが日本語化パッチを提供してくれたので、こちらを使用させてもらうことにしコンテンツを修正しました。おやじのいい加減な対応とは異なり、ロジックも修正されているのでほとんど問題がないレベルで日本語化対応できます。 感謝!! <m(__)m>
なお、おやじはバージョン1.0.1を使用したので、提供パッチ(2006年2月21日版)をベースに 1.0.1のバグ修正を行い対応しました。2006年5月5日現在、本家のドキュメントが1.0.1対応に変わっているので、ここでは併せて記述することにしました。1.0.1で大きく変わったところは、スクリプト用のコンフィグファイル( /etc/maia.conf )が新設されたことと、メールの一覧表示で差出人と件名の表示桁数が設定できるようになったことです。これに伴い設定方法が異なるので、特にバージョンアップ時は要注意です。

バージョン1.0.2に対応し、若干のバグ修正も併せて盛り込んで日本語化パッチ作成しました。基本的な設定は1.0.1と同じです。機能的には、ホワイト・ブラックリストでワイルドカードが利用できるようになったこと、誤ってメールを削除してしまったときに再送信できる機能などが追加されています。なお、PHP拡張モジュールでPEAR::DB_Pager から PEAR::Pagerに変更になっているので、特にバージョンアップ時は要注意です。

おやじのサイトで提供するバージョン1.0.1/1.0.2の日本語化パッチの著作権は、株式会社サードウェア (Maia Maiguard : ホームページ ) さんと共有しています。

■はじめに

基本的には、Maia Mailguard のサイトにあるインストールドキュメントに従っていけばいいのですが、PerlやPHP関係のモジュールもいろいろ入れなければなりません。
ここではバーチャルドメイン環境に導入することを前提に記述していますが、もちろん通常環境でも同じ設定で使用できます。
なお、Postfix、Spamassassin、ClamAV(/AntiVir/F-Prot)、Amavisd-newは既にインストールされて動作しているものとします。これらに関しては、こちらこちらを参考にしてください。また、当然ながら、日本語対応(mbstring付き)のPHPが使用できるApacheが動作しているものとします。

■事前準備

Maia Mailguard を動かすためには、関連のソフトやパッケージが必要になります。Maia Mailguard をインストールする前にそれらの準備を以下で行っていきます。

◆PHP拡張モジュールのインストール

Maia Mailgateを動かすためには、いくつかの PHP 拡張モジュールをインストールする必要があります。 グラフ表示はやってみましたが、ダイナミック表示ではかなりCPUパワーを喰うため表示が遅くなるのと、ほとんど役にたたないこと、環境整備が素直に行かずマニュアルでPEARモジュールをインストールしなければならなかった等があったので、ここでは省略しました。

  1. まず、パッケージマネージャを最新にする必要があるが、おやじの環境では下記のようなメモリ不足のエラーが出てそのままでは更新できなかったので、/etc/php.iniの設定をデフォルトの8Mから倍の16Mに変更した。おやじのデバック機では何も問題は発生しなかったり環境に依存するので、うまくいかない場合のみ対処すればよい。(赤字:追加、緑字:変更、青字:削除)

    [エラーメッセージ]

    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 144 bytes) in /tmp/gopeQq1DRb/PEAR/PackageFile/v1.php on line 798
    Allowed memory size of 8388608 bytes exhausted (tried to allocate 0 bytes)


    [/etc/php.ini修正内容]

    ; memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
    memory_limit = 16M


  2. パッケージマネージャを最新にする。起動するといろいろ聞かれるが基本的にデフォルトのままでよいので[Enter]を押し続けると、途中で各ディレクトリのロケーションを確認してくる。ここで、3番の $php_dir が「/usr/share/pear」になっていた場合は、3番を選択して「/usr/share/php」に変更して、更に[Enter]を押し続けるとインストールされる。インストール中に「WARNING」がでるが「install ok:」となっていれば無視してよい。
    インストール後、このままではPEARモジュールが使えないので、PEARモジュールがインストールされたディレクトリを「/usr/share/php」をincludeする。具体的には、「 include_path=".:/usr/share/php" 」を /etc/php.ini に追記する。

    # lynx -source http://pear.php.net/go-pear | php [Enter]
    Welcome to go-pear!

    Go-pear will install the 'pear' command and all the files needed by
    it. This command is your tool for PEAR installation and maintenance.

    Go-pear also lets you download and install the PEAR packages bundled
    with PHP: DB, Net_Socket, Net_SMTP, Mail, XML_Parser, PHPUnit.


    If you wish to abort, press Control-C now, or press Enter to continue: [Enter]

    HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none:: [Enter]

    Below is a suggested file layout for your new PEAR installation. To
    change individual locations, type the number in front of the
    directory. Type 'all' to change all of them or simply press Enter to
    accept these locations.

    1. Installation prefix           : /usr
    2. Binaries directory            : $prefix/bin
    3. PHP code directory ($php_dir) : $prefix/share/pear
    4. Documentation base directory  : $php_dir/docs
    5. Data base directory           : $php_dir/data
    6. Tests base directory          : $php_dir/tests

    1-6, 'all' or Enter to continue:
    3[Enter]
    PHP code directory ($php_dir) [$prefix/share/pear] :
    $prefix/share/php[Enter]

    Below is a suggested file layout for your new PEAR installation. To
    change individual locations, type the number in front of the
    directory. Type 'all' to change all of them or simply press Enter to
    accept these locations.

    1. Installation prefix : /usr
    2. Binaries directory : $prefix/bin
    3. PHP code directory ($php_dir) : $prefix/share/php
    4. Documentation base directory : $php_dir/docs
    5. Data base directory : $php_dir/data
    6. Tests base directory : $php_dir/tests

    1-6, 'all' or Enter to continue:[Enter]

    The following PEAR packages are bundled with PHP: DB, Net_Socket, Net_SMTP,
    Mail, XML_Parser, PHPUnit.
    Would you like to install these as well? [Y/n] :[Enter]

    Loading zlib: ok
    Downloading package: PEAR-stable......ok
    Downloading package: Archive_Tar-stable....ok
    Downloading package: Console_Getopt-stable....ok
    Downloading package: XML_RPC-stable....ok
    Bootstrapping: PEAR...................(remote) ok
    Bootstrapping: Archive_Tar............(remote) ok
    Bootstrapping: Console_Getopt.........(remote) ok
    Downloading package: DB...............ok
    Downloading package: Net_Socket.......ok
    Downloading package: Net_SMTP.........ok
    Downloading package: Mail.............ok
    Downloading package: XML_Parser.......ok
    Downloading package: PHPUnit..........ok
    Extracting installer..................ok
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    warning: pear/PEAR requires package "pear/Archive_Tar" (version >= 1.3.1)
    warning: pear/PEAR requires package "pear/Console_Getopt" (version >= 1.2)
    pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
    pear/PEAR can optionally use package "pear/PEAR_Frontend_Web" (version >= 0.5.0)
    pear/PEAR can optionally use package "pear/PEAR_Frontend_Gtk" (version >= 0.4.0)
    install ok: channel://pear.php.net/PEAR-1.4.6
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/Archive_Tar-1.3.1
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/Console_Getopt-1.2
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/XML_RPC-1.4.4
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/DB-1.7.6
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/Net_Socket-1.0.6
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    pear/Net_SMTP can optionally use package "pear/Auth_SASL"
    install ok: channel://pear.php.net/Net_SMTP-1.2.7
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/Mail-1.1.9
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    install ok: channel://pear.php.net/XML_Parser-1.2.7
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    pear/PHPUnit can optionally use package "pear/PHP_Compat"
    install ok: channel://pear.php.net/PHPUnit-1.3.2

    The 'pear' command is now at your service at /usr/bin/pear
    # echo 'include_path=".:/usr/share/php"' >> /etc/php.ini[Enter]


  3. 必要とされるPHP 拡張モジュールをインストールする。インストールするのは、「DB_Pager(1.0.2ではPager)」、「Mail_Mime」、「Net_POP3」である。「Net_POP3」は、後述のようにユーザがMaia Mailguard にログインするときの認証に "POP3" を使用したためである。

    # pear install DB_Pager [Enter]
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    downloading DB_Pager-0.7.tgz ...
    Starting to download DB_Pager-0.7.tgz (3,447 bytes)
    ....done: 3,447 bytes
    install ok: channel://pear.php.net/DB_Pager-0.7
    # pear install Mail_Mime [Enter]
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    downloading Mail_Mime-1.3.1.tgz ...
    Starting to download Mail_Mime-1.3.1.tgz (16,481 bytes)
    ......done: 16,481 bytes
    install ok: channel://pear.php.net/Mail_Mime-1.3.1
    # pear install Net_POP3 [Enter]
    WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update
    downloading Net_POP3-1.3.6.tgz ...
    Starting to download Net_POP3-1.3.6.tgz (10,076 bytes)
    .....done: 10,076 bytes
    install ok: channel://pear.php.net/Net_POP3-1.3.6



◆Maia Mailguardのダウンロードと日本語化

前準備として、下記で使用するバージョンの Maia Mailguard をダウンロードし、日本語化を行っておきます。おやじが作成したパッチは、株式会社サードウェアさんのパッチをベースに1.0.1/1.0.2対応し、1.0.1のバグ(新規追加されたメール一覧表示の設定画面でパラメータの説明がされないバグ。localeのsettings.phpのバグ)と1.0.2のバグ(状態画面でのメール種別のリンク異常)を修正したものです。

[maia-1.0.0の場合]

  1. 本家からMaia Mailguard をダウンロードし展開する。

    # mkdir /usr/local/maia
    # cd /usr/local/maia
    # wget http://www.maiamailguard.com/files/maia-1.0.0.tar.gz
    # tar zxf maia-1.0.0.tar.gz


  2. 株式会社サードウェアさんから日本語化パッチをダウンロードし適用する。

    # wget http://maiamailguard.jp/files/xxxxxxxx-maia-japanese.patch
    # patch -p0 < xxxxxxxx-maia-japanese.patch


[maia-1.0.1の場合]

  1. 本家からMaia Mailguard をダウンロードし展開する。

    # mkdir /usr/local/maia
    # cd /usr/local/maia
    # wget http://www.maiamailguard.com/files/maia-1.0.1.tar.gz
    # tar zxf maia-1.0.1.tar.gz


  2. おやじの日本語化パッチをダウンロードし適用する。

    # wget http://www.aconus.com/~oyaji/suse9.3/maia-1.0.1-japanese.patch
    # patch -p0 < maia-1.0.1-japanese.patch


[maia-1.0.2(1.0.2a)の場合]

  1. 本家からMaia Mailguard をダウンロードし展開する。

    # mkdir /usr/local/maia
    # cd /usr/local/maia
    # wget http://www.maiamailguard.com/files/maia-1.0.2.tar.gz
    # tar zxf maia-1.0.2.tar.gz


  2. おやじの日本語化パッチをダウンロードし適用する。(inepeeさんからご指摘があったcache.phpの変数未定義問題及びリンク先の変更を20070406-maia-1.0.2-japanese.patchで対処しました。)

    # wget http://www.aconus.com/~oyaji/suse9.3/20070225-maia-1.0.2-japanese.patch
    # wget http://www.aconus.com/~oyaji/suse9.3/20070406-maia-1.0.2-japanese.patch
    # patch -p0 < 20070406-maia-1.0.2-japanese.patch


    maia-1.0.2で既に動作している場合から1.0.2aにバージョンを上げるには、maia-1.0.2におやじの日本語化パッチがあたっている状態で、更におやじの1.0.2a用の日本語化パッチ(20070714-maia-1.0.2-japanese.patch)をダウンロードし適用する。その後、パッチがあたったファイルのみ入れ替える。

    ・maia-1.0.2/amavisd-maia
    ・maia-1.0.2/amavisd.conf.dist
    ・maia-1.0.2/php/constants.php
    ・maia-1.0.2/php/internal-init.php
    ・maia-1.0.2/php/login.php
    ・maia-1.0.2/php/xlogin.php

    # wget http://www.aconus.com/~oyaji/suse9.3/20070714-maia-1.0.2-japanese.patch
    # patch -p0 < 20070714-maia-1.0.2-japanese.patch



[maia-1.0.2aの場合]

maia-1.0.2a の 20070821版の日本語化パッチは、各種警告メールの日本語化対応を含んでいます。日本語化対応のため、Jcode.pmが必要でありインストールしていない場合はCPAN等でインストールしてください。
  1. 本家からMaia Mailguard 1.0.2aをダウンロードし展開する。

    # mkdir /usr/local/maia
    # cd /usr/local/maia
    # wget http://www.maiamailguard.com/files/maia-1.0.2a.tar.gz
    # tar zxf maia-1.0.2a.tar.gz


  2. おやじの日本語化パッチをダウンロードし適用する。

    # wget http://www.aconus.com/~oyaji/suse9.3/20070821-maia-1.0.2a-japanese.patch
    # patch -p0 < 20070821-maia-1.0.2a-japanese.patch


    maia-1.0.2a の 20070821版の日本語化パッチは、各種警告メールの日本語化対応(Jcode.pm要)を含んでいる。既に maia-1.0.2a で日本語化対応している場合(maia-1.0.2からmaia-1.0.2aにバージョンを上げた場合を含む)は、改めてmaia-1.0.2a.tar.gzを解凍後に上記でパッチを適用し、下記ファイルのみ入れ替えてください。

    1. maia-1.0.2/amavisd-maia
    2. maia-1.0.2/scripts/maiadbtool.pl
    3. maia-1.0.2/scripts/send-quarantine-digests.pl
    4. maia-1.0.2/scripts/send-quarantine-reminders.pl
    5. maia-1.0.2/templates/digest.tpl
    6. maia-1.0.2/templates/newuser.tpl
    7. maia-1.0.2/templates/reminder.tpl


◆Amavisd-newとMaia Mailguard用のデータベースの登録

Maia Mailguard は SQL データベースで各種情報を管理します。SQL データベースとしては、MySQL と PostgreSQL が使用できますが、ほかのソフトとの関係でここでは MySQL を使用しました。MySQL がインストールできていない場合は、こちらを参考にインストールしてください。
  1. まず、下記で "maia" ユーザを登録する。作業は root ユーザで行う。

    # mysql -u root -p mysql [Enter]
    Enter password:
    MySQL rootパスワード [Enter]
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 20149 to server version: 4.1.10a

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> CREATE DATABASE maia; [Enter]
    Query OK, 0 rows affected (0.03 sec)

    mysql> flush privileges; [Enter]
    Query OK, 0 rows affected (0.06 sec)

    mysql> \q [Enter]
    Bye


  2. Maia Mailguard のデータベース作成用のmaia-mysql.sqlファイルが用意されているので、これを利用して必要なデータベーステーブルを作成する。

    # cd /usr/local/maia/maia-1.0.x
    # mysql -u root -p maia < maia-mysql.sql

    Enter password: MySQL rootパスワード [Enter]


  3. このデータベースへのアクセス権限を設定する。ユーザは SuSE の Amavisd-new のユーザである vscan とし、パスワードを任意に設定する。システムの vscan ユーザはログインできないユーザでパスワードを持たないが、各ファイルのパーミッションをあわせるため vscan ユーザとしてあり、ここで設定するパスワードは、Amavisd-new と Maia Mailguard で SQL データベースをアクセスするためだけなので任意に設定してよい。passwd の代わりに、SQL データベース用のパスワードを設定する。

    # mysql -u root -p maia [Enter]
    Enter password: MySQL rootパスワード [Enter]
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 20158 to server version: 4.1.10a

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> GRANT CREATE, DROP, ALTER, SELECT, INSERT, UPDATE, DELETE ON maia.* TO vscan@localhost IDENTIFIED BY '
    passwd'; [Enter]
    Query OK, 0 rows affected (0.00 sec)

    mysql> \q
    [Enter]
    Bye


  4. MySQL を使っている場合は、/etc/my.cnf ファイルの中に max_allowed_packet の設定を追加する必要がある。この設定は、postfix の main.cf の「message_size_limit」で設定した値と同じにすること。

    [mysql]
    max_allowed_packet=10M


  5. ここで設定を反映させるため、MySQLをリロードしておく。

    # /etc/init.d/mysql reload


■Maia Mailguardのスクリプトとテンプレートのインストール

Maia Mailguard 用のメンテナンススクリプトとテンプレートをインストールします。インストールディレクトリは、INSTALL ドキュメントにあわせて「/var/amavisd/maia」にしました。 SuSE の Amavisd-new のディレクトリにあわせて「/var/spool/amavisd/maia」でもいいのですが、その場合はスクリプト内の database.cfg のパスを全て変更する必要があります。

  1. インストールディレクトリを作成し、データをコピーする。

    # mkdir -p /var/amavisd/maia/scripts
    # mkdir -p /var/amavisd/maia/templates
    # cp -r /usr/local/maia/maia-1.0.x/scripts/* /var/amavisd/maia/scripts
    # cp -r /usr/local/maia/maia-1.0.x/templates/* /var/amavisd/maia/templates
    #


  2. ここでスクリプトを動かすための設定を行うが、バージョン1.0.0と1.0.1/1.0.2では設定方法が異なるので注意が必要である。特に1.0.0からのバージョンアップ時には他も含め注意が必要である。

    [maia-1.0.0の場合]

    1. データが設定されている database.cfg ファイル(インストールしたscriptsディレクトリ配下)を編集する。 database.cfg そのものはないので、 database.cfg.dist をリネームして作成し設定を変更する。

      # mv /var/amavisd/maia/scripts/database.cfg.dist /var/amavisd/maia/scripts/database.cfg


    2. database.cfg では、先に作成した maia データベースのユーザ名(vscan)とパスワード(password)を変更する。(緑字:変更)

      # Configure your database DSN here
      dsn = "DBI:mysql:maia:localhost:3306"

      # Your database user's login name
      username = "vscan"

      # Your database user's password
      password = "passwd"


    3. インストールパスをデフォルトの「/var/amavisd/maia」から変更した場合は、各スクリプトの database.cfg のパスを変更する。

      # CONFIGURE THIS: Location of your database.cfg file
      my $cfg = "/var/spool/amavisd/maia/scripts/database.cfg";


    [maia-1.0.1/1.0.2の場合]

    1. ベースとなる maia.conf.dist を /etc/maia.conf としてコピーし設定を変更する。

      # cp /usr/local/maia/maia-1.0.x/maia.conf.dist /etc/maia.conf
      # chown vscan:vscan /etc/maia.conf
      # chmod 640 /etc/maia.conf


    2. /etc/maia.conf では、先に作成した maia データベースのユーザ名(vscan)とパスワード(password)を変更する。(緑字:変更)
      スクリプトのインストールパスをデフォルトの「/var/amavisd/maia」から変更した場合は、最後の$script_dirのパスも変更すること。

      # Configure your database DSN here
      dsn = "DBI:mysql:maia:localhost:3306"

      # Your database user's login name
      username = "vscan"

      # Your database user's password
      password = "passwd"

      # The directory where Maia's Perl scripts can be found.
      $script_dir = "/var/spool/amavisd/maia/scripts";


  3. ファイルのオーナとパーミションを設定する。ファイルのオーナは Amavisd-new の設定にあわせ、最後の database.cfg は 当然 1.0.0 のみ実施。

    # chown -R vscan:vscan /var/amavisd/maia
    # chmod 640 /var/amavisd/maia/templates/*.tpl
    # chmod 750 /var/amavisd/maia/scripts/*.pl
    # chmod 640 /var/amavisd/maia/scripts/database.cfg


■Amavisd-newとSpamassassinのconfigテストと追加インストール

SpamAssassinとamavisd-newを動かすためのPerlモジュールとシステムユーティリティがきちんとインストールされているか、データベースアクセスができるか configtest.pl スクリプトを使って確認します。不足しているモジュールがあったら、追加インストールする必要があります。

  1. configtest.pl スクリプトを起動する。

    # cd /var/amavisd/maia/scripts
    # ./configtest.pl

    amavisd-new:

    file(1)              :     4.13 : OK
    Archive::Tar         :     1.08 : OK
    Archive::Zip         :     1.09 : OK
    Compress::Zlib       :     1.34 : OK
    Convert::TNEF        :     0.17 : OK
    Convert::UUlib       :      1.0 : OK
    MIME::Base64         :     3.05 : OK
    MIME::QuotedPrint    :     3.03 : OK
    MIME::Parser         :    5.415 : OK
    Mail::Internet       :     1.60 : OK
    Net::Server          :     0.87 : OK
    Net::SMTP            :     2.29 : OK
    Digest::MD5          :     2.33 : OK
    Data::UUID           :      N/A : NOT INSTALLED
    IO::Stringy          :    2.109 : OK
    Time::HiRes          :     1.65 : OK
    Unix::Syslog         :    0.100 : OK
    DBI                  :     1.47 : OK
    DBD::mysql           :   2.9004 : OK
    DBD::Pg              :      N/A : NOT INSTALLED (required if you want to use PostgreSQL)


    SpamAssassin:

    Mail::SpamAssassin   : 3.000004 : OK
    File::Spec           :     3.01 : OK
    Pod::Usage           :     1.16 : OK
    HTML::Parser         :     3.45 : OK
    DB_File              :    1.810 : OK
    Net::DNS             :     0.48 : OK
    Digest::SHA1         :     2.10 : OK


    Maia Mailguard:

    Crypt::Blowfish      :      N/A : NOT INSTALLED
    Crypt::CBC           :      N/A : NOT INSTALLED

    Database DSN test    : PASSED
    #


  2. 上記から、おやじの環境では Amavisd-new として「Data::UUID」、Maia Mailguard として「Crypt::Blowfish」と「Crypt::CBC」がインストールされていなかったため、YaSTでインストールした。「DBD::Pg」は、今回は MySQL を使用したため無視した。
    YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。「フィルタ」 を 「検索」 とし検索欄に下記を入力して 「検索」 ボタンを押せば、右側に該当するパッケージが出てくるので、チェックマークを入れて 「了解」 を押しておしまい。
    再度テストして、全てOK(PASSED)となっていることを確認する。

    No. モジュール名 パッケージ名称
    1 Data::UUID perl-Data-UUID
    2 Crypt::Blowfish perl-Crypt-Blowfish
    3 Crypt::CBC perl-Crypt-CBC

    データベースアクセスに失敗(ex. database.cfgでパスワードミス)した場合は、
    「DBI connect('maia:localhost:3306','vscan',...) failed: Access denied for user 'vscan'@'localhost' (using password: YES) at ./configtest.pl line 511
    Can't connect to SQL database at ./configtest.pl line 511.」といったメッセージが出るので、チェックする。

  3. なお、maia-1.0.1/1.0.2ではいくつかのモジュールについてアップグレードするようアラートがでるが、SuSEのRPMでは対応できないので、必要応じCPANでアップデートする。

    # perl -MCPAN -e shell
    cpan> install
    Archive::Zip
    Running install for module Archive::Zip
    Running make for S/SM/SMPETERS/Archive-Zip-1.16.tar.gz

       (snip)

    Running make install
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip.pm
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip.pod
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip/FAQ.pod
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip/MemberRead.pm
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip/MockFileHandle.pm
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip/BufferedFileHandle.pm
    Installing /usr/lib/perl5/site_perl/5.8.6/Archive/Zip/Tree.pm
    Installing /usr/share/man/man3/Archive::Zip::Tree.3pm
    Installing /usr/share/man/man3/Archive::Zip::FAQ.3pm
    Installing /usr/share/man/man3/Archive::Zip.3pm
    Installing /usr/share/man/man3/Archive::Zip::MemberRead.3pm
    Writing /usr/lib/perl5/site_perl/5.8.6/x86_64-linux-thread-multi/auto/Archive/Zip/.packlist
    Appending installation info to /usr/lib/perl5/5.8.6/x86_64-linux-thread-multi/perllocal.pod
      /usr/bin/make install  -- OK

    cpan> quit
    Lockfile removed.



■Spamassassin ルールの取り込み

Spamassassin の精度を上げるため、Maia Mailguard に既に動かしているルールをここで取り込みます。それには、scripts ディレクトリにある「load-sa-rules.pl」というスクリプトを使用します。

  1. もし、初めてならならTLECさんのファイルを /var/amavisd/ にダウンロードして取り込めば良い。

    # cd /var/amavisd
    # wget http://tlec.linux.or.jp/docs/user_prefs


    既存のデータがあるなら、これを取り込むと良い。おやじの場合は、バーチャルドメイン対応で filter ユーザで動かしていたのでそれを利用した。

    [maia-1.0.0の場合]

    load-sa-rules.pl 内の下記を、有効なデータがあるパスに併せて変更する。おやじの場合は、バーチャルドメイン対応で filter ユーザで動かしていたので最後のパラメータを変更して取り込んだ。 (赤字:追加)

    # CONFIGURE THIS: SpamAssassin directories to search for rules files (*.cf and user_prefs)
    my $local_cf_dir = "/etc/mail/spamassassin";
    my $system_rules_dir = "/usr/local/share/spamassassin";
    #my $user_rules_dir = "/var/amavisd/.spamassassin";
    my $user_rules_dir = "/var/amavisd";



    [maia-1.0.1/1.0.2の場合]

    /etc/maia.conf 内の下記を、有効なデータがあるパスに併せて変更する。

    ### load-sa-rules.pl

    # The load-sa-rules script tries to find certain important rules
    # directories on its own, and usually it does a pretty good job,
    # but if it fails to find your rules directories, you can tell it
    # explicitly where to look by overriding the search here. Setting
    # these to "undef" tells load-sa-rules to find the directories
    # on its own (recommended).

    # The directory where SpamAssassin's local.cf file can be found.
    #$local_cf_dir = "/etc/mail/spamassassin";
    $local_cf_dir = undef; # default: let the script find it

    # The directory where SpamAssassin's core rules can be found.
    # If you wish to specify the directory yourself, you can use the
    # %%VERSION%% macro to replace the actual SpamAssassin version number.
    #$system_rules_dir = "/usr/share/spamassassin";
    #$system_rules_dir = "/var/lib/spamassassin/%%VERSION%%"; # sa-update
    $system_rules_dir = undef; # default: let the script find it

    # The directory where your amavis user's user_prefs file can be found.
    #$user_rules_dir = "/var/amavisd/.spamassassin";
    #$user_rules_dur = "~/.spamassassin";
    #$user_rules_dir = undef; # default: let the script find it
    $user_rules_dir = "/var/amavisd";


  2. load-sa-rules.pl を起動してルールを取り込む。ズラズラと取り込んだルールが表示される。

    # cd /var/amavisd/maia/scripts
    # ./load-sa-rules.pl
    Scanning /usr/local/share/spamassassin for SpamAssassin rules
    Scanning /etc/mail/spamassassin for SpamAssassin rules
    /etc/mail/spamassassin/local.cf
    Adding new rule: ISO2022JP_CHARSET (ISO-2022-JP message)
    Adding new rule: GB2312_CHARSET (GB2312 message)
    Adding new rule: BIG5_CHARSET (Big5 message)
    Adding new rule: WINDOWS_CHARSET (Windows-1252 message)
    Adding new rule: GB2312ENC (gb2312 message)
    Adding new rule: MIMEQENC (Quoted-Printable mime definition)

       ( snip )

    Scanning /var/amavisd/.spamassassin for SpamAssassin rules
    370 new rules added, all scores updated.


  3. 1項で紹介したTLECさんのルールはかなりの頻度で更新されているので、これを有効に使わせてもらうと精度があがると思われる。そこで、一日に一回(迷惑をかけるので節度を持って)、ルールをチェックし更新されていたらダウンロードしload-sa-rules.pl を起動してルールを取り込むようにした。

    1. 適当な場所(おやじは /usr/local/bin/sa_learn )に、下記内容を適当な名前(ex. sa_learn.sh)でファイルを作成する。スクリプト中の WORK_DIR="/usr/local/bin/sa_learn" は設置したパスに併せること。

      #!/bin/sh

      CF_DIR="/var/amavisd/"
      CF_FILES="user_prefs"
      TLEC="http://tlec.linux.or.jp/docs/"
      TLEC_FILES="user_prefs"
      WORK_DIR="/usr/local/bin/sa_learn"

      cd ${WORK_DIR}
      if [ -f ${TLEC_FILES} ]; then
          cp ${TLEC_FILES} ${TLEC_FILES}.2
          wget -q -N ${TLEC}${TLEC_FILES}
          cmp -s ${TLEC_FILES} ${TLEC_FILES}.2
          if [ $? = 1 ]; then
              cp ${TLEC_FILES} ${CF_DIR}${CF_FILES}
              /var/amavisd/maia/scripts/load-sa-rules.pl
              /etc/init.d/amavis reload
          fi
      else
          wget -q -N ${TLEC}${TLEC_FILES}
          if [ -f ${TLEC_FILES} ]; then
              cp ${TLEC_FILES} ${CF_DIR}${CF_FILES}
              /var/amavisd/maia/scripts/load-sa-rules.pl
              /etc/init.d/amavis reload
          fi
      fi

      exit;


    2. スクリプトに実行権を付与し、実行してみる。初回ならルールをダウンロードして、データが取り込まれ、最後にmaia(Amavisd-new)がreloadされるはずである。

      # chmod 755 /usr/local/bin/sa_learn/sa_learn.sh
      # /usr/local/bin/sa_learn/sa_learn.sh
      2006-05-06 16:35:25 Maia: [load-sa-rules] Adding new rule: GTUBE (Generic Test for Unsolicited Bulk Email)
      2006-05-06 16:35:25 Maia: [load-sa-rules] Adding new rule: RAZOR2_CHECK (Listed in Razor2 (http://razor.sf.net/))

         ( snip )

      2006-05-06 16:35:40 Maia: [load-sa-rules] 639 new rules added (1514 rules total), all scores updated.
      Reload virus-scanner (amavisd-new)                    done


    3. 動作が確認できたら /etc/crontab に下記内容を追記し、corn で1日1回(下記例では3:12)に実行して更新を行うようにする。

      12 3 * * * root /usr/local/bin/sa_learn/sa_learn.sh >/dev/null 2>&1



■Maia Mailguard のPHPスクリプトのインストール

ダウンロードしたMaia Mailguard のPHPスクリプトをインストールします。インストールは、Apache のドキュメントルート配下で適当なディレクトリを作成して行います。ここでは、http://www.aconus.com/mail/ でアクセスするものとして、「/srv/www/htdocs/mail」ディレクトリ配下にインストールしました。

  1. 「/srv/www/htdocs/mail」ディレクトリを作成し、そこにダウンロードしたPHPスクリプトをコピーする。

    # mkdir /srv/www/htdocs/mail
    # cp -r /usr/local/maia/maia-1.0.x/php/* /srv/www/htdocs/mail/


  2. 必要に応じておやじの日本語化パッチ( maia_ja-x.x.x.patch )をインストールする。日本語化パッチはパッチというほどのものではなく、日本語にするとフォントが大きすぎるため調整したものである。バージョン1.0.2の日本語化パッチには適用済みなので本作業は不要。

    # cd /srv/www/htdocs/mail
    # wget http://www.aconus.com/~oyaji/suse9.3/maia_ja-2.2.0.patch
    # patch -p0 < maia_ja-2.2.0.patch
    # rm maia_ja-2.2.0.patch


  3. 株式会社サードウェアさんの日本語化パッチは UTF-8 ベースなので、 PHP の設定を変更する必要がある。他で何も使っていなければ php.ini で設定しても良いが、おやじのところでは既に EUC ベースで動いているソフトがあるので、 .htaccess で対応することにした。

    1. Maiaのディレクトリ( /srv/www/htdocs/mail )に下記内容で .htaccess ファイルを作成し設置する。

      php_value mbstring.internal_encoding UTF-8
      php_value mbstring.http_output UTF-8
      php_value mbstring.func_overload 6


    2. このディレクトリで .htaccess ファイルを有効にするため、 AllowOverride ディレクティブで有効にする内容を設定する。上記だけなら Options のみでよいが、後述する admin ディレクトリでの認証制御を行うなら AuthConfig も併せて設定しておくとよい。いろいろ使用する可能性があるなら、All で全て有効にしておいてもよい。この設定は、httpd.conf に直接書いても良いが、おやじは管理しやすくするため /etc/apache2/conf.d/ ディレクトリ配下に下記内容で maia.conf というファイルを作成し設置した。

      <Directory /srv/www/htdocs/mail>
         AllowOverride All
      </Directory>


  4. 続けて、Smarty テンプレートエンジンをインストールする。Smarty もシステムベースでインストールしても良いが、他のアプリとの競合を避けるため、Maiaに組み込むことにした。

    # cd /usr/local/maia
    # wget http://smarty.php.net/do_download.php?download_file=Smarty-2.6.13.tar.gz
    # tar zxf Smarty-2.6.13.tar.gz
    # cp -r Smarty-2.6.13/libs /srv/www/htdocs/mail/libs/Smarty


  5. なお、環境によっては統計の時刻表示がおかしくなる場合(UNIXタイムモドキ)がある。おやじは、バックアップ機のSuSE9.3やCentOS4.2では特に問題はなかったが、現用のx86_64環境のSuSE9.3でおかしくなった。Smartyのdate_formatが正しく動作しない(localtimeがうまく取れない?)ためで、maiadate_formatなるplugin( modifier.maiadate_format.tar.gz )を作成して、stats.tplにパッチ( maia_localtime-2.2.0.patch )をあてて対処した。問題がなければ対処不要。

    # cd /srv/www/htdocs/mail/libs/Smarty/plugins
    # wget http://www.aconus.com/~oyaji/suse9.3/modifier.maiadate_format.tar.gz
    # tar zxfv modifier.maiadate_format.tar.gz
    # rm modifier.maiadate_format.tar.gz
    # cd /srv/www/htdocs/mail
    # wget http://www.aconus.com/~oyaji/suse9.3/maia_localtime-2.2.0.patch
    # patch -p0 < maia_localtime-2.2.0.patch
    # rm maia_localtime-2.2.0.patch


  6. Maiaの設定はconfig.phpで行うが、初期ファイルはconfig.php.distをコピーして作成する。

    # cd /srv/www/htdocs/mail
    # mv config.php.dist config.php


  7. 環境に合わせてMaiaの設定を行う。設定したのは、日本語環境への対応、maiaデータベースへのアクセス関係、バーチャルドメイン対応とログイン認証関係の設定である。(config.phpの以下のパラメータを変更)

    //$default_display_language = "en";
    $default_display_language = "ja";

    //$default_charset = "ISO-8859-1";
    $default_charset = "UTF-8";

    //$maia_sql_dsn = "dbtype://dbuser:passwd@tcp(hostname:port)/maia";
    //$maia_sql_dsn = "mysql://amavis:passwd@tcp(localhost:3306)/maia";
    //$maia_sql_dsn = "mysql://dbuser:passwd@unix(/var/tmp/mysql.sock)/maia";
    //$maia_sql_dsn = "mysql://dbuser:passwd/maia";
    $maia_sql_dsn = "mysql://vscan:passwd@tcp(localhost:3306)/maia";

    //$address_rewriting_type = 0;
    $address_rewriting_type = 4;

    //$auth_method = "internal";
    $auth_method = "sql";

    // Database connection string to use for authentication. This may
    // be a different database than the one Maia uses. The connection
    // string uses the same format as $maia_sql_dsn.
    //$auth_sql_dsn = "dbtype://dbuser:passwd@tcp(localhost:3306)/dbname";
    $auth_sql_dsn = "mysql://postfix:new_password1@tcp(localhost:3306)/postfix";

    // Name of the table that contains the user's authentication info
    //$auth_sql_table = "auth";
    $auth_sql_table = "mailbox";

    // Name of the column that contains the user's name
    $auth_sql_username_column = "username";

    // Name of the column that contains the user's password
    $auth_sql_password_column = "password";

    // Name of the column that contains the user's e-mail address
    //$auth_sql_email_column = "email";
    $auth_sql_email_column = "username";

    // Password encryption type:
    //
    // "plaintext" - no encryption
    // "md5" - MD5 hash
    // "crypt" - crypt() hash
    //$auth_sql_password_type = "plaintext";
    $auth_sql_password_type = "crypt";


    1. $default_display_language
      デフォルトで使用する言語をlocaleにあるフォルダ名で指定する。日本語の「ja」を設定。

    2. $default_charset
      画面表示で使用するキャラクタセットを指定する。言語ファイルはUTF-8なので、これにあわせる。

    3. $maia_sql_dsn
      MySQLのデータベースへのアクセスパラメータを設定する。「passwd」の部分を先に設定したパスワードに変更すること。

    4. $address_rewriting_type
      通常は、"0" で良いが、バーチャルドメインの場合はドメインを含めてuserとして扱うため "4" に変更する。

    5. $auth_method
      Maia Mailguard にログインするときの認証を行う方法を指定する。通常なら認証方法に依存しない"pop3"で行うのが簡単。おやじは、バーチャルドメインでMySQLで認証しているため、"sql"で認証することにした。もちろんpop3でも可である。

    6. $auth_sql_dsn
      データベースはpostfixの認証で作成したmailboxテーブルで行うものとし、dbtype: mysql 、dbuser: postfix 、passwd: new_password1(postfixのところで設定したパスワード) 、dbname: postfix と設定する。

    7. $auth_sql_table
      "mailbox"テーブルで認証する。

    8. $auth_sql_username_column/$auth_sql_password_column
      デフォルト値がpostfixのテーブルと同じなのでそのまま。

    9. $auth_sql_email_column
      メールアドレス = "username"なので、"username"を設定。

    10. $auth_sql_password_type
      パスワードタイプは"crypt"。


  8. PHPスクリプトをApacheのオーナにあわせておく。

    # chown -R wwwrun:www /srv/www/htdocs/mail


  9. ここでApacheのセキュリティ対策を行っておく。

    1. こちらを参考に、admin ディレクトリへのアクセスに認証を行うようにする。

    2. こちらを参考に、mail ディレクトリ配下へのアクセスは HTTPS のみとするように設定する。

  10. ここで設定を反映させるため、Apacheをリロードしておく。

    # /etc/init.d/apache2 reload


 

■PHP及びデータベース関係の設定の確認

ここで、PHPとデータベース関係の設定に問題がないか、configtest.php を使ってチェックしておきます。
http://www.aconus.com/mail/admin/configtest.php にアクセスすれば、自動的に環境チェックが行われ結果が表示されます。

注: SUSE10.xでは、PEAR関係でインストールされていないエラーがでますが、SUSEのPHP5のパスが特殊なためであり、ロジカルリンクを張ることでエラーはなくなります。

# ln -s /usr/share/php5 /usr/lib/php [Enter]
# ln -s /usr/share/php5/PEAR /usr/lib/php/pear [Enter]



■データベースのアップグレード(1.0.0 → 1.0.1 のみ)

maia-1.0.1では、メール一覧表示での差出人と件名の表示桁数を個人個人で設定できるようになりましたが、 maia-1.0.0 からアップグレードした場合はMysql にそのデータがないためMaiaにアクセスするとエラーがでます。 maia-1.0.0 からアップグレードする場合は、upgrade.php を使って整合性を採ってください。ブラウザで http://www.aconus.com/mail/admin/upgrade.php にアクセスすれば、自動的にアップグレードされ下記のようなメセージがでれば完了です。


■Amavisd-newへのパッチのインストール

Amavisd-new と MaiaMailguard を連携させるため、Amavisd-new にパッチを当てる必要がありますが、Maia ではAmavisd-new にパッチを当てた状態で amavisd-maia というファイルで提供されており、更に日本語化でパッチがあたっているのでそれと置き換えます

  1. 元の SuSE の Amavisd-new をバックアップしてから置き換える。

    # cd /usr/sbin
    # mv amavisd amavisd-orig
    # cp /usr/local/maia/maia-1.0.x/amavisd-maia amavisd
    # chown root amavisd
    # chmod 755 amavisd


  2. このままではYaSTで自動更新されてしまうので、更新対象にしないように設定する。

    1. YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。
       
    2. 「フィルタ」 を 「検索」 とし検索欄に 「amavisd-new」 と入力し 「検索」 ボタンを押す。
    3. 右側に該当するamavisd-newパッケージが出てくるので、パッケージ上で右クリックして「保護されている:変更しない」という鍵マーク選択して 「了解」 を押しておしまい。

■Amavisd-newの設定

Amavisd-new の設定は /etc/amavisd.conf で行いますが、Amavisd-new を MaiaMailguard と連携させるためには MaiaMailguard のサイトにある amavisd.conf のサンプルファイルをベースに編集していきます。SuSEのデフォルトの amavisd.conf を編集するのはかなり面倒なので、バックアップして作成しなおしたほうが良いです。

  1. MaiaMailguard のための設定ではないが、 Amavisd-new の基本的な設定を行う。(赤字:追加)

    1. ドメインの変更

      #$mydomain = 'yourdomain.tld'; # a convenient default for other settings
      $mydomain = 'mail.aconus.com'; # a convenient default for other settings


    2. ホスト名の変更

      #$myhostname = 'host.domain.tld'; # must be a fully-qualified domain name!
      $myhostname = 'mail.aconus.com'; # must be a fully-qualified domain name!


  2. MaiaMailguard のサンプルコンフィグでは隔離・キャッシュするメール本文の暗号化機能がオプションといいながら有効になっているが、おやじの環境では PHP(mimeDecode.php)でエラーがでて復号化できないので無効にした。このままで運用してしまうと、後でMaiaMailguardのビューアでは本文が見えなくなってしまうので要注意。

    # Blowfish encryption key file (optional)
    #$key_file = "$MYHOME/maia.key";

  3. 動作を確認するためログレベルを変更して、詳細なログを採るようにする。確認ができたら元の'0'に戻す。

    #$log_level = 0;
    $log_level = 5;


  4. MySQLのデータベースにアクセスするための設定を追加する。データベース名: maia 、ユーザ: vscan 、下記「passwd」は、先に設定したデータベース用のパスワードを設定すること。

    # @lookup_sql_dsn =
    #   ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'],
    #     ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'] );
    @lookup_sql_dsn = ( ['DBI:mysql:database=maia;host=127.0.0.1;port=3306', 'vscan', 'passwd'] );


  5. Amavisd-new でのメールの最終処理の設定を必要なら変更する。Amavisd-new ではスパムとおかしなヘッダのメールはデフォルトで 'D_PASS' (通過させる)ようになっているが、これではMaia Mailguard を入れてる意味がないので、'D_DISCARD'に変更する。但し、この設定ではMaia Mailguardに宛先がない(ユーザがいるがまだ一度もMaia Mailguardにログインしていない場合を含む)メールが誤認識されると廃棄されてしまうので、システムで取り扱っているドメインは必ず登録しておくこと。

    $final_virus_destiny        = D_DISCARD;
    $final_banned_destiny       = D_DISCARD;
    $final_spam_destiny         = D_DISCARD;
    $final_bad_header_destiny   = D_DISCARD;


    # SOME OTHER VARIABLES WORTH CONSIDERING (see amavisd.conf-default for all)

    $warnvirussender = 0;
    $warnspamsender  = 0;


  6. ここで設定を反映させるため、Amavisd-newを再起動しておく。

    # /etc/init.d/amavis restart [Enter]


  7. 使用するウイルススキャナに併せて、設定を変更する。サンプルの amavisd.conf では ClamAV 用の設定がされている。ClamAV をデーモンモードで使用するならAmavisd-new側がソケットファイル通信になっているのでLocalsocket のファイル指定を行うが、SuSEのClamAVのデフォルトは"/var/lib/clamav/clamd-socket"のため、"/var/amavisd/clamd.sock"から変更する必要がある。

    ### http://www.clamav.net/
    ['ClamAV-clamd',
       \&ask_daemon, ["CONTSCAN {}\n", "
    /var/lib/clamav/clamd-socket"],
       qr/\bOK$/, qr/\bFOUND$/,
       qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
    # NOTE: run clamd under the same user as amavisd; match the socket
    # name (LocalSocket) in clamav.conf to the socket name in this entry
    # When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],


     他のスキャナを使用する場合は、下記のとおりとする。

    1. Amavisd-new では、プライマリとセカンダリにそれぞれ複数のスキャナを登録できる。Amavisd-new はプライマリのスキャナで検出するまで全てのスキャナでスキャンし、プライマリスキャナの全てが失敗した場合にセカンダリスキャナでスキャンする。

    2. 一般的に、プライマリスキャナには毎回スキャンされるためレスポンスが良いデーモンモードのスキャナを使用し、セカンダリにはコマンドモードのスキャナを配置するとよい。但し、無料で使用できるデーモンモードのスキャナはClamAVぐらいしかなくなってしまったので、両方ともコマンドモードでもかまわない。

    3. プライマリスキャナは必ず登録しないと、Amavisd-newが動作するたびにエラーが出てしまうので注意すること。また、プライマリに複数のスキャナを登録できるとはいえ、正常メールは毎回その全てでスキャンされるので負荷がかかるので、一つにすべきである。

    4. 使用するスキャナ毎の設定方法がこちらにあるので参考に設定すれば良い。その際、プライマリはプライマリ・スキャナ・アレイ(@av_scanners)にセカンダリはセカンダリ・スキャナ・アレイ(@av_scanners_backup) に設定する。

■Postfix の設定

 
最後にPostfix関係の設定を行います。関連ページと重複しますが間違えないように再掲します。基本的にフィルタ関係の処理が不要になり、一般的なAmavisd-newを使ったフィルタリングの設定と同じです。

  1. Postfix の /etc/postfix/main.cf に [smtpd] サーバで受信したメールをAmavisd-new 10024番ポートにfowarding する設定を追加する。

    # postconf -e 'content_filter=smtp-amavis:[127.0.0.1]:10024'
    # postconf -e 'max_use=10'


  2. Postfix の /etc/postfix/master.cf に下記を追加する。なお、実際の設定時は、smtp-amavis と127.0.0.1:10025 の行頭に空白を入れないことと、オプション行の先頭と行内のパラメータの区切りは「Tab」を使用すること。空白ではエラーとなることがあるので注意が必要である。(赤字:追加、青字:変更)

    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
    smtps     inet  n       -       n       -       -       smtpd
        -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

    pickup    fifo  n       -       n       60      1       pickup

    smtp-amavis unix -      -       n       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20
    127.0.0.1:10025 inet n  -       n       -       -       smtpd
      
    -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=
    no_address_mappings,no_header_body_checks,no_unknown_recipient_checks


    [smtp-amavis]
    1. smtp-amavis は、Amavisd-newのREADME.postfxを参考に設定する。

    [[127.0.0.1:10025]
    1. ここも、Amavisd-newのREADME.postfxを参考に設定する。
    2. PostfixAdminの転送機能を利用していると、README.postfxの設定では転送先に2通同じメールが配送されてしまう。その対策として、上記のように receive_override_options に 「 no_address_mappings 」を追加する。
      なお、上記では転送元にも配送されるが、転送先にだけに配送すればよい場合は、main.cf に「 receive_override_options = no_address_mappings 」を追記すればよい。


  3. ウイルス/SPAM検出時のメール通知ユーザ(virusalert / spamalert )を追加するが、バーチャルドメインの場合は、Postfix Admin で alias(別名)を追加する。通常は、aliases(/etc/aliases) にウイルス/SPAM検出時のメール通知ユーザを追加する。設定後、newaliases すること。

    # vi /etc/aliases

    virusalert: root
    spamalert: root

    [Esc],[:],[w],[q]で保存。

    # newaliases



■メンテナンス用スクリプトの設定

Maia Mailguard にはいくつかの管理用スクリプトが用意されているので、それらを設定します。スクリプトはいずれも corn で周期的に起動することを前提に作成されているので、ドキュメントに従い /etc/crontab に設定します。なお、これらのスクリプトは Amavisd-new のユーザ(SuSEならvscan)で実行する必要があります。

  1. process-quarantine.pl

    ユーザがスパムや正規メールと判定した情報を元に、Bayesデータベースを学習させるためのスクリプトで毎時走らせるように指定されている。オプションがいくつかあるが、Bayesデータベースを学習させる --learn とし、毎時12分に実行させるように下記をcrontabに追加した。

    12 * * * * vscan /var/amavisd/maia/scripts/process-quarantine.pl --learn >/dev/null 2>&1


    [BayesデータベースのMySQL化]

    Bayesデータべースのバックアップを良く忘れるので、下記を参考にMySQL化した。データベースそのものは、maia-mysql.sqlでデータベースを作成したときに作成されているので、設定のみである。

       http://www.maiamailguard.com/maia/wiki/SpamAssassin3SQLBayes

    1. /etc/mail/spamassassin/local.cf に下記を追加する。

      use_bayes 1
      bayes_store_module          Mail::SpamAssassin::BayesStore::SQL
      #bayes_store_module         Mail::SpamAssassin::BayesStore::PgSQL
      bayes_sql_dsn               DBI:mysql:maia
      #bayes_sql_dsn              DBI:Pg:dbname=maia;host=localhost;port=5432
      bayes_sql_username         
      vscan
      bayes_sql_password         
      passwd
      auto_whitelist_factory      Mail::SpamAssassin::SQLBasedAddrList
      user_awl_dsn                DBI:mysql:maia
      #user_awl_dsn               DBI:Pg:dbname=maia;host=localhost;port=5432
      user_awl_sql_username       
      vscan
      user_awl_sql_password       
      passwd


    2. 後は、amavisd-newをreloadすればおしまいである。

      # /etc/init.d/amavis reload [Enter]



    [余談]

    maiaのDBはデフォルトのままではmysqldumpでバックアップできないので、以下でLOCK TABLESの使用を許可する。

    GRANT LOCK TABLES ON maia.* TO vscan@localhost IDENTIFIED BY 'passwd';


  2. maiadbtool.pl

    maiadbtool.pl は、バージョン1.0.2から提供された多目的のデータベースユーティリティであるが、今回は、Bayes database token の整理に使用した。
    最近、スコアが0のスパムがかなり届くようになった。これは spamassassin でのスキャンがうまくできていないことが原因であると考えいろいろ調査した。その結果、bayes データベースの容量オーバに伴う自動エクスポートが原因とほぼ判明したので、本ユーティリティで定期的にエクスポートするようにした。 spamassassin はデフォルトの設定で運用を続けるとデータベースがどんどん肥大化していくが、bayes_expiry_max_db_size (default: 150000)の75%もしく100,000tokenを超えると、 bayes_auto_expire (default: 1)の設定に従って自動的に古いデータをエクスポートする。このエクスポート動作は、サーバの負荷に関係なく行われるので、スパムで負荷が高くなるような場合にタイムアウトしてしまい、スコアが0になっていると想定された。
    よく調べたら何のことはない。Maia Mailguard の FAQ に対策が記述されていたので、これに従い設定した。
    1. /etc/mail/spamassassin/local.cf に下記を追加し、自動エクスポートメカニズムを無効にする。

      bayes_auto_expire   0


    2. /etc/crontab に 下記を追加し amavis/maiaユーザ(SuSEはvscan)で、1日1回、負荷が少ない時間にエクスポートプロセスを動作させる。

      # expire Bayes tokens daily at 03:15
      15 3 * * * vscan /var/amavisd/maia/scripts/maiadbtool.pl --expire-bayes


      なお、下記設定でも同様の動作になるので、こちらでも良い。

      # expire Bayes tokens daily at 03:15
      15 3 * * * vscan sa-learn --sync --force-expire


    3. 設定が完了したら、amavid-newを再起動しておく。
      なお、expireすると下記のようなメールが来るはずである。

      2007-03-21 16:25:01 Maia: [maiadbtool] Expiring tokens from the SpamAssassin Bayes database
      2007-03-21 16:25:22 Maia: [maiadbtool] expired old bayes database entries in 19 seconds
      2007-03-21 16:25:22 Maia: [maiadbtool] 132663 entries kept, 2230 deleted
      2007-03-21 16:25:22 Maia: [maiadbtool] token frequency: 1-occurrence tokens: 89.52%
      2007-03-21 16:25:22 Maia: [maiadbtool] token frequency: less than 8 occurrences: 8.40%



  3. send-quarantine-reminders.pl

    ユーザがMaia Mailguardのメンテナンスを行わないと隔離エリアにメールが溜まるので、メンテナンスするようにメール通知する機能があるが、機能をユーザが停止していてもシステムとしてメンテナンスを促す場合に設定する。下記は1週間に1回、金曜日に通知する例である。

    37 11 * * 5 vscan /var/amavisd/maia/scripts/send-quarantine-reminders.pl >/dev/null 2>&1


  4. send-quarantine-digests.pl

    ユーザがMaia Mailguardで隔離エリアのメールダイジェストを要求しているかどうかをチェックするスクリプトで、ユーザは分単位で設定できるが負荷がかかるので、システムとしては5分間隔でチェックすれば十分と思われる。

    0-59/5 * * * * vscan /var/amavisd/maia/scripts/send-quarantine-digests.pl >/dev/null 2>&1



    なお、通知するMaia Mailguardのログイン用URLを変更する必要がある。

    [maia-1.0.0の場合]
     send-quarantine-digests.pl を編集

    # my $base_url = "http://example.com/";
    my $base_url = "http://www.aconus.com/mail/";



    [maia-1.0.1の場合]
     /etc/maia.conf を編集

    ### send-quarantine-digests.pl

    # Base URL to Maia's PHP scripts
    #$base_url = "http://example.com/";
    $base_url = "http://www.aconus.com/mail/";


    なお、ここで送信されるダイジェストが日本語化されていないとのご指摘があったので対処しました。本機能を使用する場合は下記対処をしてください。(maia-1.0.1のみ。1.0.0は未対応) なお、maia-1.0.2は日本語化パッチで対処済みなのでJcodeのみインストールしてください。

    1. まず、日本語にデコードするため Jcode を使用するので、インストールしてなければ下記でCPANからインストールする。

      # perl -MCPAN -e shell
      cpan> install Jcode

         
      cpan> quit
      Lockfile removed.

    2. maia-1.0.1を解凍したディレクトリに日本語化パッチをダウンロードしパッチをあて、コピーする。

      # cd /usr/local/maia
      # wget http://www.aconus.com/~oyaji/suse9.3/maia-1.0.1-send-quarantine-digests-japanese.patch
      # patch -p0 < maia-1.0.1-send-quarantine-digests-japanese.patch
      # cp maia-1.0.1/scripts/send-quarantine-digests.pl /var/amavisd/maia/scripts
      # cp maia-1.0.1/templates/digest.tpl /var/amavisd/maia/templates

    3. /etc/maia.conf を編集し、表のタイトルを日本語化する。
      /etc/maia.conf を編集(緑字:変更)

      # Heading titles for each section of the digest report
      $titles = { 'spam'        => "
      スパム",
                  'virus'       => "
      ウイルス感染メール",
                  'banned_file' => "
      危険な添付ファイル",
                  'bad_header'  => "
      不正ヘッダを持つメール",
                  'ham'         => "
      正規メール"
      };


  5. stats-snapshot.pl (1.0.2ベース)

    このスクリプトは、メール管理の状態をグラフ表示するための各種統計値のテーブルのスナップショットを作製する場合に使用するもので、毎正時に実行させます。

    0 * * * * vscan /var/amavisd/maia/scripts/stats-snapshot.pl >/dev/null 2>&1


    続けて、グラフを書かせるための設定を行います。

    1. グラフ関係のPEARモジュールが入っていない場合(入っていなければ、「PHP及びデータベース関係の設定の確認(configtest.php)」のところで赤くなっているはず)は、インストールする。
      インストールするのは、PEAR::Image_Color、PEAR::Image_Canvas、PEAR::Image_Graph、PEAR::Numbers_Roman、PEAR::Numbers_Words の5つのモジュールをインストールするが、Image_Canvas、Image_Graph、Numbers_Wordsに関しては、エラーがでてインストールできなかった(stableバージョンがないため?)ので、チャネル指定でインストールした。

      # pear install Image_Color [Enter]
      # pear install channel://pear.php.net/Image_Canvas-0.3.0 [Enter]
      # pear install channel://pear.php.net/Image_Graph-0.7.2 [Enter]
      # pear install Numbers_Roman Numbers_Words [Enter]
      # pear install channel://pear.php.net/Numbers_Words-0.15.0 [Enter]


      ここで、再度 http://www.aconus.com/mail/admin/configtest.php にアクセスしてチェックすると、インストールしたPEAR::Image_Graph 0.7.2ではパッチをあてないと駄目と出るので修正した。
      修正するのは、/usr/share/php/PEAR/Image/Graph/Plot/Pie.php で、下記の502行目を変更すればよい。

      502行目  $this->_clip(false);


    2. このままで設定を変更してグラフを書くと凡例が文字化けしてしまうので、以下で対策をする。
      まず、使用したいフォントをフォントを「Image/Canvas/Fonts/」配下にコピーするかロジカルリンクする。今回は、IPAフォントをコピーした。SuSE10.2ではIPAフォントはデフォルトで入っていないので、YaSTでインストールした。

      [SuSE9.3]
      # cp /usr/lib/grass5/fonts/*.ttf /usr/share/php/Image/Canvas/Fonts/ [Enter]


      [SuSE10.2]
      # cp /usr/lib/grass5/fonts/*.ttf /usr/share/php5/PEAR/Image/Canvas/Fonts/ [Enter]


      次に、コピーしたフォントの中で使用する可能性のあるフォントを「 Image/Canvas/Fonts/fontmap.txt 」に追記する。書き方は、"適当なフォント名","対応するフォントファイル名"とカンマ区切りで設定する。今回は、とりあえずIPA Gothicのみを設定した。

      [SuSE9.3]
      # vi /usr/share/pear/Image/Canvas/Fonts/fontmap.txt [Enter]

      [SuSE10.2]
      # vi /usr/share/php5/PEAR/Image/Canvas/Fonts/fontmap.txt
      [Enter]


      IPA Gothic,ipag.ttf   # "適当なフォント名","対応するTrueTypeフォントファイル名"

      [Esc],[:],[w],[q]で保存。


      後は、 config.php の $chart_font に上記で設定したフォント名(ここでは"IPA Gothic")を設定すれば良い。

         $chart_font = 'IPA Gothic';
          //$chart_font = 'coolveti';




■Maia Mailguardへのログイン

メールシステムのユーザが、Maia Mailguard にログインするのに特別な操作は不要です。ユーザは単に Maia Mailguard のトップページにアクセスして自分のメールアカウント(oyaji@mail.aconus.com とドメイン名まで含めて)とそのアカウントのパスワードでログインできます。画面イメージを示します。


◆スーパ管理者の登録

まず最初に、Maia Mailguard の全ての管理ができるスーパ管理者を登録します。そのためには、ブラウザのアドレス欄に下記のように "?super=register" を付加してアクセスすると、通常のログイン画面が表示されるので、スーパ管理者とするユーザアカウントでログインします。認証が成功し正常にログインできれば、そのユーザがスーパ管理者として登録されます。既にスーパ管理者が存在する場合は、通常のログインとなります。なお、そのユーザがスーパ管理者かどうかは、管理画面上部のアイコンに鍵のアイコン(右から3つ目)があるかどうかでわかります。

http://www.aconus.com/mail/login.php?super=register


◆スーパ管理者の削除

スーパ管理者を削除するには、ブラウザのアドレス欄に下記のように "?super=unregister" を付加してアクセスすると、通常のログイン画面が表示されるので、スーパ管理者のユーザアカウントでログインします。認証が成功し正常にログインできれば、スーパ管理者の特権は解除され一般ユーザとしてログインされます。なお、そのユーザのスーパ管理者特権が解除されたかどうかは、管理画面上部のアイコンに鍵のアイコン(右から3つ目)がなくなっていることでわかります。

http://www.aconus.com/mail/login.php?super=unregister




Top Pageへ