ウイルス&スパム管理(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に変更になっているので、特にバージョンアップ時は要注意です。
■はじめに
ここではバーチャルドメイン環境に導入することを前提に記述していますが、もちろん通常環境でも同じ設定で使用できます。
なお、Postfix、Spamassassin、ClamAV(/AntiVir/F-Prot)、Amavisd-newは既にインストールされて動作しているものとします。これらに関しては、
こちらや
こちらを参考にしてください。また、当然ながら、日本語対応(mbstring付き)のPHPが使用できるApacheが動作しているものとします。
■事前準備
Maia Mailguard を動かすためには、関連のソフトやパッケージが必要になります。Maia Mailguard
をインストールする前にそれらの準備を以下で行っていきます。
◆PHP拡張モジュールのインストール
Maia Mailgateを動かすためには、いくつかの PHP 拡張モジュールをインストールする必要があります。 グラフ表示はやってみましたが、ダイナミック表示ではかなりCPUパワーを喰うため表示が遅くなるのと、ほとんど役にたたないこと、環境整備が素直に行かずマニュアルでPEARモジュールをインストールしなければならなかった等があったので、ここでは省略しました。
- まず、パッケージマネージャを最新にする必要があるが、おやじの環境では下記のようなメモリ不足のエラーが出てそのままでは更新できなかったので、/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 |
- パッケージマネージャを最新にする。起動するといろいろ聞かれるが基本的にデフォルトのままでよいので[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]
|
- 必要とされる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の場合]
- 本家から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
|
- 株式会社サードウェアさんから日本語化パッチをダウンロードし適用する。
# wget http://maiamailguard.jp/files/xxxxxxxx-maia-japanese.patch
# patch -p0 < xxxxxxxx-maia-japanese.patch
|
[maia-1.0.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
|
- おやじの日本語化パッチをダウンロードし適用する。
# 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)の場合]
- 本家から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
|
- おやじの日本語化パッチをダウンロードし適用する。(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等でインストールしてください。
- 本家から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
|
- おやじの日本語化パッチをダウンロードし適用する。
# 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を解凍後に上記でパッチを適用し、下記ファイルのみ入れ替えてください。
- maia-1.0.2/amavisd-maia
- maia-1.0.2/scripts/maiadbtool.pl
- maia-1.0.2/scripts/send-quarantine-digests.pl
- maia-1.0.2/scripts/send-quarantine-reminders.pl
- maia-1.0.2/templates/digest.tpl
- maia-1.0.2/templates/newuser.tpl
- maia-1.0.2/templates/reminder.tpl
◆Amavisd-newとMaia Mailguard用のデータベースの登録
Maia Mailguard は SQL データベースで各種情報を管理します。SQL データベースとしては、MySQL と PostgreSQL
が使用できますが、ほかのソフトとの関係でここでは MySQL を使用しました。MySQL がインストールできていない場合は、
こちらを参考にインストールしてください。
- まず、下記で "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 |
- 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] |
- このデータベースへのアクセス権限を設定する。ユーザは 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 |
- MySQL を使っている場合は、/etc/my.cnf ファイルの中に max_allowed_packet の設定を追加する必要がある。この設定は、postfix
の main.cf の「message_size_limit」で設定した値と同じにすること。
[mysql]
max_allowed_packet=10M
|
- ここで設定を反映させるため、MySQLをリロードしておく。
# /etc/init.d/mysql reload
|
■Maia Mailguardのスクリプトとテンプレートのインストール
Maia Mailguard 用のメンテナンススクリプトとテンプレートをインストールします。インストールディレクトリは、INSTALL
ドキュメントにあわせて「/var/amavisd/maia」にしました。 SuSE の Amavisd-new
のディレクトリにあわせて「/var/spool/amavisd/maia」でもいいのですが、その場合はスクリプト内の database.cfg
のパスを全て変更する必要があります。
- インストールディレクトリを作成し、データをコピーする。
# 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# |
- ここでスクリプトを動かすための設定を行うが、バージョン1.0.0と1.0.1/1.0.2では設定方法が異なるので注意が必要である。特に1.0.0からのバージョンアップ時には他も含め注意が必要である。
[maia-1.0.0の場合]
-
データが設定されている database.cfg ファイル(インストールしたscriptsディレクトリ配下)を編集する。 database.cfg そのものはないので、 database.cfg.dist をリネームして作成し設定を変更する。
# mv /var/amavisd/maia/scripts/database.cfg.dist /var/amavisd/maia/scripts/database.cfg
|
- 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"
|
- インストールパスをデフォルトの「/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の場合]
- ベースとなる 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
|
- /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";
|
- ファイルのオーナとパーミションを設定する。ファイルのオーナは 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 スクリプトを使って確認します。不足しているモジュールがあったら、追加インストールする必要があります。
- 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# |
- 上記から、おやじの環境では 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.」といったメッセージが出るので、チェックする。
- なお、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」というスクリプトを使用します。
- もし、初めてならなら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";
|
- 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.
|
- 1項で紹介したTLECさんのルールはかなりの頻度で更新されているので、これを有効に使わせてもらうと精度があがると思われる。そこで、一日に一回(迷惑をかけるので節度を持って)、ルールをチェックし更新されていたらダウンロードしload-sa-rules.pl
を起動してルールを取り込むようにした。
- 適当な場所(おやじは /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;
|
- スクリプトに実行権を付与し、実行してみる。初回ならルールをダウンロードして、データが取り込まれ、最後に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
|
- 動作が確認できたら /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」ディレクトリ配下にインストールしました。
- 「/srv/www/htdocs/mail」ディレクトリを作成し、そこにダウンロードしたPHPスクリプトをコピーする。
# mkdir /srv/www/htdocs/mail
# cp -r /usr/local/maia/maia-1.0.x/php/* /srv/www/htdocs/mail/ |
- 必要に応じておやじの日本語化パッチ( 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 |
- 株式会社サードウェアさんの日本語化パッチは UTF-8 ベースなので、 PHP の設定を変更する必要がある。他で何も使っていなければ php.ini で設定しても良いが、おやじのところでは既に EUC ベースで動いているソフトがあるので、 .htaccess で対応することにした。
- 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
|
- このディレクトリで .htaccess ファイルを有効にするため、 AllowOverride ディレクティブで有効にする内容を設定する。上記だけなら
Options のみでよいが、後述する admin ディレクトリでの認証制御を行うなら AuthConfig も併せて設定しておくとよい。いろいろ使用する可能性があるなら、All
で全て有効にしておいてもよい。この設定は、httpd.conf に直接書いても良いが、おやじは管理しやすくするため /etc/apache2/conf.d/
ディレクトリ配下に下記内容で maia.conf というファイルを作成し設置した。
<Directory /srv/www/htdocs/mail>
AllowOverride All
</Directory>
|
- 続けて、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
|
- なお、環境によっては統計の時刻表示がおかしくなる場合(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
|
- Maiaの設定はconfig.phpで行うが、初期ファイルはconfig.php.distをコピーして作成する。
# cd /srv/www/htdocs/mail
# mv config.php.dist config.php |
- 環境に合わせて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"; |
- $default_display_language
デフォルトで使用する言語をlocaleにあるフォルダ名で指定する。日本語の「ja」を設定。
- $default_charset
画面表示で使用するキャラクタセットを指定する。言語ファイルはUTF-8なので、これにあわせる。
- $maia_sql_dsn
MySQLのデータベースへのアクセスパラメータを設定する。「passwd」の部分を先に設定したパスワードに変更すること。
- $address_rewriting_type
通常は、"0" で良いが、バーチャルドメインの場合はドメインを含めてuserとして扱うため "4" に変更する。
- $auth_method
Maia Mailguard にログインするときの認証を行う方法を指定する。通常なら認証方法に依存しない"pop3"で行うのが簡単。おやじは、バーチャルドメインでMySQLで認証しているため、"sql"で認証することにした。もちろんpop3でも可である。
- $auth_sql_dsn
データベースはpostfixの認証で作成したmailboxテーブルで行うものとし、dbtype: mysql 、dbuser: postfix
、passwd: new_password1(postfixのところで設定したパスワード) 、dbname: postfix と設定する。
- $auth_sql_table
"mailbox"テーブルで認証する。
- $auth_sql_username_column/$auth_sql_password_column
デフォルト値がpostfixのテーブルと同じなのでそのまま。
- $auth_sql_email_column
メールアドレス = "username"なので、"username"を設定。
- $auth_sql_password_type
パスワードタイプは"crypt"。
- PHPスクリプトをApacheのオーナにあわせておく。
# chown -R wwwrun:www
/srv/www/htdocs/mail |
- ここでApacheのセキュリティ対策を行っておく。
- こちらを参考に、admin ディレクトリへのアクセスに認証を行うようにする。
- こちらを参考に、mail ディレクトリ配下へのアクセスは HTTPS のみとするように設定する。
- ここで設定を反映させるため、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 というファイルで提供されており、更に日本語化でパッチがあたっているのでそれと置き換えます
- 元の 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 |
- このままではYaSTで自動更新されてしまうので、更新対象にしないように設定する。
- YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。
- 「フィルタ」 を 「検索」 とし検索欄に 「amavisd-new」 と入力し 「検索」 ボタンを押す。
- 右側に該当するamavisd-newパッケージが出てくるので、パッケージ上で右クリックして「保護されている:変更しない」という鍵マーク選択して
「了解」 を押しておしまい。
■Amavisd-newの設定
Amavisd-new の設定は /etc/amavisd.conf で行いますが、Amavisd-new を MaiaMailguard と連携させるためには
MaiaMailguard のサイトにある amavisd.conf の
サンプルファイルをベースに編集していきます。SuSEのデフォルトの amavisd.conf を編集するのはかなり面倒なので、バックアップして作成しなおしたほうが良いです。
- MaiaMailguard のための設定ではないが、 Amavisd-new の基本的な設定を行う。(赤字:追加)
- ドメインの変更
#$mydomain = 'yourdomain.tld'; # a convenient default for other settings
$mydomain = 'mail.aconus.com'; # a convenient default for other settings
|
- ホスト名の変更
#$myhostname = 'host.domain.tld'; # must be a fully-qualified domain name!
$myhostname = 'mail.aconus.com'; # must be a fully-qualified domain name!
|
-
MaiaMailguard のサンプルコンフィグでは隔離・キャッシュするメール本文の暗号化機能がオプションといいながら有効になっているが、おやじの環境では PHP(mimeDecode.php)でエラーがでて復号化できないので無効にした。このままで運用してしまうと、後でMaiaMailguardのビューアでは本文が見えなくなってしまうので要注意。
# Blowfish encryption key file (optional)
#$key_file = "$MYHOME/maia.key"; |
- 動作を確認するためログレベルを変更して、詳細なログを採るようにする。確認ができたら元の'0'に戻す。
#$log_level = 0;
$log_level = 5; |
- 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'] ); |
- 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;
|
- ここで設定を反映させるため、Amavisd-newを再起動しておく。
# /etc/init.d/amavis restart [Enter]
|
- 使用するウイルススキャナに併せて、設定を変更する。サンプルの 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"],
|
他のスキャナを使用する場合は、下記のとおりとする。
- Amavisd-new では、プライマリとセカンダリにそれぞれ複数のスキャナを登録できる。Amavisd-new はプライマリのスキャナで検出するまで全てのスキャナでスキャンし、プライマリスキャナの全てが失敗した場合にセカンダリスキャナでスキャンする。
- 一般的に、プライマリスキャナには毎回スキャンされるためレスポンスが良いデーモンモードのスキャナを使用し、セカンダリにはコマンドモードのスキャナを配置するとよい。但し、無料で使用できるデーモンモードのスキャナはClamAVぐらいしかなくなってしまったので、両方ともコマンドモードでもかまわない。
- プライマリスキャナは必ず登録しないと、Amavisd-newが動作するたびにエラーが出てしまうので注意すること。また、プライマリに複数のスキャナを登録できるとはいえ、正常メールは毎回その全てでスキャンされるので負荷がかかるので、一つにすべきである。
- 使用するスキャナ毎の設定方法がこちらにあるので参考に設定すれば良い。その際、プライマリはプライマリ・スキャナ・アレイ(@av_scanners)にセカンダリはセカンダリ・スキャナ・アレイ(@av_scanners_backup)
に設定する。
■Postfix の設定
最後にPostfix関係の設定を行います。
関連ページと重複しますが間違えないように再掲します。基本的にフィルタ関係の処理が不要になり、一般的なAmavisd-newを使ったフィルタリングの設定と同じです。
- 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'
|
- 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]
- smtp-amavis は、Amavisd-newのREADME.postfxを参考に設定する。
[[127.0.0.1:10025]
- ここも、Amavisd-newのREADME.postfxを参考に設定する。
- PostfixAdminの転送機能を利用していると、README.postfxの設定では転送先に2通同じメールが配送されてしまう。その対策として、上記のように receive_override_options に 「 no_address_mappings
」を追加する。
なお、上記では転送元にも配送されるが、転送先にだけに配送すればよい場合は、main.cf に「 receive_override_options
= no_address_mappings 」を追記すればよい。
- ウイルス/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)で実行する必要があります。
- 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
- /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
|
- 後は、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';
|
- 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 に対策が記述されていたので、これに従い設定した。
- /etc/mail/spamassassin/local.cf に下記を追加し、自動エクスポートメカニズムを無効にする。
- /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
|
- 設定が完了したら、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%
|
- send-quarantine-reminders.pl
ユーザがMaia Mailguardのメンテナンスを行わないと隔離エリアにメールが溜まるので、メンテナンスするようにメール通知する機能があるが、機能をユーザが停止していてもシステムとしてメンテナンスを促す場合に設定する。下記は1週間に1回、金曜日に通知する例である。
37 11 * * 5 vscan /var/amavisd/maia/scripts/send-quarantine-reminders.pl
>/dev/null 2>&1
|
- 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のみインストールしてください。
- まず、日本語にデコードするため Jcode を使用するので、インストールしてなければ下記でCPANからインストールする。
# perl -MCPAN -e shell
cpan> install
Jcode
:
cpan> quit
Lockfile removed. |
- 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 |
- /etc/maia.conf を編集し、表のタイトルを日本語化する。
/etc/maia.conf を編集(緑字:変更)
# Heading titles for each section of the digest report
$titles = { 'spam' => "スパム",
'virus' =>
"ウイルス感染メール",
'banned_file' => "危険な添付ファイル",
'bad_header' => "不正ヘッダを持つメール",
'ham'
=> "正規メール"
};
|
- stats-snapshot.pl (1.0.2ベース)
このスクリプトは、メール管理の状態をグラフ表示するための各種統計値のテーブルのスナップショットを作製する場合に使用するもので、毎正時に実行させます。
0 * * * * vscan /var/amavisd/maia/scripts/stats-snapshot.pl >/dev/null 2>&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);
|
- このままで設定を変更してグラフを書くと凡例が文字化けしてしまうので、以下で対策をする。
まず、使用したいフォントをフォントを「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へ