Почтовый спам несколько лет находится в центре внимания, т.к. хорошо заметен — засоряет почтовые ящики каждого (кто не использует
статистические спам-фильтры 
. Однако спам паразитирует не только на SMTP-протоколе. Набирает силу веб-спам в виде
CommentSpam (он же
LinkSpam и
BlogSpam) и
RefererSpam. Первый поражает форумы, wiki, блоги — любые веб-приложения, в которых допустима "самопубликация". Спамеры пытаются использовать ссылки в комментариях для накрутки
PageRank рекламируемого ресурса.
RefererSpam поражает те веб-приложения, которые автоматизированно публикуют списки ссылающихся сайтов (это делают многие wiki и блоги) или просто публикуют статистические отчеты. Спамерские программы отправляют на такие сайты большое количество HTTP-запросов, в поле
Referer которых указывают ссылку на рекламируемый ресурс в расчете "накрутить" статистику и попасть в публикуемые на этих сайтах отчеты.
С
CommentSpam бороться легко — легче чем с почтовым спамом — ACL, усложнение регистрации (тьюринговые тесты), клиентские хэши и те же статистические фильтры. А вот фильтрация
RefererSpam при всей простоте объекта фильтрации (одна строка с URL) представляет собой более сложную задачу из-за того что должна выполняться в реальном времени. Почта доставляется между SMTP-серверами без участия человека, и относительно большие задержки — в десятки и даже сотни миллисекунд (фильтрация спама и вирусов) никому не заметны. А
HTTP получает намного более интенсивную нагрузку чем
SMTP, и задержки в десятые или сотые доли секунды суммируются в реальные секунды при параллельной работе с сайтом многих посетителей, что уже хорошо заметно и снижает удобство пользования сайтом. Затраты на фильтрацию должны быть значительно меньше, чем собственное время формирования страницы. Только в этом случае фильтрация принесет пользу (снижение нагрузки на сервер), а не дополнительный вред. Поэтому вычислительно интенсивные (байес) и времяёмкие (RBL, fetch-back и т.п.) не годятся, и на текущий момент единственным широко используемым способом фильтрации referer-спама является сравнение со списком regexp'ов. Способ столь же неудобный в сопровождении, как и список эвристик в
SpamAssassin. В будущем несомненно появятся системы, работающие по принципу
IDS, и инструменты асинхронной фильтрации (с кэшированием). А пока приведу рекомендации для сегодняшнего дня.
В
acWEB (веб-сервере из комплекта
Eserv/3) сравнение
Referer'а с заданной маской и закрытие HTTP-соединения со спамерской программой в общем случае выполняется так (в OnRequestRules):
Referer: ~ *viagra* | S"
StopProtocol"
SetAction
Удобнее сравнение по списку масок во внешнем файле:
Referer IsInFile: spam_referers.txt | Forbidden
В файле spam_referers.txt могут быть маски блокируемых URL'ов, например:
- .to/
- .to
- .cc
- .cc/
- hydrocodone*
- adipex*
- phentermine*
- clubfreestyle.net*
Forbidden выдаст ответ "403 forbidden", а
StopProtocol просто закроет соединение — это быстрее и экономнее, но не гарантирует, что "умная" спамерская программа не будет "биться до победного конца". Им ворованных ресурсов чужих компьютеров (ботнетов) не жалко. На сегодняшний день (13.10.2005) можно использовать
StopProtocol.
Apache
Решения громоздкие, цитировать не буду, вот полезные ссылки:
http://en.wikipedia.org/wiki/Referer_spam
http://www.kuro5hin.org/story/2005/2/14/02558/3376