web-dev-qa-db-ja.com

スパムをスパムフォルダに移動する方法は?

centOS 5.10には既にpostfix、dovecot、Clamav、Spamassassin、amavisd-newをインストールしています。チュートリアルはここにあります: http://catatanlepas.com/komputer/aplikasi/server-mail/postfix/359-instalasi-postfix-menggunakan-dovecot-di-centos-5-5

私はそのチュートリアルにRazor、Pyzor、dan DCCをインストールしていません。

/ var/log/maillogですべてが正常に機能しています。受信トレイに届かないスパムメールがある場合は、スパムメールをスパムフォルダーに移動します。

私の質問は次のとおりです。1. Webメールにスパムフォルダーを自動作成する方法は、受信トレイ、下書き、送信済みアイテムのみを作成し、Webメールにスパムフォルダーがないためです。 2.ユーザーごとにスパムメールをそのスパムフォルダーに移動する方法(/ var/vmailでユーザーを作成します)

私を助けてください、私は5日間グーグルで検索していて、これを積み重ねています:(

ありがとうございました。

16
user3747101

I-Dovecot LDAを使用するようにメール配信を設定します:

OPがリンクした元のWebサイトはオフラインですが、メール配信はsendmailプログラムを介して行われていたと思われます。これは、Dovecot LDAを介して行う必要があります。 (電子メールのOriginヘッダーの変更を回避するため)。

Postfixのmaster.cfを編集します(最初):

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

そしてファイルの最後に:

spamassassin unix -     n   n   -   -   pipe
    flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e 
    /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} 

次にPostfixのmain.cfを編集して追加します(オプション、以下の(3)を確認):

spamassassin_destination_recipient_limit = 1

これでメールは、ヘッダーを変更せずにDovecot LDA経由で配信されます。好奇心が強い人のために、ここに私の設定のいくつかの詳細があります:

  1. このconfigは、plus-addressing/sub-addressing/recipient delimitersで使用できます([email protected]宛のメールは[email protected]受信ボックスに配信されます)-そのため、私は-d ${user}@${nexthop}を追加しました。これにより、+およびドメインまでのすべてが削除されます。この機能を有効にするには、recipient_delimiter = +main.cfに必ず追加してください。
  2. 私のフラグはflags=DROhuです。異常はありませんが、ここで理解できます。 http://www.postfix.org/pipe.8.html ;
  3. spamassassin_destination_recipient_limit = 1は、すべての受信者がspamassassinによって個別に処理されるようにするために必要です。これは、上記のDフラグのために必要です(X-Original-Toヘッダーを含む)。このヘッダーを気にしない場合は、フラグを削除できます。これは必要ありません。

II-スパムをJunkフォルダに移動します:

(@Electronic Technologiesの助けを借りて https://stackoverflow.com/a/32470349/560745

スパムとして検出された電子メールをJunk IMAPフォルダに移動するようにDovecotを設定することもできます。ただこれに従ってください:

  1. /etc/dovecot/conf.d/15-mailboxes.confを編集し、コメントを解除してJunkフォルダを追加します(namespace inboxの近くのmailbox Trashセクションにある必要があります):

    mailbox Junk {
       special_use = \Junk
    }
    
  2. dovecot-sieveapt-get install dovecot-sieveとともにインストールします。

  3. /etc/dovecot/conf.d/90-sieve.confを編集し、次の行にコメントを追加します:#sieve = ~/.dovecot.sieve

  4. /etc/dovecot/conf.d/90-plugin.confを次のように編集します。

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  5. 一致するように/etc/dovecot/conf.d/15-lda.conf/etc/dovecot/conf.d/20-lmtp.confを編集します。

    protocol lda/lmtp { # do not copy/paste this line!
      mail_plugins = $mail_plugins sieve
    }
    

    [〜#〜]警告[〜#〜]protocolセレクションの下に別の設定がある可能性があります。それらを保持してください。ファイルのprotocol lda/lmtpの行が変更され、元の状態が維持されます。

  6. フォルダー/etc/dovecot/sieve/を作成します

  7. 次の内容のファイル/etc/dovecot/sieve/default.sieveを作成します。

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  8. chown vmail:vmail /etc/dovecot/sieve/ -Rのように、フォルダのアクセス許可を仮想メールユーザーとグループに変更します。この鳩を逃したら文句を言うでしょう!

  9. すべてを再起動します:service postfix restart; service dovecot restart; service spamassassin restart

  10. サーバー上の(外部サーバーからの)メールにメールを送信してみてください。最初に通常のメール、次に件名がXJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34Xのメールを送信します。 2番目のメールはJunkフォルダーに、最初のメールは受信トレイに送信されます。

最初の試みでこれが機能しない場合は、ログを確認してください:tail -f /var/log/mail.logtailの実行中にメールを送信してください。適切に機能する設定では、stored mail into mailbox 'INBOX'またはstored mail into mailbox 'Junk'を報告する必要があります。

32
TCB13

dovecot 2.1+の場合は、/ etc/dovecot/dovecot.confを変更します。

namespace {
    type = private
    separator = .
    inbox = yes
  mailbox Trash {
    auto = subscribe # autocreate and autosubscribe
    special_use = \Trash
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
}

plugin {
    sieve = /home/spam/default.sieve
}

protocol lda {
            auth_socket_path = /var/run/dovecot/auth-master
            mail_plugins = $mail_plugins sieve
}

次に/etc/postfix/master.cf-追加

spamassassin unix -     n   n   -   -   pipe
  user=vmail argv=/usr/bin/spamc -f -e  /usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

(!!)user = vmail-ユーザーをspamassassinに設定されているユーザーに変更します

コンテンツフィルターをsmtpに追加します

smtp  inet  n  - - - -  smtpd -o content_filter=spamassassin

/etc/mail/spamassassin/local.cf内

add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ version=_VERSION_
#rewrite_header Subject *****SPAM*****
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

X-Spamヘッダーをメッセージに追加し、後でふるいフィルタリングに使用しますspamassassinを再起動し、dovecotとpostfixをリロードします

ジャンクフォルダは自動的に作成されます。すべての迷惑メールはローカルにメールボックスの迷惑メールに配信されます

また、迷惑メールメッセージとしてマークされたすべてのメッセージ(上記のspamassassin構成)をジャンクフォルダーに移動するためのふるいフィルターの例を追加します。

require "fileinto";
  if exists "X-Spam-Flag" {
          if header :contains "X-Spam-Flag" "NO" {
          } else {
          fileinto "Junk";
          stop;
          }
  }
7
ETech

まあ、いくつかの方法がありますが、これは私が機能することがわかったものです。 postfix、dovecot、spamassassin、および(私はprocmailをお勧めします)のセットアップが完了したら、procmail/spamassassinにスパムをさまざまなフォルダに配布する方法を指示できます。ダブコット付き。次の4つのフォルダを使用します。

spam          (for known spam based on Bayes setting)
spam-learn    (for spam that slipped through, you move it here)
spam-probably (for spam ID'd as probably spam by Bayes setting)
spam-unlearn  (messages flagged as spam, that are NOT spam go here)

次のようにprocmailを介してメールをフィルタリングするように設定されたフォルダセットアップとpostfix

mailbox_command = /usr/bin/procmail -a "$EXTENSION"

これで、procmailrcを設定して、スパムが受信トレイに届くときに正しい場所に配置できるようになりました。 〜/ .procmailrcは次のようになります。

PATH=/usr/bin/vendor_Perl:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail/
LOGDIR=$HOME/log
#DEFAULT=$HOME/Mail/
LOGFILE=$LOGDIR/procmail.log
VERBOSE=ON
## with spamc
:0fw: spamc.lock
* < 256000
| spamc
#| /usr/bin/vendor_Perl/spamc
# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam
#Mail/spam

# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
spam-probably
#Mail/spam-probably

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped.  This will re-add it.
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "

:0 fhw
| sed -e '1s/^/F/'
}

すべてが自動的に機能するための最後の鍵は、fetchmailを使用してメッセージをスキャンし、受信トレイに届いたメッセージをスキャンしてprocmailに渡し、スパム/スパムをおそらく適切なフォルダに入れて、メッセージを読むことです。 spam(削除する)およびspam-unlearn(hamとして学習する)。典型的なfetchmailスクリプトは〜/ .fetchmailrcです。メールボックスをポーリングするコマンドが含まれているだけです。

poll mail.yourserver.com protocol IMAP : user yourname with password yourpass ssl \
sslfingerprint "D9:73:1A:FE:C6:7C:E7:9B:F1:31:F8:A1:A0:E1:F9:27"

(単にfetchmail --verboseを.fetchmailrcファイルに対して実行すると、サーバーのフィンガープリントが出力され、現在のフィンガープリントが確認され、一致しないことが通知されて接続が閉じられますが、次回は正しいフィンガープリントが取得されます:-)

最後に、spam-learnフォルダーとspam-unlearnフォルダーを読み取ることで、これらすべてを実行するcronジョブをいくつか設定します。毎時で十分です。スクリプトは次のようになります。

#!/bin/bash

## log file location and per-user name
LDIR=/home/admin/log
LFN="${LDIR}/${USER}.log"

## Retrieve and Process Spam & Ham from 'spam-learn' & 'spam-unlearn' folders
/usr/bin/fetchmail -a -s -n --folder spam-learn -m '/usr/bin/vendor_Perl/sa-learn --spam' &>/dev/null
mss=$?
sleep 2
/usr/bin/fetchmail -a -s -n --folder spam-unlearn -m '/usr/bin/vendor_Perl/sa-learn --ham' &>/dev/null
mhs=$?

## test and create log dir in noexist
[[ -d "$LDIR" ]] || mkdir -p "$LDIR"
if [[ -w "$LDIR" ]]; then

## check return from fetchmail and write log info
if [[ $(($mhs+$mss)) -le 2 ]]; then
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn completed successfully for user $USER" >>$LFN
else
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn FAILED for user $USER" >>$LFN
fi
fi

そして、cronジョブは上記のspamv.shファイルを実行するだけです:

05 * * * * /usr/local/bin/spamv.sh

私はこのようなサーバーを10年近く実行してきましたが、うまく機能します。トレーニングファイルはユーザーのホームディレクトリにあり、ボックス間を簡単に移動して、新しいユーザーに適切なベースセットを提供できます。幸運を。私はこのセットアップで openSuSE 11. の短いハウツーを行いました。そこにはもう少し情報があるかもしれません。

追伸レイゾールはロードする価値があります。

0
David C. Rankin