金曜日 9 26, 2008

SJSMS - 最新の Messaging Server 7 をインストール

今年の 8 月にリリースされた Communications Suite 6 に含まれる Messaging Server 7.0 は、64bit 対応となり 42.9億通のメール貯留等が可能となるラージメールボックスがサポート されました。
さらに、Message future Release (RFC 4865) 等の新しい、RFC もサポートされメールの予約送信等も 可能となっております。
また、Communications Suite 6 よりインストールコマンドも新しくなっておりますが、 Directory Server、Access Manager、Application Server 等は、それぞれ別途インストールする 必要があります。
今回は Messaging Server の動作に最低限必要なコンポーネントをインストール・設定してみる事で、 新しくなったインストール手順をまとめてみました。

目次
  1. パッケージのダウンロード
  2. 事前確認
  3. インストール手順
    1. Application Server 9.1 のインストール
    2. Directory Server 6.3 のインストール
    3. Access Manager のインストール
    4. Messaging Server 7.0, DSsetup, Delegated Administrator のインストール
  4. 初期設定
    1. Messaging Server 向けに Directory Server を構成する
    2. Delegated Administrator の初期設定
    3. Messaging Server の初期設定
  5. ユーザの追加
  6. 動作確認
  7. 参考資料
パッケージのダウンロード

Messaging Server 7.0 は、Communications Suite 6 に含まれておりますので、 Sun Download Center より Communications Suite 6 をダウンロードします。

          尚、インストールは面倒だけど、今すぐ試してみたいという方の為に、VMware のイメージも配布されています。
          英語環境のイメージとなってしまいますが、インストールを飛ばしてすぐに Communications Suite 6 をお試しいただけます。

          VMware イメージの説明

Messaging Server の動作に最低限必要なコンポーネントは以下になります。

  • Java Enterprise System
    • Directory Server
  • Communicatoins Suite
    • Messaging Server 7.0 (32bit or 64bit)
    • DSsetup

また、Delegated Administrator というドメイン・ユーザ・グループ管理用の Web 管理ツールを使用するためには、下記のコンポーネントが必要になります。

  • Java Enterprise System
    • Access Manager
      • Web コンテナ (Web Server or Application Server)
  • Communicatoins Suite
    • Delegated Administrator
      • Web コンテナ (Web Server or Application Server)

今回は、後ほど Sun Convergence(新しい WebMail アプリケーション) をインストールする事を考えて、Convergence が唯一サポートしている Application Server 9.1 を Web コンテナに使用しましょう。
したがって、先ほどのサイトより下記をダウンロードしておいてください。

  • SunJava_CommsInstaller_Suite6_solaris-sparc.zip
  • sjsas_ee-9_1_01-solaris-sparc-ml.bin
  • DSEE.6.3.Solaris-Sparc-full.tar.gz
  • java_es-5u1-ga-solaris-sparc.zip

事前確認
  1. 正しく DNS クライアントとして設定されている事を確認してください。
  2. /etc/hosts に FQDN を記載します。また、FQDNが、ホスト名より前に来るようにします。
 # cat /etc/hosts 
 #Internet host table
 127.0.0.1       localhost
 10.14.11.89     sw-89.japan.sun.com     sw-89   loghost
