[postfix] Проверка на спам определённых получателей

Появилась задача: делать проверку на спам только для определённых ящиков.

Общая идея такова: после попадания письма в postfix, оно сверяется с фильтром в файле /etc/postfix/transport_spam, если попадает — передаётся на обработку фильтра spamassassin, который описан в master.cf. Он же в свою очередь состоит из проверки на спам и после проверки отдаёт письмо не в postfix, а в procmail, который на основе темы отдаёт её dovecot devivery, который складывает либо в INBOX, либо в JUNK папку соответственно.

Вы можете использовать dovecot-sieve и тогда вам не нужен procmail.

Приступаем: создаём (или добавляем, если уже есть) такую строку в main.cf:

transport_maps = /etc/postfix/transport_spam

Файл /etc/postfix/transport_spam имеет такой формат (двоеточие обязательно!):

<email>     <filter>:

в нашем случае имеем:

user@domain.com    spamassassin:

где spamassassin — это наш фильтр, который мы позже опишем в master.cf.

Создаём хеш:

# cd /etc/postfix && postmap hash:transport_spam

Описываем сам фильтр в master.cf:

spamassassin unix  -   n       n       -       -       pipe flags=FR user=nobody:mail argv=/usr/bin/spamc -d 127.0.0.1 -e /usr/bin/procmail -m from=${sender} to=${recipient} /etc/procmailrc

Где 127.0.0.1 адрес, где запущен spamassassin

Содержимое файла /etc/procmailrc

SHELL="/bin/bash"
SENDMAIL="/usr/lib/sendmail -oi -t"
LOGFILE="/var/log/procmail.log"
DELIVER="/usr/libexec/dovecot/dovecot-lda -f ${from} -d ${to} "
# fallback:
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/"
:0 w
* ^X-Spam-Status: YES
| $DELIVER -m Junk
:0 w
| $DELIVER

После этого перечитываем конфиг и на этом всё:

# postfix reload

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *