up_l dmy up_r
dmy home dmy dmy dmy

●postfix + procmailによるメールフィルタリング(procmail-sub)●


(※管理人は現在これを使用していません)

メールサーバーを立てている方の悩みといえば「スパム(未承諾広告)」と「ウィルス」ではないかと思います。
私のところにもほぼ毎日のように届いています。

ウィルスについては、「H+BEDV AntiVir MailGate」を導入して排除しています。(導入方法は後日アップします)
また念には念をということで特定の拡張子(LZH、ZIP)以外は拒否するようにpostfixのbody_checksでチェックしていました。

スパム(未承諾広告)はprocmailこちらのレシピを参考にして排除していました。

ところがここでbody_checksに含まれる拡張子のウィルスが届いた場合に1つ問題が起こってしまいました。
AntiVir MailGateはウィルスが見つかった場合にpostmaster(デフォルト)にアラートを返すのですが、
「postfix→AntiVir MailGate(ウィルス排除)→postfix(ここでbody_checks)」という挙動をするため、
postmasterにアラートが届いた場合にbody_checksで引っ掛かってしまい、
AntiVir MailGateが「could not be forwarded now. We'll retry later.」
を吐き続けてpostmasterに配送できないという問題が起こってしまいました。・・・誰が良い方法があれば教えて下さい^^;

そこでbody_checksを使用せずにスパムと同様にprocmailで特定の拡張子も排除するように
こちらのレシピを試してみましたが、拒否する拡張子やスパムと見なすキーワードが変更になる都度、
.procmailrcを編集するのは面倒なので、これらだけを列挙したファイルを作成して、
このファイルをprocmailが読み込んでチェックできないものかと考えて作成したのが「procmail-sub」です。

■procmail-subの入手

※procmail-subを使用する為には以下の条件が必須となります。
» MTAがpostfixである
» Maildir方式を採用している
» procmailがインストールされている
» nkfがインストールされている

> wget http://cmf.ohtanz.com/download/procmail-sub.tar.gz
> tar zxvf procmail-sub.tar.gz
> cd procmail-sub

■procmail-subをエディタで開いてperlのパスを編集します。
> cp procmail-sub /usr/local/bin/
> vi /usr/local/bin/procmail-sub
------------------------------------------------------------------------------
01:#!/usr/bin/perl                       #perlのパス
------------------------------------------------------------------------------

> chmod 755 /usr/local/bin/procmail-sub
■procmail-ext(拒否する拡張子)をご自身の環境に合わせて編集します。
> cp procmail-ext /etc/postfix/
> vi /etc/postfix/procmail-ext
------------------------------------------------------------------------------
.vbs
.vbe
.jse
.css
.wsh
・
・
・
------------------------------------------------------------------------------
■procmail-bwd(スパムと見なすキーワード)をご自身の環境に合わせて編集します。
> cp procmail-bwd /etc/postfix/
> vi /etc/postfix/procmail-bwd
------------------------------------------------------------------------------
未承諾広告
未承認広告
------------------------------------------------------------------------------
↑の設定はSubjectに未承諾広告、未承認広告が含まれる場合に拒否されます。

■フィルタリングしたいユーザーの$HOMEに.procmailrcを設置します。

> cp .procmailrc ~user/
> chown user:user ~user/.procmailrc

※特定の拡張子又はスパムと見なすキーワードのいずれかのみを適用したい場合等、
ご自身の環境に合わせてカスタマイズしたい場合は以下を参考にして下さい。

------------------------------------------------------------------------------
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
CONFDIR=/etc/postfix        #procmail-bwd/procmail-extがあるディレクトリ
LOGFILE=/var/log/procmail   #procmail用のログ
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
NGWORD=$CONFDIR/procmail-bwd
NGEXT=$CONFDIR/procmail-ext

#-----ここからスパムと見なすキーワードをチェック-----#
:0 H
* ^Subject:.*\/.*
{
    DECWORD=$MATCH
    :0 h
    * ^Subject:.*
    DECWORD=|echo "$MATCH" | nkf -me

    :0 h
    *$ ? test -s $NGWORD
    * ? echo $DECWORD | procmail-sub -w $NGWORD
    {
        EXITCODE=67         #procmail-bwdにマッチした場合に
        :0                  #User Unknownでリターンしてメールを破棄します
        /dev/null           #(単に破棄するだけの場合はEXITCODE=67、0:の行を削除して下さい)
    }
}
#----------------------ここまで---------------------#

#-----------ここから特定の拡張子をチェック----------#
:0 B
* (filename|name)=.*\/.*
{
    DECEXT=$MATCH
    :0 b
    * (filename|name)=.*
    DECEXT=|echo "$MATCH" | nkf -me

    :0 b
    *$ ? test -s $NGEXT
    * ? echo $DECEXT | procmail-sub -e $NGEXT
    {
        EXITCODE=67         #procmail-extマッチした場合に
        :0                  #User Unknownでリターンしてメールを破棄します
        /dev/null           #(単に破棄するだけの場合はEXITCODE=67、0:の行を削除して下さい)
    }
}
#----------------------ここまで---------------------#
------------------------------------------------------------------------------

■フィルタリングしたいユーザーの$HOMEに.forwardを設置します。 > cp .forward ~user/
> chown user:user ~user/.forward
※.forwardの内容

------------------------------------------------------------------------------
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #~/Maildir/"
------------------------------------------------------------------------------

■procmail用のログを作成します。

> touch /var/log/procmail
> chmod 666 /var/log/procmail

※logrotateに追加します。
> vi /etc/logrotate.d/procmail

------------------------------------------------------------------------------
/var/log/procmail {
        create 666 root root
}
------------------------------------------------------------------------------

▲TOP

ホームページ制作 SEO | ホームページ制作 大阪 | ドイツ留学 | 離婚 | 離婚相談
dmy
low_l dmy low_r