Referer Spam
Почтовый спам несколько лет находится в центре внимания, т.к. хорошо заметен — засоряет почтовые ящики каждого (кто не использует статистические спам-фильтры . Однако спам паразитирует не только на 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
В 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*
Apache
Решения громоздкие, цитировать не буду, вот полезные ссылки:http://en.wikipedia.org/wiki/Referer_spam
http://www.kuro5hin.org/story/2005/2/14/02558/3376