インストール手順
  1. Application Server 9.1 のインストール
 sw-89# pwd
 sw-89# ls
 sw-89# chmod +x sjsas_ee-9_1_01-solaris-sparc-ml.bin
 sw-89# ./sjsas_ee-9_1_01-solaris-sparc-ml.bin -console
          リンク : 詳細ログ

          \* Application Server の起動
 sw-89# /opt/SUNWappserver/bin/asadmin start-domain domain1
          \* Application Server の管理画面の URL
          例) https://sw-89.japan.sun.com:4848/
  1. Directory Server 6.3 のインストール
 sw-89# pwd
 /var/tmp/sjsms/DSEE
 sw-89# ls
 DSEE.6.3.Solaris-Sparc-full.tar.gz
 sw-89# gzcat DSEE.6.3.Solaris-Sparc-full.tar.gz| tar xf -
 sw-89# ls
 DSEE.6.3.Solaris-Sparc-full.tar.gz
 DSEE_Directory_Editor
 DSEE_Identity_Synchronization_for_Windows
 DSEE_ZIP_Distribution
 LICENSE.txt
 Legal
 README.txt
 sw-89# cd DSEE_ZIP_Distribution
 sw-89# ls
 dsee_data    dsee_deploy  idsktune
 sw-89# ./dsee_deploy install -i /opt/SUNWdsee
          リンク : 詳細ログ

          \* Directory Server Instance の作成
 sw-89# mkdir /var/opt/SUNWdsee
 sw-89# cd /opt/SUNWdsee/ds6/bin
 sw-89# ./dsadm create -p 389 -P 636 /var/opt/SUNWdsee/dsins1
 Directory Manager パスワード を選択:
 Directory Manager パスワード を確認:
 インスタンスを起動するには「dsadm start '/var/opt/SUNWdsee/dsins1'」を使用します
          \* Directory Insrance の起動
 sw-89# ./dsadm start /var/opt/SUNWdsee/dsins1
 Directory Server インタンス '/var/opt/SUNWdsee/dsins1' が起動されました: pid=13917
 sw-89# ./dsconf create-suffix -h sw-89 -p 389 o=isp
 サーバーから提示された証明書「CN=sw-89, CN=636, CN=Directory Server, O=Sun Microsystems」は信頼できません。
 受け入れは「Y」、1 回だけ受け入れは「y」、拒否は「n」、詳細を表示は「d」を入力: Y
 「cn=Directory Manager」のパスワードを入力:
 sw-89#
  1. Access Manager のインストール
 sw-89# pwd
 /var/tmp/sjsms/JES5u1
 sw-89# ls
 java_es-5u1-ga-solaris-sparc.zip
 sw-89# unzip -q java_es-5u1-ga-solaris-sparc.zip
 sw-89# ls
 Copyright                         Solaris_sparc

 License                           java_es-5u1-ga-solaris-sparc.zip
 README
 sw-89# cd Solaris_sparc
 sw-89# ls
 Product       installer     release_info
 sw-89# ./installer -nodisplay
          リンク : 詳細ログ

          \* Access Manager の管理画面の URL
          例) http://sw-89.japan.sun.com/amconsole
  1. Messaging Server 7.0, DSsetup, Delegated Administrator のインストール
          \* mailsrv ユーザの作成
 sw-89# grep mail /etc/group
 mail::6:root
 sw-89# useradd -u 7633 -g mail -d /export/home/mailsrv -m mailsrv
 64 ブロック
 sw-89#
          \* sendmail の停止
 sw-89# svcadm disable sendmail
 sw-89# 
          \* Communications Suite パッケージ(MS7,DSsetup, DA) のインストール
 sw-89# pwd
 /var/tmp/sjsms/Comms6
 sw-89# ls
 SunJava_CommsInstaller_Suite6_solaris-sparc.zip
 sw-89# unzip -q SunJava_CommsInstaller_Suite6_solaris-sparc.zip
 sw-89# ls
 Legal_Folder
 README
 SunJava_CommsInstaller_Suite6_solaris-sparc.zip
 SunOS_sparc
 commpkg
 sw-89# ./commpkg install
          リンク : 詳細ログ
