Spamd - секретный контрудар Andrey Matveev, Anton Karpov Хакер, номер #085, стр. 085-106-2 На основании полученных данных и в зависимости от IP-адреса подключившегося SMTP-сервера в наших силах: * перенаправить входящее SMTP-подключение демону spamd, который не разорвет соединение, как можно было предположить, а наоборот, будет стараться максимально долго удерживать спамера «на линии»: table <spamd> persist rdr pass on $ext_if inet proto tcp from <spamd> to port smtp \ -> 127.0.0.1 port spamd * разрешить прохождение валидных пакетов: block in pass in log on $ext_if inet proto tcp from any to $ext_if \ port smtp flags S/SA keep state В итоге спам не доставляется (важно отметить: после завершения соединения spamd <--> MTA рекламные письма будут возвращены в почтовую очередь отправителя), нагрузка на наш сервер практически не возрастает, а вот время и системные ресурсы подключившегося спамерского сервера, который обрабатывает сотни соединений одновременно, тратятся впустую. Можно сказать, spamd проводит очень аккуратную DoS-атаку, при этом не отступая ни на йоту от положений, задокументированных в почтовых RFC. Да-да, в идеале, если бы все почтовые серверы были оборудованы подобной защитой, спамерам пришлось бы весьма туго. [от теории к практике] Конфигурирование демона следует начинать с правки spamd.conf(5). В качестве значения директивы «all» указываем адреса засветившихся спамеров из дружественных восточных стран (можно, конечно, включить в перечисление секции spamhaus и spews, но тогда будь внутренне готов к тому, что в одно прекрасное утро ты перестанешь получать почту из доменов mail.ru, narod.ru, yandex.ru и т.д.): # vi /etc/spamd.conf all:\ :china:korea: china:\ :black:\ :msg="SPAM. Your address %A appears to be from China\n\ See www.okean.com/asianspamblocks.html for more details":\ :method=http:\ :file=www.openbsd.org/spamd/chinacidr.txt.gz: korea:\ :black:\ :msg="SPAM. Your address %A appears to be from Korea\n\ See www.okean.com/asianspamblocks.html for more details":\ :method=http:\ :file=www.openbsd.org/spamd/koreacidr.txt.gz: Ключевое слово black определяет принадлежность к блэклисту, msg задает сообщение об ошибке, возвращаемое SMTP-серверу отправителя, а method и file описывают способ получения сжатого gzip(1)'ом текстового файла, содержащего IP-адреса спамеров. Далее утилитой crontab(1) вызываем текстовый редактор (тот, что определен в переменной окружения $EDITOR) для периодического обновления базы с адресами ( каждый час): # crontab -e 0 * * * * /usr/libexec/spamd-setup Теперь ненадолго отвлечемся от процесса конфигурирования и заострим свое внимание на режиме greylisting. [магия greylisting] Борьба со спамом может идти на двух фронтах: на стороне сервера либо на стороне клиента. Заставлять клиента совершать какие-либо телодвижения - это кощунство :), а на стороне сервера, помимо традиционных черных списков, существуют два различных подхода: анализ непосредственной корреспонденции, когда по совокупности многих параметров делается вывод о «чистоте» каждого конкретного письма, а также технология «серых списков» (greylisting). Вот о последней мы и поговорим подробнее, ведь при грамотной реализации и правильной настройке данная технология способна отфильтровывать до 98% спама, не затрачивая время и ресурсы сервера на трафик и обработку «грязных»писем. |