- Linux
- 2012-02-15 - 更新:2012-02-28
この記事は最終更新日から1年以上経過しています。
環境:qmail+vpopmail+procmail
procmailを利用してブラックリストを作成します。
まず、適当なディレクトリに空のファイルを作成します。
(ここでは/usr/tmp/.blacklistとしています)
メールアドレスをブラックリストに追加するには、
件名に追加したいメールアドレス、本文に1行でパスワード(pw=00000000の形式)を
入力し、bl@example.jp宛に送信するようにしています。
送信元アドレスも指定されたドメインからのみに指定しています。
#/home/vpopmail/domains/example/bl/.procmailrc SHELL=/bin/sh #ファイルに書き込むため必須 PATH=/bin:/usr/bin:/usr/local/bin HOME=/home/vpopmail/domains/example/bl MAILDIR=$HOME/Maildir DEFAULT=$HOME/Maildir/ #LOGFILE=$MAILDIR/procmail.log LOCKFILE=$MAILDIR/procmail.lock # ブラックリストファイルのパス BLACKLIST=/usr/tmp/.blacklist # 送信元アドレスを判断 :0H * ! ^From: .*@example.jp /dev/null # 本文中のパスワードをチェック :0B * ! ^(pw|Pw|pW|PW)=00000000 /dev/null # 件名の有無をチェック([]内は^・半角スペース・タブ) :0 *$ ! ^Subject: *\/[^ ].* { ADDBL = `formail -x Subject:` } # 件名を変数に格納 :0E { ADDBL = $MATCH } # 送信されたアドレスが既にブラックリストにあるかチェック :0 * ? test -s $BLACKLIST * ? echo "$ADDBL" | fgrep -iqwf $BLACKLIST /dev/null # ブラックリストに未登録なら追加 :0E | echo $ADDBL >> $BLACKLIST && echo >> $BLACKLIST # 色んなところで紹介されているのは、1行ずつ開けて登録するようになっているが # 行が開いていなくても改行されていればいけるようなので以下でも可 | echo $ADDBL >> $BLACKLIST
ブラックリストのチェックを行うため、各ユーザーの.procmailrcにレシピを追加
#送信元アドレスを変数$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` } # 送信元アドレスがブラックリストにあればSpamフラグをつける # 完全一致の行を見つけるためfgrepにwオプションを追加 :0fw * ? test -s $BLACKLIST * ? echo "$FROM" | fgrep -iqwf $BLACKLIST | formail -A "X-Spam-Flag: YES" # SpamフラグがYESの場合、削除 :0fwH * ^X-Spam-Flag: YES /dev/null
fgrepについて
-i, --ignore-case ... PATTERN と入力ファイルの双方で、英大文字と小文字の区別をしないようにします -q, --quiet ... 沈黙。通常の出力を抑止します。スキャン動作は最初のマッチで終了します。 -w, --word-regexp ... 完全な語にマッチする行のみを選択します。 -f FILE, --file=FILE ... パターンを FILE から 1 行ごとに読み込みます。空のファイルはパターンを含まないので、何にもマッチしません
また、同様の方法でホワイトリストの作成も可能です。
その際はホワイトリスト更新用のwl@example.jpを作成し、/usr/tmp/.whitelistに書き込む、といった形にしてください。
4,340 views