水曜日 4 22, 2009

SJSMS - Solaris 10 の SMF に登録しよう

今回は久しぶり(なんと半年振り!)に Messaging Server ネタです。
以前のブログ記事(その 1,その 2)でインストールしてみた Messaging Server 関連コンポーネントを Solaris 10 の SMF に登録して、自動起動の設定をしてみましょう。
前回インストールした関連コンポーネントは以下の通りです。

  • Directory Server 6.3
  • Messaging Server 7.0
  • Application Server 9.1
    • Access Manager 7.1
    • Delegated Administrator 6.4
    • Sun Convergence 1.0

上記コンポーネントの中で、Access Manager, Delegated Administrator, Sun Convergence は、Application Server 9.1 上に配備されておりますので、SMF に登録して自動起動の設定をする必要があるコンポーネントは以下 の 3 つになります。

  • Directory Server 6.3
  • Messaging Server 7.0
  • Application Server 9.1

では、順番に、SMF に登録していきましょう。

目次

  1. Directory Server 6.3 を SMF に登録
  2. Messaging Server 7.0 を SMF に登録
  3. Application Server 9.1 を SMF に登録
  4. 参考情報

Directory Server 6.3 を SMF に登録

実は、Directory Server 6.3 の提供方法は、パッケージ版と ZIP アーカイブ版の 2 種類があり、 インストール・設定に若干の差異があります。
パッケージ版の Directory Server では、dsadm コマンドから SMF にサービスを登録する方法が あるのですが、ZIP アーカイブ版では、dsadm コマンドから SMF にサービスを登録する事が出来ません。
  ※ パッケージ版のためのご参考
