Categories
SugiBlog ホームページ制作・システム開発|大阪

PROCMAILレシピ

環境:qmail+vpopmail

迷惑メール対策
.procmailrc

基本設定

#/home/vpopmail/domains/example.jp/username/.procmailrc
#環境変数の設定
PATH=/usr/bin:/usr/local/bin
HOME=/home/vpopmail/domains/example.jp/username
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
LOGFILE=$MAILDIR/procmail.log #省略するとログを記録しない
LOCKFILE=$MAILDIR/procmail.lock
VERBOSE=ON #詳細なログを記録する

#以下、カスタム変数
ME=username@example.jp
BLACKLIST=/home/vpopmail/domains/.blacklist #ブラックリストファイル
NGWORD=/home/vpopmail/domains/.ngword       #NGワードファイル


レシピ

#空のヘッダーを削除
:0Hfw
| formail -z

#日本語メールのみ受け付ける
:0Hfw
* ! ^Content-Type: .*(iso-2022-jp|multipart/mixed;)
* ! ^Subject: .*(iso-2022-jp|utf-8|euc-jp|shift_jis)
* ! ^FROM_DAEMON
| formail -I "X-Spam-Flag: YES"
:0Hfw
* ^Content-Type: .*(US-ASC|iso-8859-1)
| formail -I "X-Spam-Flag: YES"

#容量制限:60MBまで
:0Hfw
* > 60000000
| formail -I "X-Spam-Flag: YES"

#よくあるスパムメールを除去
:0Hfw
* ^From: .*<(_|-)
| formail -I "X-Spam-Flag: YES"

#Fromがないもの
:0Hfw
* ! ^From: .*
| formail -I "X-Spam-Flag: YES"

#アドレス詐称対策
#Message-IDがなく宛先と送信元が自分自身のアドレスなら
#返す先がないので削除
:0Hfw
* ! ^Message-ID: .*
*$ ^To: .*$ME.*
*$ ^From: .*$ME.*
/dev/null

#送信元メールサーバーのDNS名前解決ができないとき
#:0fwH
#* ^Received: .*from unknown
#| formail -I "X-Spam-Flag: YES"

フラグ判定の上、処理実行

#スパムフラグがYESだったら宛先不明で返送
:0H
* ^X-Spam-Flag: YES
{
    :0fwHB
    * ^From: \/.*
    | formail -r -k \
    -I "To: $MATCH" \
    -I "Subject: failure notice" \
    -I "From: MAILER-DAEMON@example.jp"
    :0w
    | /var/qmail/bin/sendmail -oi -t
}

#前の条件を満たさなかったとき
:0fwE
{
    :0fwH
    | formail -A "Check: False"
}

ブラックリストを使用する場合
1行に1アドレスを書いたブラックリストファイルを用意します。
レシピに以下を追加します。

#送信元アドレスを変数$FROMに格納
#sedコマンドで表示名、スペース、<>を除去(無効)
:0fwH
* ^From: \/.*
{
    FROM = $MATCH
    #FROM = `echo $FROM | sed s/\".*\"//`
    #FROM = `echo $FROM | sed s/[[:space:]]//g`
    #FROM = `echo $FROM | sed s/\\<//g | sed s/\\>//g`
}
#送信元アドレスがブラックリストにあればスパムフラグを付ける
#完全一致する行を見つけるためにwオプションを追加
:0fw
* ? test -s $BLACKLIST
* ? echo "$FROM" | fgrep -iqwf $BLACKLIST
| formail -I "X-Spam-Flag: YES"

ブラックリストを使用する場合、環境変数の設定を以下のようにする必要があります。

SHELL=/bin/sh #追加
PATH=/bin:/usr/bin:/usr/local/bin

VERBOSEについては、デバッグ時のみ使用するようにすること
procmailはメール1通ずつプロセスが起動するようなので、
常に使用していると負荷がかかりすぎる可能性があります。

レシピを作成した後、実装するために.qmailを作成
/home/vpopmail/domains/example.jp/username/.qmail

| /usr/bin/procmail -m ./.procmailrc
2,566 views

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です