Postfix 3.4 迷惑メール対策-SpamAssassin ユーザ毎

この記事は約10分で読めます。

SpamAssassinにて、ユーザ毎に設定ができるように調整します。
また、PostfixAdminにて、メールボックスが作成できるようにします。
マルチドメイン対応版です。

SpamAssassinを通さないメール

メールによっては、SpamAssassinを通さないように設定をします。
これにより、サーバーの負荷が下がります。
SpamAssassinは、サーバーにそれなりの負荷がかかります(汗)。

# vi /etc/procmailrc

----------------------------------------------
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=/mail/$DOMAIN/$USER
DEFAULT=$MAILDIR/
LOGFILE=/mail/$DOMAIN/$USER/.procmail.log
VERBOSE=ON

:0
* ? test -f $MAILDIR/nospamcheck
$MAILDIR/

:0fw: spamassassin.lock
*!^X-Spam-Status.*
| /usr/local/bin/spamc

:0
*^X-Spam-Status: YES
$MAILDIR/.Spam/
----------------------------------------------

:0
* ? test -f $MAILDIR/nospamcheck
$MAILDIR/

↑という行を加えます。

/mail/(ドメイン)/(@前)/
直下に「nospamcheck」というファイルを置くと、
SpamAssassinを通さない設定になります。

SpamAssassin ユーザ毎の設定ファイルを読み込む

あるメールアドレスは、
・迷惑メール判定を厳しく
・ホワイトリストを多く設定する
など、メールアドレス毎の設定が可能なようにします。

SpamaAsassinのオプション変更

vi /etc/sysconfig/spamassassin

SPAMDOPTIONS="-d -c -m5 -H"
 ↓
SPAMDOPTIONS="-d -c -m5 -H -s /var/log/spamd.log -u vuser --x --virtual-config-dir=/mail/%d/%l/.spamassassin"

「-s /var/log/spamd.log」 で、ログファイル名を指定します。
/var/log/maillogから、ファイルを分離して、メンテナンスをしやすくします。

「–virtual-config-dir=/mail/%d/%l/.spamassassin」
で、ユーザ毎のSpamAssassinの設定ファイルを読み込みます。
「/mail/(ドメイン)/(@前のユーザ)/.spamassassin」
のディレクトリを、設定ファイル関係のファイルと指定します。
この場合、
「/mail/(ドメイン)/(@前のユーザ)/.spamassassin/user_prefs」
が、優先的に読み込まれます。
ユーザ毎の設定ファイルがない場合は、デフォルトの
「/etc/mail/spamassassin/local.cf」
が評価されます。

「–x」は、「–virtual-config-dir」を有効にするには、必須。

ユーザ毎の評価ファイル、
「/mail/(ドメイン)/(@前のユーザ)/.spamassassin/user_prefs」は、
「/etc/mail/spamassassin/local.cf」は、同じファイル形式です。

procmailrcの変更

# vi /etc/procmailrc
------------------------------
:0fw: spamassassin.lock
*!^X-Spam-Status.*
| /usr/local/bin/spamc
------------------------------
 ↓ 
------------------------------
:0fw: spamassassin.lock
*!^X-Spam-Status.*
| /usr/local/bin/spamc -u $USER@$DOMAIN
------------------------------

ユーザ毎のSpamaAsassin設定

/etc/mail/spamassassin/local.cf

/mail/(ドメイン)/(@前のユーザ)/.spamassassin/user_prefs
に、コピーします。

そして、ユーザ毎のSpamaAsassin設定は、

/mail/(ドメイン)/(@前のユーザ)/.spamassassin/
の「private_prefs」に書いておきます。

/mail/(ドメイン)/(@前のユーザ)/.spamassassin/private_prefs

required_score 1.0
whitelist_from info@example.jp
blacklist_from *@example.com

というふうに書きます。

PostfixAdmin メールボックスの作成

procmailを使うと、PostfixAdminで、メールを作成しても、自動的に、サーバー側で、メールボックスが作成されません。
PostfixAdminで、メールの作成/削除をしたときに、スクリプトを走らせて、自動的にメールボックスを作成するようにします。

# mkdir /usr/local/bin/postfixadmin
# cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
# cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
# cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin

↑ドメイン登録、メールボックス登録/削除のスクリプトを、コピーします。
# mkdir /mail/.deleted-maildirs
# chmod 0700 /mail/.deleted-maildirs
# chown vuser:vuser /mail/.deleted-maildirs

↑削除されたメールボックスの待避用ディレクトリをあらかじめ作成します。
# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh

basedir=/var/spool/maildirs
 ↓
basedir=/mail


------------------------------
maildirmake "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: maildirmake didn't produce a directory; bailing out."
    exit 1
fi

------------------------------
 ↓
------------------------------
mkdir "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi


chown -R vuser:vuser "$maildir"
chmod -R 700 "$maildir"
------------------------------

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh

basedir=/var/spool/maildirs
 ↓
basedir=/mail

trashbase=/var/spool/deleted-maildirs
 ↓
trashbase=/mail/.deleted-maildirs

vi /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh

basedir=/var/spool/maildirs
 ↓
basedir=/mail

trashbase=/var/spool/deleted-maildirs
 ↓
trashbase=/mail/.deleted-maildirs

# chmod 755 /usr/local/bin/postfixadmin/postfixadmin-*

# vi /var/www/postfixadmin/config.inc.php

$CONF['mailbox_postcreation_script'] = '';
 ↓
$CONF['mailbox_postcreation_script'] = 'sudo -u vuser /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh';


$CONF['mailbox_postdeletion_script'] = '';
 ↓
$CONF['mailbox_postdeletion_script'] = 'sudo -u vuser /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh';


$CONF['domain_postdeletion_script'] = '';
 ↓
$CONF['domain_postdeletion_script'] = 'sudo -u vuser /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh';

# sudo visudo

## Same thing without a password
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/p*

「sudo」コマンドで、
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/p*

を入れます。

apache ユーザは、/usr/local/bin/postfixadmin/p*のコマンドをパスワードなしで、実行することができる。
という設定です。

これを入れないと、
[sudo] password for apache:
と怒られます。

↑と、表示され、
/mail/以下にも、メールボックス(MailDir形式)が作成されました。

タイトルとURLをコピーしました