以前のブログ記事で紹介したインストール手順では、ZIP アーカイブ版の Directory Server を 使用しているので、dsadm enable-service コマンドが使えません。
そこで今回は、/opt/SUNWdsee/ds6/install 配下に用意されているテンプレートファイルを 使って、SMF に登録します。

 sw-89# pwd
 /opt/SUNWdsee/ds6/install
 sw-89# cp tmpl_smf.manifest ds6_for_ms7_smf.manifest
  ※ あらかじめ、template ファイルをコピーします。
 sw-89# vi ds6_for_ms7_smf.manifest
  ※ manifest ファイルを下記 diff に示される様に編集します。
  ※ 具体的には、"%%%DATE_CREATED%%%", "%%%INSTALL_PATH%%%"
  ※ "%{sunds/path}", "%%%TIMEOUT_SECONDS%%%" を適宜編集します。
 sw-89# diff ds6_for_ms7_smf.manifest tmpl_smf.manifest
 6c6
 <     Created on : 2009/04/16
 ---
 >     Created on : %%%DATE_CREATED%%%
 24,25c24,25
 <                  exec="/opt/SUNWdsee/ds6/bin/dsadm start --exec /var/opt/SUNWdsee/dsins1"
 <                  timeout_seconds="600">
 ---
 >                  exec="%%%INSTALL_PATH%%%/bin/dsadm start --exec %{sunds/path}"
 >                  timeout_seconds="%%%TIMEOUT_SECONDS%%%">
 35,36c35,36
 <                  exec="/opt/SUNWdsee/ds6/bin/dsadm stop --exec /var/opt/SUNWdsee/dsins1"
 <                  timeout_seconds="600">
 ---
 >                  exec="%%%INSTALL_PATH%%%/bin/dsadm stop --exec %{sunds/path}"
 >                  timeout_seconds="%%%TIMEOUT_SECONDS%%%">
 sw-89#
 
 sw-89# cat ds6_for_ms7_smf.manifest
 <?xml version='1.0'?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>

 <!--
     Document   : ds6-service.xml
     Created on : 2009/04/16
     Author     : Directory Server Enterprise Edition Team
     Description: The SMF Service Manifest file for Directory Server 6
 -->

 <service_bundle type="manifest"
                 name="SUNWldap-directory services">
   <service name="application/sun/ds" type="service" version="1">
     <dependency name="filesystems" grouping="require_all"
               restart_on="none" type="service">
       <service_fmri value="svc:/system/filesystem/local:default"/>
     </dependency>
     <dependency name="network" grouping="require_all"
              restart_on="none" type="service">
       <service_fmri value="svc:/network/initial:default"/>
     </dependency>
     <exec_method type="method"
                  name="start"
                  exec="/opt/SUNWdsee/ds6/bin/dsadm start --exec /var/opt/SUNWdsee/dsins1"
                  timeout_seconds="600">
       <method_context working_directory=":default">
         <method_credential user="root"
                            group=":default"
                            privileges=":default"/>
       </method_context>
       <stability value="Evolving"/>
     </exec_method>
     <exec_method type="method"
                  name="stop"
                  exec="/opt/SUNWdsee/ds6/bin/dsadm stop --exec /var/opt/SUNWdsee/dsins1"
                  timeout_seconds="600">
       <method_context working_directory=":default">
         <method_credential user="root"
                            group=":default"
                            privileges=":default"/>
       </method_context>
       <stability value="Evolving"/>
     </exec_method>
     <instance name="default" enabled="false"/>
     <stability value="Evolving"/>
     <template>
       <common_name>
         <loctext xml:lang="C"> Directory Server </loctext>
       </common_name>
       <documentation>
         <doc_link name="Directory Server Enterprise Edition 6 Administration Guide" uri="http://docs.sun.com/doc/819-0995/"/>
       </documentation>
     </template>
   </service>
 </service_bundle>
 sw-89#
 
 sw-89# svccfg import ./ds6_for_ms7_smf.manifest
  ※ 上記で作成した manifest ファイルを svccfg コマンドにて import します。
 
 sw-89# svcs ds
 STATE          STIME    FMRI
 disabled       14:52:43 svc:/application/sun/ds:default
  ※ svc:/application/sun/ds:default が追加されている事を確認します。
 
 sw-89# svcadm enable ds
  ※ svc:/application/sun/ds:default サービスをスタートします。
 
 sw-89# ps -ef | grep slapd
     root 13460  8891   0 14:54:59 ?           0:01 /opt/SUNWdsee/ds6/lib/64/ns-slapd -D /var/opt/SUNWdsee/dsins1 -i /var/opt/SUNWd
     root 13463  9868   0 14:55:01 pts/3       0:00 grep slapd
 sw-89# 
  ※ ns-slapd (Directory Server のプロセス) が起動している事が確認出来ます。
 
 sw-89# svcs ds
 STATE          STIME    FMRI
 online         14:55:02 svc:/application/sun/ds:default
 sw-89# 
  ※ svc:/application/sun/ds:default サービスも online になっている事が確認出来ます。
 
 sw-89# svcadm disable ds
  ※ svc:/application/sun/ds:default サービスを停止します。 
 
 sw-89# svcadm disable ds
 sw-89# svcs ds
 STATE          STIME    FMRI
 online\*        14:57:23 svc:/application/sun/ds:default
 sw-89# svcs ds
 STATE          STIME    FMRI
 disabled       14:57:27 svc:/application/sun/ds:default
 sw-89# 
  ※ svc:/application/sun/ds:default サービスが停止された事が確認出来ます。
 
 sw-89# svcadm enable ds
 sw-89# svcs ds
 STATE          STIME    FMRI
 offline\*       14:58:12 svc:/application/sun/ds:default
 sw-89# svcs ds
 STATE          STIME    FMRI
 online         14:58:19 svc:/application/sun/ds:default
 sw-89# 
  ※ 最後に svc:/application/sun/ds:default サービスを起動させておきます。

以上で、Directory Server の SMF の登録が完了しました。

Messaging Server 7.0 を SMF に登録

次に Messaging Server を SMF に登録しましょう。
Messaging Server の登録方法も Directory Server と同様テンプレートファイル を利用して SMF に登録します。

 sw-89# pwd
 /opt/sun/comms/messaging64/data/install
 sw-89# ls
 pab.ldif                   schema2ug_store.ldif       schema2usergroup.ldif.rej
 restofmessaging.xml        schema2usergroup.ldif      watcher.xml
 sw-89#

まずこの場所に messaging.xml ファイルが存在するか確認してください。
messaging.xml が存在する場合は下記の手順(messaging.xml の作成・msgexe の編集)を 省略してください。
  ※ 当初提供されていた restofmessaging.xml, watcher.xml を利用する方法では
  ※ ただしく動作しない問題が見つかっております。
  ※ その問題の回避のため、messaging.xml の作成・msgexe の編集を行ないます。

 sw-89# pwd
 /opt/sun/comms/messaging64/lib
 sw-89# cp msgexe msgexe.orig
  ※ SMF から利用する起動・停止スクリプトのバックアップを作成します。
 sw-89# vi msgexe
  ※ msgexe を下記に示される様に編集します。
  ※ 具体的には、start-msg, stop-msg の引数($2) を削除、
  ※ refresh 時のコマンドを refresh コマンドに変更します。
 sw-89# cat msgexe
 #!/sbin/sh

 ##  Copy/Rename this script to //lib/
 ##  Please change $REPOS to the location of your SVN Repo

 . /lib/svc/share/smf_include.sh

 parser() {
         PROPERTY=$1
         # VALUE=`svcprop -p ${PROPERTY} watcher`
         VALUE=`svcprop -p ${PROPERTY} messaging_server`
         if [ "${VALUE}" = "\\"\\"" ] ; then
                 VALUE=
         fi
         echo $VALUE
 }

         MESSAGING_BASE=`parser application/messaging_server_base`

         if [ -z "${MESSAGING_BASE}" ] ; then
                 exit $SMF_EXIT_ERR_CONFIG
         fi

 case $1 in

         'start')
                 # ${MESSAGING_BASE}/bin/start-msg $2
                 ${MESSAGING_BASE}/bin/start-msg
                 if [ $? -ne 0 ] ; then
                         exit $SMF_EXIT_ERR_FATAL
                 fi
                 exit $SMF_EXIT_OK
                 ;;
         'stop')
                 # ${MESSAGING_BASE}/bin/stop-msg $2
                 ${MESSAGING_BASE}/bin/stop-msg
                 if [ $? -ne 0 ] ; then
                         exit $SMF_EXIT_ERR_FATAL
                 fi
                 exit $SMF_EXIT_OK
                 ;;
         'refresh')
                 # ${MESSAGING_BASE}/bin/stop-msg        $2
                 # sleep 5
                 # ${MESSAGING_BASE}/bin/start-msg $2
                 ${MESSAGING_BASE}/bin/refresh
                 if [ $? -ne 0 ] ; then
                         exit $SMF_EXIT_ERR_FATAL
                 fi
                 exit $SMF_EXIT_OK
                 ;;
         \*)
                 echo "Usage: $0 { start | stop | refresh }"
                 exit $SMF_EXIT_ERR_FATAL
                 ;;
                 esac
 sw-89# 
 sw-89# cd /opt/sun/comms/messaging64/data/install
 sw-89# cp restofmessaging.xml messaging.xml
  ※ restofmessaging.xml を messaging.xml にコピーします。
 sw-89# vi messaging.xml
  ※ messaging.xml ファイルを下記に示される様に編集します。
  ※ 具体的には、dependency name='watcher' 部分をコメントアウト、
  ※ dependency name='DirectoryServer' を追加します。
  ※ 尚、dependency name='DirectoryServer' は、Directory Server
  ※ を別サーバにインストールしている場合は、不要です。
 sw-89# cat messaging.xml
 <?xml version="1.0"?>
 <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
 <!--
 Sun Java Enterprise System Messaging Server 7.0 ( Cascabel )
 -->
 
 <service_bundle type='manifest' name='messaging_server'>
 
         <service
             name='network/messaging_server'
             type='service'
             version='1'>
 
             <create_default_instance enabled='false' />
 
             <single_instance />
 
             <dependency
                 name='network-service'
                 grouping='require_all'
                 restart_on='none'
                 type='service'>
                 <service_fmri value='svc:/network/service' />
             </dependency>
 
             <dependency
                 name='fs-local'
                 grouping='require_all'
                 restart_on='none'
                 type='service'>
                 <service_fmri value='svc:/system/filesystem/local' />
             </dependency>
 
             <dependency
                 name='name-services'
                 grouping='require_all'
                 restart_on='refresh'
                 type='service'>
                 <service_fmri value='svc:/milestone/name-services' />
             </dependency>
 
             <dependency
                 name='identity'
                 grouping='optional_all'
                 restart_on='refresh'
                 type='service'>
                 <service_fmri value='svc:/system/identity:domain' />
             </dependency>
 <!--
             <dependency
                 name='watcher'
                 grouping='require_all'
                 restart_on='refresh'
                 type='service'>
                 <service_fmri value='svc:/network/watcher' />
             </dependency>
 -->
             <dependency
                 name='DirectoryServer'
                 grouping='require_all'
                 restart_on='refresh'
                 type='service'>
                 <service_fmri value='svc:/application/sun/ds:default' />
             </dependency>
 
             <exec_method
                 type='method'
                 name='start'
                 exec='/opt/sun/comms/messaging64/lib/msgexe start'
                 timeout_seconds='180' >
             </exec_method>
 
             <exec_method
                 type='method'
                 name='stop'
                 exec='/opt/sun/comms/messaging64/lib/msgexe stop'
                 timeout_seconds='180' >
             </exec_method>
 
             <exec_method
                 type='method'
                 name='refresh'
                 exec='/opt/sun/comms/messaging64/lib/msgexe refresh'
                 timeout_seconds='180' >
             </exec_method>
 
             <property_group name='application' type='framework'>
                     <propval name='messaging_server_base' type='astring'
                             value='/opt/sun/comms/messaging64' />
             </property_group>
 
             <property_group name='startd' type='framework'>
                 <propval name='ignore_error' type='astring'
                         value='core,signal' />
             </property_group>
 
             <stability value='Unstable' />
 
     </service>
 
 </service_bundle>
 sw-89#