初期設定
  1. Messaging Server 向けに Directory Server を構成する
          \* スキーマの選択
          Sun Java System Messaging Server では、ドメイン・ユーザのための LDAP
          スキーマとして、Schema 1, 1.5, 2 が用意されています。
          Schema1 は、Messaging Server 5.2 までに使われていたスキーマ
          Schema2 は、Messaging Server 6.0 から使われているスキーマ
            Access Manager 等のコンポーネントと組み合わせる場合 2 が必須
          Schema 1.5 は、1 から 2 への移行時のための互換スキーマ
          となりますが、今回は、Schema2 を使用しましょう。
 sw-89# pwd
 /opt/sun/comms/dssetup/sbin
 sw-89# ls
 comm_dssetup.pl  schema
 sw-89# /usr/bin/perl comm_dssetup.pl
          リンク : 詳細ログ
  1. Delegated Administrator の初期設定
 sw-89# pwd
 /opt/sun/comms/da/sbin
 sw-89# ls
 config-commda       config-servicetags  getEncode
 sw-89#
          リンク : 詳細ログ

          \* Applicatoin Server の再起動
 sw-89# /opt/SUNWappserver/bin/asadmin stop-domain domain1
 ドメイン domain1 が停止しました。
 sw-89# /opt/SUNWappserver/bin/asadmin start-domain --user admin domain1
 ドメイン domain1 を起動しています。お待ちください。
 ログは /opt/SUNWappserver/domains/domain1/logs/server.log にリダイレクトされます。
 管理パスワードを入力してください>
 マスターパスワードを入力してください>
 出力を /opt/SUNWappserver/domains/domain1/logs/server.log にリダイレクトしています
 ドメイン domain1 が起動しました。
 ドメイン [domain1] はその設定で [Sun Java System Application Server 9.1_01 (build local)] を実行しています。ログは [/opt/SUNWappserver/domains] にあります。
 管理コンソールは [https://localhost:4848] で使用できます。
 "asadmin" コマンドにも同じポート [4848] を使用します。
 ユーザーの Web アプリケーションは次の URL で使用できます:
 [http://localhost:80 https://localhost:8181 ]。
 次の web-contexts を使用できます:
 [/web1  /__wstx-services amserver ampassword amcommon amconsole /da /commcli ]。
 標準の JMX クライアント (JConsole など) はドメイン管理のために JMXServiceURL:
 [service:jmx:rmi:///jndi/rmi://sw-89.japan.sun.com:8686/jmxrmi] に接続できます。
 ドメインは少なくとも次のポートで接続を待機しています:
 [80 8181 4848 3700 3820 3920 8686 ]。
 ドメインはアプリケーションサーバークラスタおよびその他のスタンドアロンインスタンスをサポートします。
 
 sw-89#
          \* デフォルトドメインで mail サービスを有効にする
 sw-89# /opt/sun/comms/da/bin/commadmin domain modify -D admin \\
 -w adminpass -X sw-89.japan.sun.com -n japan.sun.com -p 80 \\
 -d japan.sun.com -S mail -H sw-89.japan.sun.com
 OK
 

 sw-89#
          \* Delegated Administrator の URL
          例) http://sw-89.japan.sun.com/da/DA/Login
  1. Messaging Server の初期設定
 sw-89# pwd
 /opt/sun/comms/messaging64/sbin
 sw-89# ls
 MoveUser              iminitquota           msgcert
 UpgradeMsg5toMsg7.pl  immonitor-access      patch-config
 config-mfwk           imquotacheck          readership
 config-servicetags    ims_db_upgrade        reconstruct
 config-vcsha          imsbackup             refresh
 configure             imsconnutil           rehostuser
 configutil            imscripter            relinker
 counterutil           imsexport             setconf
 deliver               imsimport             showconfig
 getconf               imsimta               showlog
 grep                  imsrestore            spfquery
 ha_ip_config          install-newconfig     start-msg
 hashdir               less                  stop-msg
 help                  ls                    uninstall-newconfig
 imarchive             mboxutil              useconfig
 imcheck               migrate-config        writeconfig
 imdbverify            mkbackupdir
 imexpire              msgadm
 sw-89# ./configure -nodisplay
          リンク : 詳細ログ

          \* webmail ポートの変更
 sw-89# /opt/sun/comms/messaging64/bin/configutil -o service.http.port -v 2080
 OK SET
 sw-89#
          \* Messaging Server の起動
 sw-89# /opt/sun/comms/messaging64/bin/stop-msg
 Connecting to watcher ...
 Warning: Cannot connect to the watcher process
 job_controller server is not running
 dispatcher server is not running
 sched server is not running
 http server is not running
 pop server is not running
 imap server is not running
 purge server is not running
 store server is not running
 sw-89# /opt/sun/comms/messaging64/bin/start-msg
 Connecting to watcher ...
 Launching watcher ... 28506
 Starting store server .... 28507
 Checking store server status ...... ready
 Starting purge server .... 28508
 Starting imap server .... 28509
 Starting pop server .... 28510
 Starting http server ...... 28511
 Starting sched server ... 28512
 Starting dispatcher server .... 28514
 Starting job_controller server .... 28520
 sw-89#
ユーザの追加
 sw-89# /opt/sun/comms/da/bin/commadmin user create -D admin -F One \\
 -l test1 -L Test -n japan.sun.com -p 80 -w adminpass -W test1 \\
 -X sw-89.japan.sun.com -S mail -E test1@japan.sun.com \\
 -H sw-89.japan.sun.com
 OK
 
 sw-89#

 sw-89# /opt/sun/comms/da/bin/commadmin user create -D admin -F Two \\
 -l test2 -L Test -n japan.sun.com -p 80 -w adminpass -W test2 \\
 -X sw-89.japan.sun.com -S mail -E test2@japan.sun.com \\
 -H sw-89.japan.sun.com
 OK
 
 sw-89#
動作確認
 \* 送信テスト 1 (from test1 to test2)

 sw-89# telnet localhost 25
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '\^]'.
 220 sw-89.japan.sun.com -- Server ESMTP (Sun Java(tm) System Messaging Server 7.0-0.04 64bit (built Jun 20 2008))
 ehlo localhost
 250-sw-89.japan.sun.com
 250-8BITMIME
 250-PIPELINING
 250-CHUNKING
 250-DSN
 250-ENHANCEDSTATUSCODES
 250-EXPN
 250-HELP
 250-XADR
 250-XSTA
 250-XCIR
 250-XGEN
 250-XLOOP E273F53846A54D1B07DF41E33EBB8C23
 250-ETRN
 250-NO-SOLICITING
 250 SIZE 0
 mail from: test1@japan.sun.com
 250 2.5.0 Address Ok.
 rcpt to: test2@japan.sun.com
 250 2.1.5 test2@japan.sun.com OK.
 data
 354 Enter mail, end with a single ".".
 From: test1@japan.sun.com
 To: test2@japan.sun.com
 Subject: test from test1 to test2
 
 This is a test message.
 .
 250 2.5.0 Ok, envelope id 0K7P00M0395F0700@sw-89.japan.sun.com
 quit
 221 2.3.0 Bye received. Goodbye.
 Connection to localhost closed by foreign host.

 \* 送信テスト 2 (from test2 to test1)

 sw-89# telnet localhost 25
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '\^]'.
 220 sw-89.japan.sun.com -- Server ESMTP (Sun Java(tm) System Messaging Server 7.0-0.04 64bit (built Jun 20 2008))
 ehlo localhost
 250-sw-89.japan.sun.com
 250-8BITMIME
 250-PIPELINING
 250-CHUNKING
 250-DSN
 250-ENHANCEDSTATUSCODES
 250-EXPN
 250-HELP
 250-XADR
 250-XSTA
 250-XCIR
 250-XGEN
 250-XLOOP E273F53846A54D1B07DF41E33EBB8C23
 250-ETRN
 250-NO-SOLICITING
 250 SIZE 0
 mail from: test2@japan.sun.com
 250 2.5.0 Address Ok.
 tcpt to: test1@japan.sun.com
 500 5.5.1 Unknown command "tcpt to: test1@japan.sun.com" specified
 rcpt to: test1@japan.sun.com
 250 2.1.5 test1@japan.sun.com OK.
 data
 354 Enter mail, end with a single ".".
 From: test2@japan.sun.com
 To: test1@japan.sun.com
 Subject: test from test2 to test1
 
 This is a test message.
 .
 250 2.5.0 Ok, envelope id 0K7P00M069760700@sw-89.japan.sun.com
 quit
 221 2.3.0 Bye received. Goodbye.
 Connection to localhost closed by foreign host.
 sw-89#

 \* 受信テスト 1 (by test1)

 sw-89# telnet localhost 110
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '\^]'.
 +OK sw-89.japan.sun.com POP3 service (Sun Java(tm) System Messaging Server 7.0-0.04 64bit (built Jun 20 2008))
 user test1
 +OK Name is a valid mailbox
 pass test1
 +OK Maildrop ready
 list
 +OK scan listing follows
 1 617
 .
 retr 1
 +OK 617 octets
 Return-path: 
 Received: from localhost ([127.0.0.1])
  by sw-89.japan.sun.com (Sun Java(tm) System Messaging Server 7.0-0.04 64bit
  (built Jun 20 2008)) with ESMTP id <0K7P00M0596V0700@sw-89.japan.sun.com> for
  test1@japan.sun.com; Wed, 24 Sep 2008 21:26:48 +0900 (JST)
 Original-recipient: rfc822;test1@japan.sun.com
 Date-warning: Date header was inserted by sw-89.japan.sun.com
 Date: Wed, 24 Sep 2008 21:26:43 +0900 (JST)
 Message-id: <0K7P00M069760700@sw-89.japan.sun.com>
 From: test2@japan.sun.com
 To: test1@japan.sun.com
 Subject: test from test2 to test1
 
 This is a test message.
 .
 quit
 +OK
 Connection to localhost closed by foreign host.
 sw-89#

 \* 受信テスト 2 (by test2)

 sw-89# telnet localhost 110
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '\^]'.
 +OK sw-89.japan.sun.com POP3 service (Sun Java(tm) System Messaging Server 7.0-0.04 64bit (built Jun 20 2008))
 user test2
 +OK Name is a valid mailbox
 pass test2
 +OK Maildrop ready
 list
 +OK scan listing follows
 1 617
 .
 retr 1
 +OK 617 octets
 Return-path: 
 Received: from localhost ([127.0.0.1])
  by sw-89.japan.sun.com (Sun Java(tm) System Messaging Server 7.0-0.04 64bit
  (built Jun 20 2008)) with ESMTP id <0K7P00M029530700@sw-89.japan.sun.com> for
  test2@japan.sun.com; Wed, 24 Sep 2008 21:25:36 +0900 (JST)

 Original-recipient: rfc822;test2@japan.sun.com
 Date-warning: Date header was inserted by sw-89.japan.sun.com
 Date: Wed, 24 Sep 2008 21:25:27 +0900 (JST)
 Message-id: <0K7P00M0395F0700@sw-89.japan.sun.com>
 From: test1@japan.sun.com
 To: test2@japan.sun.com
 Subject: test from test1 to test2
 
 This is a test message.
 .
 quit
 +OK
 Connection to localhost closed by foreign host.
 sw-89#
以上で、Messaging Server 7.0 のインストールおよび初期設定が完了しました。

参考資料

次回は、新しくなった WebMail、Sun Convergence をインストールしてみましょう。

水曜日 8 27, 2008

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 にてサポートしているわけでは無い事をご注意ください。

金曜日 7 25, 2008

SJSMS - SpamAssassin と連携させてみよう

今回は、Sun Java System Messaging Server (以下 SJSMS) にて Mailbox に 保存されるメールを保存前にスパム判定を行い、必要に応じてスパムフォルダ に移動させる設定を行います。

SpamAssassin は、フリーのスパム判定プログラムとして有名かと思いますが、 SJSMS ではこの SpamAssassin と連携するための機能を持っています。

それでは早速 SpamAssassin の用意ですが、今回は、オープンソースソフトウェアの Solaris 向けバイナリパッケージを配布している Blastwave を利用しましょう。

まず、Blastwave からパッケージを取得・インストールを行う pkg-get を インストールします。
 # pkgadd -d http://www.blastwave.org/pkg_get.pkg
これで、Blastwave を利用する準備が出来ました。
次に、Blastwave から、SpamAssassin をダウンロード・インストールします。
 # /opt/csw/bin/pkg-get -i spamassassin
このコマンドひとつで、必要となるライブラリなどをすべてダウンロード・ インストールを行ってくれます。

spamassassin をインストールすると以下のパッケージがインストールされました。
 # pkginfo | grep CSW
 application CSWbdb44                         berkeleydb44 - embedded database libraries and utilities
 system      CSWcommon                        common - common files and dirs for CSW packages
 application CSWexpat                         expat -  XML Parser Toolkit
 system      CSWgdbm                          gdbm - GNU dbm
 application CSWossl                          openssl - Openssl meta package
 application CSWossldevel                     openssl_devel - Openssl development support
 application CSWosslrt                        openssl_rt - Openssl runtime libraries
 application CSWosslutils                     openssl_utils - Openssl binaries and related tools
 application CSWperl                          perl - A high-level, general-purpose programming language.
 system      CSWpkgget                        pkg_get - CSW version of automated package download tool
 system      CSWpmarchivetar                  pm_archivetar - Module for manipulation of tar archives
 system      CSWpmauthensasl                  pm_authensasl - SASL Authentication framework
 application CSWpmcompressrawzlib             pm_compressrawzlib - Low-Level Interface to zlib compression library
 application CSWpmcompresszlib                pm_compresszlib - Interface to zlib compression library
 system      CSWpmconvertasn1                 pm_convertasn1 - ASN.1 Encode/Decode library
 application CSWpmcryptosslrandom             pm_osslrandom - Perl Crypt::OpenSSL::Random module
 application CSWpmcryptosslrsa                pm_osslrsa - Perl Crypt::OpenSSL::RSA module
 system      CSWpmdbi                         pm_dbi - Database independent interface for Perl
 application CSWpmdigesthmac                  pm_digesthmac - keyed-hashing for message authentication
 system      CSWpmdigestsha                   pm_digestsha - Perl extension for SHA-1/224/256/384/512
 application CSWpmdigestsha1                  pm_digestsha1 - interface to the SHA-1 Algorithm
 system      CSWpmerror                       pm_error - Error/exception handling
 system      CSWpmfontafm                     pm_fontafm - Interface to Adobe Font Metrics files
 system      CSWpmgeocountries                pm_geocountries - 2-letter, 3-letter, and numerical codes for countries
 system      CSWpmhtmlfmt                     pm_htmlfmt - Format HTML as plaintext, PostScript or RTF
 application CSWpmhtmlparser                  pm_htmlparser - HTML parser class
 application CSWpmhtmltagset                  pm_htmltagset - data tables useful in parsing HTML
 system      CSWpmhtmltree                    pm_htmltree - Parser that builds a HTML syntax tree
 application CSWpmiocompressbase              pm_iocompressbase - Base Class for IO::Compress perl modules
 application CSWpmiocompresszlib              pm_iocompresszlib - Interface to allow reading and writing of gzip and zip files/buffers
 system      CSWpmiosocketinet6               pm_iosocketinet6 - Object interface for AF_INET|AF_INET6 domain sockets
 application CSWpmiosocketssl                 pm_iosocketssl - Perl extension for using OpenSSL
 system      CSWpmiozlib                      pm_iozlib - IO:: style interface to the Compress::Zlib package
 system      CSWpmipcountry                   pm_ipcountry - Fast lookup of country codes from IP address
 system      CSWpmldap                        pm_ldap - A client interface to LDAP servers
 system      CSWpmlibwww                      pm_libwww - Collection of perlmodules that provide an api to the World Wide Web
 application CSWpmmaildkim                    pm_maildkim - Signs/verifies Internet mail with DKIM/DomainKey signatures
 system      CSWpmmailspf                     pm_mailspf - Perl extension for Sender Policy Framework
 application CSWpmmailtools                   pm_mailtools - various mail manipulation modules
 system      CSWpmmimebase64                  pm_mimebase64 - Encoding and decoding of base64 strings
 system      CSWpmnetaddrip                   pm_netaddrip - Perl extension to manage IPv4 and IPv6 addresses and subnets
 application CSWpmnetdaemon                   pm_netdaemon - Perl extension for portable daemons
 application CSWpmnetdns                      pm_netdns - Perl interface to the DNS resolver
 application CSWpmnetip                       pm_netip - Perl extension for manipulating IPv4/IPv6 addresses
 application CSWpmnetssleay                   pm_netssleay - extension for using OpenSSL
 application CSWpmplrpc                       pm_plrpc - Perl extension for writing perl RPC servers and clients
 system      CSWpmsocket6                     pm_socket6 - IPv6 related part of the C socket.h defines and structure manipulators
 application CSWpmuri                         pm_uri - Uniform Resource Identifiers (absolute and relative)
 application CSWpmversion                     pm_version - Perl extension for Version Objects
 system      CSWpmxmlnssupp                   pm_xmlnssupp - Simple generic namespace support class
 application CSWpmxmlparser                   pm_xmlparser - A perl module for parsing XML documents
 system      CSWpmxmlsax                      pm_xmlsax - Simple API for XML
 application CSWspamassassin                  spamassassin - A mail filter which attempts to identify spam using text analysis
 application CSWzlib                          zlib - Zlib Data Compression Library
SpamAssassin インストール後の設定については、/opt/csw/doc/spamassassin/README.CSW に記載がありますので、そちらをご覧下さい。

SJSMS では、SpamAssassin の spamd を利用しますので、上記ファイルを確認後、 rc script などで spamd を起動させます。

spamd が起動したら、いよいよ SJSMS の設定を行いましょう。

まず、SJSMS が SpamAssassin を使用するために option.dat に以下の記述を 行います。
\* /opt/SUNWmsgsr/config/option.dat

 ! for Spamassassin
 spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
 spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
 spamfilter1_optional=1
 spamfilter1_string_action=data:,require ["addheader"];addheader "X-SJSMS-Spamscore: $U";
spamfilter1_config_file にて、spamassassin に対する SJSMS の設定ファイルを 指定します。
spamfilter1_library にて、SpamAssassin を利用するための SJSMS ライブラリを 指定します。
spamfilter1_optional=1 とする事で、spamd に正しく接続できなかった際に、 スパム判定を省略して、メール配送処理を継続する設定になります。
spamfilter1_string_action にて、spamd から返ってきた結果の処理を指定します。
この例では、X-SJSMS-Spamscore というメールヘッダを追加し、SpamAssassin の判定 結果のスコアを入れています。

次に spamfilter1_config_file に指定したファイルに以下の設定を記述します。
\* /opt/SUNWmsgsr/config/spamassassin.opt

 host=127.0.0.1
 port=785
 mode=2
 debug=1
host に spamd が起動しているホストの IP Address を指定します。
同様に、port に spamd が待機している port を指定します。
mode=2 は、SpamAssassin によって確認したメールがスパムであると判断 されたかどうかに係らず、判定結果のスコアを返す設定になります。
debug=1 は、debug 出力有りの設定ですので、必要なければいりません。

ここまでで、SJSMS から SpamAssassin を利用する準備は整いましたので、 次にどのメールに対して SpamAssassin の判定を通すかの設定を行います。

今回は、channel に対して設定してみましょう。

この SJSMS ホストの Mailbox に保存されるメールは、ims_ms チャネルを 通って、Mailbox に保存されますので、ims_ms チャネルに入るメールを SpamAssassin によって確認させます。

imta.cnf の ims_ms チャネルにキーワード "destinationspamfilter1optin spam" を追加します。
\* /opt/SUNWmsgsr/config/imta.cnf

 !
 ! ims-ms
 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 
  destinationspamfilter1optin spam
 ims-ms-daemon
つぎに、インターネット上に出て行くメールに対しても SpamAssassin を通したい場合は、同様に tcp_local チャネルに対してもチャネルキーワード を追加してください。
\* /opt/SUNWmsgsr/config/imta.cnf

 !
 ! tcp_local
 tcp_local smtp nomx daemon smarthost.nonedomain.com nochunkingclient
  nochunkingserver single_sys remotehost inner switchchannel
  identnonenumeric subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver
  maysaslserver saslswitchchannel tcp_auth missingrecipientpolicy 0
  loopchec destinationspamfilter1optin spam
最後に Mailbox に保存されるメールの SpamAssassin スコアに応じて、 スパムフォルダに移動させる設定を行いましょう。

これは、チャネルレベルに設定可能な SIEVE フィルタにて行う事が出来ます。
先ほどの imta.cnf ファイルの ims_ms チャネルにキーワード "destinationfilter file:///opt/SUNWmsgsr/config/ims-ms.filter" を追加します。
\* /opt/SUNWmsgsr/config/imta.cnf

 !
 ! ims-ms
 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 
  destinationspamfilter1optin spam destinationfilter file:///opt/SUNWmsgsr/config/ims-ms.filter
 ims-ms-daemon
次に、ファイル "/opt/SUNWmsgsr/config/ims-ms.filter" に SIEVE フィルタ を定義します。
\* /opt/SUNWmsgsr/config/ims-ms.filter

 require ["spamtest","relational","comparator-i;ascii-numeric","fileinto"];
 if spamtest :value "ge" :comparator "i;ascii-numeric" "5" {fileinto "spam";}
 else {keep;}
上記の SIEVE フィルタでは、スパム判定のスコアが "5" 以上であった場合、 IMAP 上の "spam" フォルダへ移動、"5" 以下であった場合、通常通り配送 (INBOX へ保存)を行うフィルタになります。

同様にインターネットへ出て行くメールについてもスコアに応じたフィルタを 行う場合は、チャネルキーワードと、SIEVE フィルタを作成してください。
\* /opt/SUNWmsgsr/config/imta.cnf

 !
 ! tcp_local
 tcp_local smtp nomx daemon smarthost.nonedomain.com nochunkingclient
  nochunkingserver single_sys remotehost inner switchchannel
  identnonenumeric subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver
  maysaslserver saslswitchchannel tcp_auth missingrecipientpolicy 0
  loopchec destinationspamfilter1optin spam
  destinationfilter file:///opt/SUNWmsgsr/config/tcp_local.filter

\* /opt/SUNWmsgsr/config/tcp_local.filter

 require ["spamtest","relational","comparator-i;ascii-numeric","reject"];
 if spamtest :value "ge" :comparator "i;ascii-numeric" "5" {reject "This E-mail was judged spam. ";}
 else {keep;}
上記の SIEVE フィルタでは、スパム判定のスコアが "5" 以上であった場合、 メール配送を拒否、"5" 以下であった場合、通常通り配送を行うフィルタに なります。

ここまでの設定がすべて完了したら、MTA 設定の再構成・再起動を行います。
 # imsimta cnbuild
 # stop-msg ; start-msg
SpamAssassin 自体はオープンソースソフトウェアになりますので、比較的 容易に試すことが出来ると思います。是非お試し下さい。

ご参考 : Sun Java System Messaging Server 6.3 管理ガイド
※ SpamAssassin 自体は Sun からサポートされるわけでは無い事をご注意ください。

月曜日 5 26, 2008

SJSMS - メールボックスの制限容量通知メールを日本語にしよう!

Sun Java System Messaging Server (以下 SJSMS) では、 ユーザのメールボックスに制限容量を設ける事が出来ます。
制限容量を設定している場合、メールボックスの容量が 制限値に近づいた際に通知メールを出すように設定したい ですよね。
SJSMS では、ドキュメントにも記載されている通り、以下の 手順にて通知メールを設定できます。
  1. 制限容量通知の有効化
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotanotification -v yes
    
  2. 通知メッセージの設定
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotaexceededmsg -v 'message'
    
  3. 制限容量の閾値の指定
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotawarn -v 90 # パーセント
    

実は、この手順は英語メッセージの設定手順となり、日本語 メッセージを設定する為には、2. のパラメータとして store.quotaexceededmsg;lang-ja を使用する必要があります。
したがって、日本語通知メッセージを設定する為には、以下の 手順を行う必要があります。
    1. 制限容量通知の有効化
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotanotification -v yes
    
    2. 通知メッセージの設定
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotaexceededmsg;lang-ja -v 'message'
    
    3. 制限容量の閾値の指定
    # /opt/SUNWmsgsr/sbin/configutil -o store.quotawarn -v 90 # パーセント
    
では実際に日本語通知メッセージを設定してみましょう。

# /opt/SUNWmsgsr/sbin/configutil -p store.quota\\\*
store.quotaenforcement = on
store.quotaexceededmsginterval = 7
store.quotagraceperiod = 120
store.quotanotification = off
store.quotawarn = 90

# /opt/SUNWmsgsr/sbin/configutil -o store.quotanotification -v on
OK SET
# /opt/SUNWmsgsr/sbin/configutil -o store.quotaexceededmsg\\;lang-ja -v \\
"From: メール管理者 <Postmaster@domain.co.jp>\\$Subject: \\
制限容量通知\\$\\$[ID]さん\\$\\$あなたのメールボックスのサイズは\\
割り当てられた容量の [PERCENT] パーセントに達しています。\\
\\$\\$Disk 使用量: [DISKUSAGE]\\$メッセージ数: [NUMMSG]\\$容量\\
制限値:[QUOTA]\\$メッセージ数制限値: [MSGQUOTA]\\$\\$---\\$メール\\
サーバ管理者"
OK SET
# /opt/SUNWmsgsr/sbin/configutil -o store.quotawarn -v 1
OK SET
# iminitquota -a
admin: ok
hoge: updated
test1: updated
ここでお気づきかと思いますが、 'message' の部分は基本的に RFC822 のメール形式に従っていますので、メールヘッダの部分 も記載可能です。
From を指定しないと、デフォルトで以下の From が挿入されます。

 From: Mail Administrator <postmaster@domain.co.jp>
From を指定して、差出人に日本語を含める事で、一般 ユーザの驚き(そして、「見なかった事」)を軽減してあげる事が できると思います。

今回の例の様に、日本語メッセージを設定することで、以下の様に SJSMS 内部では UTF-8 に変換された日本語メッセージが格納されます。 そして、実際にメールが送付される際に、ISO-2022-JP のメールに変換されて送付されます。

# auto_ef /opt/SUNWmsgsr/config/msg.conf
UTF-8
# iconv -f UTF-8 -t EUC-JP /opt/SUNWmsgsr/config/msg.conf | grep quotaexceededmsg\\;lang-ja

store.quotaexceededmsg;lang-ja = "From: メール管理者 <Postmaster@domain.co.jp>$Subject: 制限容量通知$$[ID]さん$$あなたのメールボックスのサイズは割り当てられた容量の [PERCENT] パーセントに達しています。$$Disk 使用量: [DISKUSAGE]$メッセージ数: [NUMMSG]$容量制限値:[QUOTA]$メッセージ数制限値: [MSGQUOTA]$$---$メールサーバ管理者"
ですので、UTF-8 にしか存在しない文字を使ってしまうと、ISO-2022-JP に変換されず、UTF-8 のまま送信されてしまいますので、ご注意ください。


  • 補足
From ヘッダの変換も SJSMS に任せた場合、一部メールクライアントで 正常に日本語を表示できない場合もあるようです。
その場合は、以下のように直接エンコードされた From ヘッダを与える 事で、日本語表示をしてくれます。

# cat /var/tmp/From-encode.pl
#!/usr/bin/perl

use MIME::Base64;

$headertoencode = <STDIN>;
print encode_base64($headertoencode);
# printf "メール管理者" | euctojis | perl /var/tmp/From-encode.pl
GyRCJWEhPCVrNElNfTxUGyhK
# /opt/SUNWmsgsr/sbin/configutil -o store.quotaexceededmsg\\;lang-ja -v \\
"From: =?ISO-2022-JP?B?GyRCJWEhPCVrNElNfTxUGyhK?= <Postmaster@domain.co.jp>\\
\\$Subject: 制限容量通知\\$\\$[ID]さん\\$\\$あなたのメールボックスのサイズは\\
割り当てられた容量の [PERCENT] パーセントに達しています。\\
\\$\\$Disk 使用量: [DISKUSAGE]\\$メッセージ数: [NUMMSG]\\$容量\\
制限値:[QUOTA]\\$メッセージ数制限値: [MSGQUOTA]\\$\\$---\\$メール\\
サーバ管理者"

RFC: 2047 によると encoded-word は以下のように書きます。

"=?" charset "?" encoding "?" encoded-text "?="
したがって、上記の例では、"=?ISO-2022-JP?B?" と "?=" の間に、JIS コードの 日本語を、BASE64 エンコードしたものを入れました。
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
   
       
今日