2008年 8月 27日 水曜日
やっぱり Sun がスキ!
SJSMS - Milter プログラムを使ってみよう
Sun Java System Messaging Server 6.3 では、sendmail や、Postfix 等で Virus/Spam フィルタ 機能としてよく使われている Sendmail Content Management API をベースとした、Milter (Mail Filter の略) プログラムと連係動作する事が可能となっています。
・参考 Sun Java Communications Suite 5 リリースノート
という事で、今回はこの機能を試して見ましょう。
まずは、www.milter.org よりサンプルプログラムを取得します。
・リンク A Sample Filter
今回は、これをコンパイルして使うのですが、ひとつ注意点があります。
SJSMS では、Sendmail 8.13.X milter protocol のみのサポートなり、 上記サンプルプログラムで使用されている xxfi_negotiate() がサポート されていません。
・参考 About milter plugin
・参考 Sendmail - 8.14.0 - release notes
ですので、サンプルプログラムの以下の部分をコメントアウトしましょう。
・コメントアウトする箇所1
/* xxfi_negotiate is not supported by 8.13
sfsistat
xxfi_negotiate(ctx, f0, f1, f2, f3, pf0, pf1, pf2, pf3)
SMFICTX *ctx;
unsigned long f0;
unsigned long f1;
unsigned long f2;
unsigned long f3;
unsigned long *pf0;
unsigned long *pf1;
unsigned long *pf2;
unsigned long *pf3;
{
return SMFIS_ALL_OPTS;
}
*/
・コメントアウトする箇所2
struct smfiDesc smfilter =
{
(省略)
/* xxfi_negotiate is not supported by 8.13 */
// xxfi_negotiate /* Once, at the start of each SMTP connection */
};
上記がコメントアウト出来たら、milter.org を参考にコンパイルします。$ /usr/sfw/bin/gcc -I/usr/include -c sample.c sample.c:808: warning: excess elements in struct initializer sample.c:808: warning: (near initialization for `smfilter') sample.c:810: warning: excess elements in struct initializer sample.c:810: warning: (near initialization for `smfilter') $ ls sample.o sample.o $ $ /usr/sfw/bin/gcc -o samplefilter sample.o -L/usr/lib -lmilter -pthreads $ ls samplefilter samplefilter $上記で、Milter Server のプログラムが作成されましたので、この プログラムを実行させておきましょう。
# ./samplefilter -p inet:3333 -r test1@Japan.Sun.COM &
※ 上記の起動方法で受け取りアドレスが test1@Japan.Sun.COM となっている
メールをリジェクトする動作となります。
詳しくは、上記サンプルプログラムのサイトをご確認下さい。
次に以下のドキュメントを参考に SJSMS を上記の Milter Server に接続させる
設定を行います。・参考 Sun Java System Messaging Server 6.3 管理ガイド
1. /opt/SUNWmsgsr/config/option.dat に以下の記述を追加
!
! for milter
spamfilter1_library=/opt/SUNWmsgsr/lib/libmilter.so
spamfilter1_config_file=/opt/SUNWmsgsr/config/milter.opt
spamfilter1_string_action=data:,$M
2. /opt/SUNWmsgsr/config/milter.opt を作成し、以下を記述
HOST=localhost
PORT=3333
DEBUG=2
TIMEOUT=10
3. /opt/SUNWmsgsr/config/imta.cnf を編集し、Milter によるフィルタリング
を行いたいチャネルに "destinationspamfilter1optin milter" を追加
ims-ms defragment subdirs 20 notices 1 7 14 21 28 backoff "pt5m" "pt10m" "pt30m" "pt1h"
"pt2h" "pt4h" maxjobs 2 pool IMS_POOL fileinto $U+$S@$D slave_debug master_debug
destinationspamfilter1optin milter
4. SJSMS の設定をコンパイル・再起動します
# imsimta cnbuild
# stop-msg smtp
Connecting to watcher ...
Stopping job_controller server 26592 .... done
Stopping dispatcher server 26585 ... done
# start-msg smtp
Connecting to watcher ...
Starting dispatcher server .... 6272
Starting job_controller server .... 6278
#
それでは、実際に動作確認をして見ましょう。# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 sw-82 -- Server ESMTP (Sun Java(tm) System Messaging Server 6.3-5.02 (built Oct 12 2007; 32bit)) ehlo (省略) 250 SIZE 0 mail from: test1@japan.sun.com 250 2.5.0 Address Ok. rcpt to: test1@japan.sun.com 550 5.7.0 Milter rejected recipient [slot 1]: test1@japan.sun.co正しく、test1@Japan.Sun.COM 宛てのメールがリジェクトされました。
この様に、一部制限はありますが、Milter も SJSMS で利用可能となっておりますので、 使用したい Milter サーバがありましたら、是非試してみてください。
※ 念のため、libmilter を利用してユーザ様自ら開発された、Milter サーバや、 オープンソースの Milter サーバ自体を Sun にてサポートしているわけでは無い事をご注意ください。
Posted at 04:08午後 8 27, 2008 by Masayuki Imai in Sun | 投稿されたコメント[0]
投稿されたコメント: