Спам не так уж сильно донимает когда используешь фильтрацию на стороне клиента, и продолжительное время я держался в стороне от бесконечной борьбы замка и отмычки. Вместе с тем, терпение - штука не резиновая, и когда количество мусорных писем перевалило за несколько сотен в день, оно порвалось :)

Итак, боремся со спамом на CENTOS4 с Sendmail. Предполагаем что вы хозяин хоста (root), пускай даже и виртуального.

Перепробовал несколько подходов - и DNSBL, и SPAMASSASIN, и Greylisting. Оказалось, что лучше всего они работают в комбинации, как и следовало ожидать :) Вместе с тем, наиболее эффективен именно последний.

Идея серого списка в общем-то тривиальна - отправитель должен продемонстрировать способность отправить то же самое сообщение с того же самого адреса повторно. Оказывается, соответствовать этому требованию тем сложнее, чем более серьезного масштаба рассылку делаешь. Фактически, большинство сетей зомби, построенных из зараженных вирусами ПК ничего не подозревающих домохозяек, не предусматривают возможность повторной отправки письма, тем более в привязке конкретного адресата к конкретному зомби. В общем, хватит теории.  Википедия в помощь :)

Greylist

У меня центос 4
Покурил предварительно ман отсюда http://wiki.centos.org/HowTos/postgrey#head-190b82868d2d30fae11b3d1670d1a4716320bf36
и отсюда http://wiki.centos.org/AdditionalResources/Repositories/RPMForge?action=show&redirect=Repositories%2FRPMForge

Решил использовать milter-greylist как практически законченное решение, не требующее особых плясок с бубном :)


1. Подключаем RPMForge

yum install yum-plugin-priorities
wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.i386.rpm
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -i rpmforge-release-0.3.6-1.el4.rf.*.rpm
yum check-update

2. Ставим мильтер

yum install milter-greylist


3. Обновляем конфиг sendmail.mc

INPUT_MAIL_FILTER(`greylist',`S=local:/var/milter-greylist/milter-greylist.sock')dnl
define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')dnl
define(`confMILTER_MACROS_ENVRCPT', `{greylist}')dnl

4. Настраиваем систему:

Важно не забыть записать greylist в define(`confINPUT_MAIL_FILTERS', `greylist,smtp-vilter') и пересобрать конфиг sendmail.
Еще нужно не забыть вписать симлинки в /etc/rc.d и не забыть в /etc/mail/greylist.conf включить acl greylist default, можно покрутить параметры delay и autowhite

Вот что получается по итогу:

Новые отправители получают отказ
220 bortnik.virtual.vps-host.net ESMTP Sendmail 8.13.1/8.13.1; Sat, 9 May 2009 20:08:44 +0300
ehlo tim
250-bortnik.virtual.vps-host.net Hello 29-92-133-95.pool.ukrtel.net [95.133.92.29], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
mail from:This email address is being protected from spambots. You need JavaScript enabled to view it.
250 2.1.0 This email address is being protected from spambots. You need JavaScript enabled to view it.... Sender ok
rcpt to:This email address is being protected from spambots. You need JavaScript enabled to view it.
451 4.7.1 Greylisting in action, please come back later

Собирается база /var/milter-greylist/greylist.db
#
# greylisted tuples
#
# Sender IP     Sender e-mail   Recipient e-mail        Time accepted
95.133.92.29    This email address is being protected from spambots. You need JavaScript enabled to view it. This email address is being protected from spambots. You need JavaScript enabled to view it. 1241890754 # 2009-05-09 20:39:14

Курим бамбук delay минут, и пробуем еще раз. Если проходит, значит все ок. Спам кончился :)

220 bortnik.virtual.vps-host.net ESMTP Sendmail 8.13.1/8.13.1; Sat, 9 May 2009 20:47:35 +0300
ehlo tim
250-bortnik.virtual.vps-host.net Hello 29-92-133-95.pool.ukrtel.net [95.133.92.29], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
mail from:This email address is being protected from spambots. You need JavaScript enabled to view it.
250 2.1.0 This email address is being protected from spambots. You need JavaScript enabled to view it.... Sender ok
rcpt to:This email address is being protected from spambots. You need JavaScript enabled to view it.
250 2.1.5 This email address is being protected from spambots. You need JavaScript enabled to view it.... Recipient ok
data
354 Enter mail, end with "." on a line by itself
subject:test

subj:)
.
250 2.0.0 n49HlZBX026392 Message accepted for delivery