SpamassassinのバーチャルSMTPサーバ対応(SuSE9.2/9.3編)


Postfix+MySQLでバーチャルドメイン対応のSMTPサーバを構築しましたが、バーチャルで動作せるとprocmailが使えずSpamassassinが従来の方式では使用できません。いろいろ調べて、PostfixのフィルタのReadmeを参考にフィルタリングすることにしました。

■事前準備

事前準備として、Spamassassinのインストールとフィルタ専用のユーザおよび作業ディレクトリを作成しておきます。

  1. まずは、フィルタ専用のユーザおよび作業ディレクトリを作成する。

    # mkdir /home/filter
    # groupadd -g 10001 filter
    # useradd -g filter -u 10001 -d /home/filter -s /bin/false filter
    # chown filter:filter /home/filter
    # mkdir /var/spool/filter
    # chown filter:filter /var/spool/filter
    # chmod 700 /var/spool/filter


  2. YaSTで perl-spamassassin とspamassassin をインストールします。

    ・YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。
    ・「フィルタ」 を 「検索」 とし検索欄に 「spamassassin」 と入力し 「検索」 ボタンを押す。
    ・右側に該当するパッケージが出てくるので、perl-spamassassin とspamassassinにチェックマークを入れて 「了解」 を押しておしまい。

  3. SuSEのデフォルトのRPMから、即ち2.6系からアップデートした場合、3.0系では -a オプションがなくなった関係で設定変更しないと起動エラーになります。本設定変更はYaSTで行います。(新規の場合は本作業は不要)

    ・YaST コントロールセンタを起動し、「システム」の「/etc/sysconfig エディター」を起動する。
    ・「設定のオプション」 で 「Network」 -> 「Mail」 -> 「Spamassassin」 -> 「SPAMD_ARGS」と開き、「設定」欄でパラメータから「-a」を削除(「-d -c -L」を残す)し、 「完了」 ボタンを押す。

  4. ここでspamdを起動しておきます。

    # chkconfig spamd on
    # /etc/init.d/spamd start



■フィルタスクリプトの作成

フィルタのReadmeを参考に、以下のようなフィルタスクリプトを /usr/local/bin/spam-filter として作成しました。処理としては、メールをSpamassassinに渡し、Spam-StatusがYesになっている場合はspam専用ユーザ(spam@example.com)に配送するようにしました。誤配送があるので、いきなり捨てることはしていません。


# vi /usr/local/bin/spam-filter
[i]で以下を挿入。

#!/bin/sh

# Simple shell-based filter. It is meant to be invoked as follows:
# /path/to/script -f sender recipients...

# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -i"
SPAMASSASSIN=/usr/bin/spamc

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat | $SPAMASSASSIN -x > in.$$
grep -e "^X-Spam-Status:.Yes" in.$$ \
   && $SENDMAIL "spam@example.com" < in.$$ \
   || $SENDMAIL "$@" < in.$$

exit $?

[Esc]、[:]、[w]、[q]で保存。

# chmod 700 /usr/local/bin/spam-filter
# chown filter:filter /usr/local/bin/spam-filter


■Postfixの設定

Postfixにフィルタ処理をさせるため、/etc/postfix/master.cf に設定を行います。

  1. Postfix が コンテンツフィルタにメールを配送するように設定する。

    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    filter    unix  -       n       n       -       10      pipe
        flags=Rq user=filter argv=/usr/local/bin/spam-filter -f ${sender} -- ${recipient}


  2. SMTP で到達したメールのみにコンテンツフィルタを使うためsmtp / smtps エントリに "-o content_filter=filter:dummy" を追加する。

    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
       
    -o content_filter=filter:dummy
    smtps     inet  n       -       n       -       -       smtpd
        -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

        -o content_filter=filter:dummy


  3. ここでpostfixを再起動し、メール送信テストをしてみる。

    # /etc/init.d/postfix restart


    このとき、初めてSpamassassinが機能し、filterユーザのhomeディレクトリ配下に、.spamassassinフォルダが作成され、更にその配下にuser_prefsという制御ファイルと auto-whitelist* が作成されます。同時に、そのメールのヘッダに、下記のような行が追加されているはずです。SPAMメールと判定されると、「X-Spam-Status: No」がYesとなり、「X-Spam-Level: *****」とSPAM度に応じて*が付加されます。

    X-Spam-Checker-Version: SpamAssassin 3.0.0 (2004-09-13) on server.aconus.com
    X-Spam-Level:
    X-Spam-Status: No, score=-0.1 required=8.0 tests=CONTENT_TYPE_PRESENT,
    ISO2022JP_CHARSET,X_MAILER_PRESENT autolearn=ham version=3.0.0

  4. 上記で動作確認できたら、Spamassassinの設定ファイルは、例によって日本語も含めかなりチューニングされたTLECさんのファイルを使わせてもらいました。

    # cd /home/filter/.spamassassin
    # wget -O user_prefs  http://tlec.linux.or.jp/docs/user_prefs



Topページへ