messaging.xml ファイルがあった場合もここから先は実行してください。

 sw-89# svccfg import ./messaging.xml
  ※ messaging.xml ファイルが出来たら、svccfg コマンドにて import します。
 sw-89# svcs network/messaging_server
 STATE          STIME    FMRI
 disabled       15:12:37 svc:/network/messaging_server:default
 sw-89# 
  ※ svc:/network/messaging_server:default が追加されている事を確認します。
 
 sw-89# svcadm enable messaging_server
  ※ svc:/network/messaging_server:default サービスをスタートします。
 sw-89# svcs messaging_server
 STATE          STIME    FMRI
 offline\*       15:23:08 svc:/network/messaging_server:default
 sw-89# svcs messaging_server
 STATE          STIME    FMRI
 online         15:23:16 svc:/network/messaging_server:default
 sw-89#
  ※ svc:/network/messaging_server:default サービスが online になっている事が確認出来ます。

以上で、Messaging Server の SMF の登録が完了しました。


Application Server 9.1 を SMF に登録

最後に Application Server を SMF に登録しましょう。
Application Server は、テンプレートファイルの利用では無く、asadmin コマンドにて SMF に 登録出来ます。

 sw-89# cat /.passwordfile
 AS_ADMIN_USER=admin
 AS_ADMIN_PASSWORD=<admin ユーザの実際のパスワードを記載して下さい。>
 AS_ADMIN_MASTERPASSWORD=<マスターパスワードを記載して下さい。>
 sw-89# 
  ※ 自動起動用の password ファイルを作成します。
 sw-89# /opt/SUNWappserver/bin/asadmin create-service --type das --passwordfile /.passwordfile /opt/SUNWappserver/domains/domain1
 サービスが正常に作成されました。詳細は次のとおりです:
 サービスの名前:application/SUNWappserver/domain1
 サービスのタイプ:Domain
 サービスの設定場所:/opt/SUNWappserver/domains
 システム上のマニフェストファイルの場所:/var/svc/manifest/application/SUNWappserver/domain1_opt_SUNWappserver_domains/Domain-service-smf.xml
 このサービスは svcadm コマンドを使用して有効にできます。
 コマンド create-service は正常に実行されました。
 sw-89# 
  ※ asadmin create-service コマンドにて、SMF に登録します。
 sw-89# svcs domain1
 STATE          STIME    FMRI
 disabled       15:50:17 svc:/application/SUNWappserver/domain1:default
 sw-89# 
  ※ svc:/application/SUNWappserver/domain1:default が登録されている事が確認出来ます。
 sw-89# svcadm enable domain1
  ※ svc:/application/SUNWappserver/domain1:default サービスを起動します。
 sw-89# svcs domain1
 STATE          STIME    FMRI
 offline\*       15:50:38 svc:/application/SUNWappserver/domain1:default
 sw-89# svcs domain1
 STATE          STIME    FMRI
 offline\*       15:50:38 svc:/application/SUNWappserver/domain1:default
 sw-89# svcs domain1
 STATE          STIME    FMRI
 online         15:52:34 svc:/application/SUNWappserver/domain1:default
 sw-89# 
  ※ svc:/application/SUNWappserver/domain1:default サービスが online になっている事が確認出来ます。

