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 にてサポートしているわけでは無い事をご注意ください。
投稿されたコメント:

コメント
コメントは無効になっています。
About

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日