以上で、前回インストールした Messaging Server 関連コンポーネントが Solaris の SMF に登録され、OS 起動時に自動起動されるように設定されました。

 sw-89# svcs ds messaging_server domain1
 STATE          STIME    FMRI
 online         14:58:19 svc:/application/sun/ds:default
 online         15:23:16 svc:/network/messaging_server:default
 online         15:52:34 svc:/application/SUNWappserver/domain1:default
 sw-89#


参考情報

土曜日 10 25, 2008

SJSMS - Sun Convergence をインストール

Communications Suite 6 に含まれる Sun Convergence は、今流行の AJAX を利用し、ドラッグアンドドロップによるメールのフォルダへの移動や、メール・フォルダなどの 右クリックメニューの表示、メール作成時のアドレス補完機能など、Web インターフェース ながら、スタンドアロンのメールアプリケーションに近い操作が可能なアプリケーションです。

前回、Messaging Server 7.0 のインストールをご紹介しましたので、その続きで、 Sun Convergence をインストールしましょう。

目次
  1. インストール手順
    1. Sun Convergence のインストール
  2. 初期設定
    1. Sun Convergence の初期設定
  3. スクリーンショット
インストール手順
    Sun Convergence のインストール
Sun Convergence は、Communications Suite に含まれるコンポーネントですので、 前回、Messaging Server 等をインストールした commpkg コマンドを使って、 インストールを行います。

また、Sun Convergence 自体は、Mail, Calendar, Instant Messaging の統合 Web インターフェース となっておりますが、今回は、純粋に Web Mail インターフェースとしてセットアップしますので、 追加でインストールするコンポーネントは、Sun Convergence のみです。(Calendar や Instant Messaging は、インストールしません。)
 sw-89# pwd
 /var/tmp/sjsms/Comms6
 sw-89# ls
 Legal_Folder
 README
 SunJava_CommsInstaller_Suite6_solaris-sparc.zip
 SunOS_sparc
 commpkg
 sw-89# ./commpkg install
          リンク : 詳細ログ

以上で、Sun Convergence 自体のインストールが終わりました。

初期設定
  1. Sun Convergence の初期設定
それでは、Sun Convergence の設定を行いましょう。
 sw-89# pwd
 /opt/sun/comms/iwc/sbin
 sw-89# ls
 config-servicetags  init-config         iwcadmin            locatejdk
 sw-89# ./init-config
          リンク : 詳細ログ

これで、Convergence の設定が終わりましたので、Application 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 /iwc ]。
 標準の JMX クライアント (JConsole など) はドメイン管理のために JMXServiceURL:
 [service:jmx:rmi:///jndi/rmi://sw-89.japan.sun.com:8686/jmxrmi] に接続できます。ドメインは少なくとも次のポートで接続を待機しています:
 [80 8181 4848 3700 3820 3920 8686 ]。
 ドメインはアプリケーションサーバークラスタおよびその他のスタンドアロンインスタンスをサポートします。
 
 sw-89#
以上で、Sun Convergence の設定が完了しました。

          \* Sun Convergence へアクセスする為の URL
          例) https://sw-89.japan.sun.com/iwc

尚、もし、サインイン後、画面が英語で表示されてしまっていた場合、Options から Language を「日本語」に設定し、Save Preferences をクリックした後、 サインアウト・サインインをする事で、日本語の画面になります。

それでは、新しい Web Mail を存分におためし下さい!
    スクリーンショット
  • ログイン画面
  • メールの右クリックメニュー
  • フォルダの右クリックメニュー
  • アドレス補完
  • 金曜日 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 からサポートされるわけでは無い事をご注意ください。
    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
       
           
    今日