настройка spamassassin
dersu 12 февраля, 2009 - 09:37
Можно ли каким-то образом настроить spamassassin так, чтобы он анализировал содержимое "Тела" письма и если встречал заданный url (или может быть часть url-а), то присваивал бы определенное значение спамности (score в local.cf)?
А то одолели спамеры - по байесу их уже не отловишь - содержимое письма на 90% меняют, а урлы вставляют одни и те же на свои гадские сайты :)
»
- Для комментирования войдите или зарегистрируйтесь
http://wiki.apache.org/spamas
http://wiki.apache.org/spamassassin/WritingRules, раздел URI rules
Не грусти, товарищ! Всё хорошо, beautiful good!
Отсутствие header
Азамат, спасибо, за тыкание в нужное место RTFM :) Это действительно то, что мне было нужно и кое-что еще полезное.
А вот такой вопрос: можно ли каким-то образом в правилах задать присвоение веса, если какого-либо хедера вообще в письме нет? Например, нет хедера X-Mailer - тогда присваиваем дополнительно спамности единичку.
Если не боитесь то сделать
Если не боитесь то сделать легко
Как бы только лишнее не порезать.
А что, интересуетесь spamassassin?
Не хватает default?
Здорово!
Андрей, спасибо, действительно просто, я мог и сам додуматься :)
Бояться нечего, я буду использовать не так примитивно, как написал - с помощью META будут сложные правила.
На счет дефолтных настроек - действительно не хватает. У нас более 500 адресов, при чем многие из них чуть ли не 10 лет назад в инете засвечены - спама валит много и он очень разнообразен. Но благодаря spamassassin-у режется почти все, вот теперь затачиваю, чтобы последних прошмыгнувших дорезал.
Попробуйте еще Relay-Country
Попробуйте еще Relay-Country прицепить.
еще процентов 20% отрежет.
Как заточите, готов обменяться опытом.
У меня адресов меньше, но спама почти не стало. Приходит 8-10 писем на 20 адресов.
Я пытаюсь правила на русском написать вот здесь
http://www.gentoo.ru/node/13632#comment-94568
и еще маленький вопрос - повторяющиеся слова
Relay-Country нам не подходит - у нас легальные отправители могут быть где угодно :)
Вот что интересно. К примеру отлавливаю я каким-то шаблоном подозрительное выражение.
Но хочется при многократном его обнаружении увеличивать вес спамности.
Сейчас сколько бы раз попадающее под шаблон выражение в письме не встречалось - хоть один раз хоть десять вес будет присваиваться один раз. Можно ли задать правило на многократное попадание шаблона?
Весьма интересная технология
Весьма интересная технология mail-filter/postgrey. В моем случае фильтрует порядка 60% . Ошибок (поначалу) процента два-три (обходится белыми списками). Вкупе с блек листами весьма прилично. Контент фильтр - штука обоюдоострая.
postgrey - зло, если его
postgrey - зло, если его натравливать на всех.
Задержка большая при получении почты с нового адреса.
Avari посоветовал ставить его только на unknown - http://www.gentoo.ru/node/9827#comment-94964
и я с ним полностью согласен.
насчет где угодно у меня
насчет где угодно у меня сомнения - KR TH TW CN вам могут подойти?
Пусть Вы хотите прнимать почту отовсюду. Неплохо было бы прогнать архив СПАМ и неСПАМ через geoip - тогда Вы увидите, откуда Вам пшут, а откуда - нет. И если какая-то страна 5 раз встречается в спаме против 1 в неспаме, то почему бы не добавить ей немного scores? Ну а если отношение 1/10? 0/10?
А насчет несколько раз я тоже думал.
Проще все же использовать плагин, про который я писал.
передавать ему 2 параметра - regexp и count.
Тогда для разного count можно сделать разный вес.
Я у себя так и сделал.
Правда с русским языком так и не смог подружить - руки не доходят.
Я правильно понял про шаблон - в тексте?
Вот это работает. За образец можете взять оттуда.
Есть еще такая идея насчет ссылок в почте. Сейчас Вы поставили regexp на URI и думаете, что победили. Пр этом Вы понимаете, что подстраиваетесь под спамеров, а не они под вас. Вот когда, скажем, рубишь helo по regexp или говоришь, что страна аргентина или корея мне не нужна - это активная защита. а regexp на URI - это на 1 неделю. Может на 2. Потом или regexp менять придется, или совсем его убирать. К слову сказать, однотипные письма обычно приходят с 1-2 хостов. Проще их заблеклистить навсегда, чем подстраиваться regexp.
Чтобы не отлавливать такие хосты и регэкспы, предлагаю по ссылкам такое решение.
Реализовать его несложно.
Берем ссылку и проверяем адрес хоста на RBL - abuse хостинг, zen - в общем выбрать. Если в списке - это спам.
Придется, конечно, проверять не все ссылки, только 1-ю и не в каждом письме - иначе сервер устанет. Можно даже проверить страницу на редирект - взять заголовок http.
Что Вы на это думаете? Я бы напсал если это идея стоящая. Какие минусы?
доработка напильником
Вот Вы смеетесь, а из всех этих стран пишут. Бизнес-тренер только-что проводил корпоративный тренинг и через 12 часов уже из Японии ведет интенсивную переписку с топ-менеджерами. И вес по странам я не буду добавлять, потому что как раз эти письма являются для руководства критически важными.
Да, правильно, спасибо, попробую.
Ну тут мы скатываемся в философию :) Я же технарь - люблю действовать прямо.
Ну, раз Вы предложили, я поддержу. В общем соревнование брони и снаряда тут в чистом виде. Однако, каждый строит свою броню и это хорошо, т.к. если бы спамеры знали конструкцию моей брони, то они бы доработали снаряды. Я именно поэтому и не публикую свои настройки, а просто обмениваюсь идеями и тем или иным способом их воплощаю. Отлавливать по хостам из блэклистов - тоже идея не гуд, т.к. эти ребята из RBL и иже с ними зачастую банят добрых и пушистых, просто заносят весь пул адресов провайдера, к примеру. Знаю и по нашим партнерам и по себе. Отлавливая регекспом урлы - я сбиваю основную идею спамера - раскрутить сайт за счет спама. А если спам идет на сайты-однодневки - то там работают другие варианты брони - и байес и хелло и списки блэклистов с определенным весом.
По поводу ложных срабатываний - встречаются не чаще раза в месяц - ставим в вайт-лист, пришедшее письмо закидываем в ham и все становится на свои места.
Ну ну
Приведу Вам примеры.
1. SPF - про это МОЖНО писать, т.к. спамер ВЫНУЖДЕН это учитывать.
2. greylist - сделал - и все, пусть они знают, если им выгодно отправлять почту повторно через 300 секунд, пусть отправляют, но зачастую это не так :).
3. Ну не люблю я слово "рассылка" в англо-русской кодировке. Писать про это не страшно - либо я буду получать это слово на русском и поймаю уже его :) (3-4 характерных слова), либо до меня их почта не дойдет.
Пусть дорабатывают свои снаряды, мне не страшно.
А вот regexp'ы на URI - как раз одни переживания - а вдруг кто-нибудь узнает :).
После
2-х RBL zen.spamhaus.org, psbl.surriel.com,
проверки helo_name, client_name на regexp, - динамические адреса
greylisting всех unknown клиентов
и обычных проверок на RFC
отключения "плохих" стран
SpamAssassin остается практически без работы
у меня срабатывания идут в основном за счет DCC, Pyzor, Razor, SPF - то есть внешних модулей.
и их очень мало. При чем нередко эти срабатывания ложные - вирусы, взломы и т.д. Одноклассники :)
То, что пролезает все-таки - это 0,5-1% от всей почты.
И если есть эффективный способ удалить этот спам, без ложных срабатываний, и таким методом, который не потребует постоянной корректировки, то я готов его применить.
Если я его обнаружу - то обязательно поделюсь и не буду скрывать чтобы кто-то вдруг не узнал :)
Это ОЧЕНЬ хороший показатель. А у Вас порог стоит по умолчанию - 5? В amavisd-new стоит 6.31 или у Вас выше?
Ну а насчет RBL по хостам это пример моей лени. Я вот поставил в cron
и правила обновляются. Если написать правило, которое надо будет менять - придется постоянно анализировать СПАМ, и самому работать кроном :)
А вот RBL - есть люди, которые его обновляют. Почему бы не отдать эту работу им :).
Некоторые вообще не хотят работать и отдают все на откуп zen.spamhaus.org.
По поводу пула адресов - видимо, мы про разное говорим.
Вам не попадаламсь реклама про абузо-устойчивый хостинг?
То бишь реклама для спамеров - хоститесь у нас, отправляйте спам со ссылками на сайт нашего хостинга, мы Вас не отключим.
Есть такие RBL, которые такие хосты abuse заносят в свой список. Это НЕ почтовые сервера. Вот по ним и предлагаю проверять.
Есть еще вот такая заметка - http://www.spamhaus.org/effective_filtering.html
раздел 2nd Stage - именно это я и предлагаю.
Что-то не понял только, как его включить в spamassassin.
Философия
Согласен, набору в смешанной кодировке можно присваивать половину требуемого уровня спамности. С грейлистами и SPF не все так однозначано, это уже обсуждалось не нами :) В этой связи очень полезный ресурс, который уже подсказали: http://www.spamassassin.tu2.ru/index.php Только в правилах там не нужно писать заглавные буквы в кириллице, а то он для них не генерирует regexp.
Э... а можно поподробней, как именно их проверять?
Порог 10 и веса многие переписаны по-своему. Еще раз говорю - у нас ОЧЕНЬ важно не допустить ложных срабатываний - поэтому действуем осторожно и избирательно - согласен больше ручной работы.
Вот это было бы очень полезно! Я действительно сначала не правильно понял.
от Философа - технарю :)
SPF предлагается использовать в основном для отсекания "умных" спамеров, которые пишут письма от тебя к тебе, то есть подставляют в поле From адрес пользователя Вашего сервера. Проверка SPF с этим замечательно справляется.
greylist используется для тех клиентов, у которых имя сервера не проходит проверки обратного преобразования IP в имя клиента - наиболее вероятный спам, за исключением админов с кривыми руками или же падения обратной зоны. Но таких у меня 5-7, их можно в whitelist. Остальные отсекаются.
Такое предложение я видел только здесь, остальные действительно не подходят.
По поводу RBL - надо сделать
и тогда проверка включится, только у меня стоит skip_rbl = 1
поэтому я не проверял. Надо этим заняться. Если сделаете - напишите.
А насчет regexp helo_name - я могу Вам предлодить только для postfix. То есть делается это ДО spamassassin.
Если такой вариант Вам подходит - прочитайте внимательно ветку
http://www.gentoo.ru/node/9827#comment-94998
http://www.gentoo.ru/node/9827#comment-95444
там есть некоторые ответы.
После такой проверки отсекается ПОЛОВИНА почты до получения DATA - экономия трафика и загрузки spamassassin.
У метода http://www.spamassassin.tu2.ru/index.php есть недостатки - необходимо вести 3 кодировки KOI8-R, WIN1251, UTF-8.
лучше все-таки сделать normalize_charset = 1.
Да и на русском писать ИМХО лучше.
Надеюсь эту тему добьем.
Даешь русские правила и свой канал update!!
Вы же технарь, а не философ - давайте вместе разберемся :)
Итого (прошло пол-года)
Ага, спасибо за подсказку. Работает изумительно, все спам-ссылки в теле письма отлавливает. Весом управляем в local.cf
Изначально по смыслу нашего спора могу сказать. Что практика ловить спам по содержимому письма показала свою высокую эффективность. То, что раньше пробивалось спамерами через bayes-фильтр: их причуды с заменой кириллических букв на латиницу в словах, заменой цифр на буквы в номерах телефонов и прочее - все теперь под нашим чутким контролем. :) Потихоньку добавляя и дорабатывая правила я с вашей помощью не ухудшил показатели по ложным срабатываниям и повысил отсев спам-писем примерно в 10 раз.
Нужно понимать, что до анализа содержимого письма необходимо проводить все разумные мероприятия по убиванию спамеров на этапе коннекта.
Как и прежде пишу, что local.cf публиковать не хочу, т.к. там много такого, что поможет спамерам обойти эти правила, а гонку вооружений "снаряд-броня" мне вести не хочется. :)
Всем удачи!
:)
Причём как показывает практика: броня давно и монотонно проигрывает. :)
Что, впрочем, не является поводом к полному отказу от неё.
:wq
--
Live free or die
Люди!
Давайте не будем распылять внимание по разным веткам...
Создадим себе отдельную уютною веточку, повесим в корне ссылки на темы, где оно упоминалось. И поговорим... :)
Кстати, тут товарищи подсказывают (указывают на существование сервисов типа URIBL Service Providers). Рекомендуют multi.surbl.org и black.uribl.com (честно скажу, сам пока не читал).
Будем пробовать? :)
:wq
--
Live free or die
Двумя руками ЗА
Пробовать URIBL обязательно будем.
Наконец разобрался как их включить в SpamAssassin:
в файле /etc/spamassassin/init.pre
надо убрать комментарий.
Плагин этот хорошо написан, запросы идут асинхронно, то есть делаются все запросы, а потом пока идут остальные тесты собираются ответы.
По умолчанию таймаут 15 секунд, который может быть отрезан до 7 (смотрите perldoc Mail::SpamAssassin::Conf)
rbl_timeout 15 3
Проверяются следующие списки:
bl.open-whois.org тоже хорошо проверяет - открытые прокси, всякие нехорошие регистраторы и т.д.
SURBL позволяет сделать локальное зеркало, чтобы не гонять трафик http://www.surbl.org/datafeed/
С начала марта 2009 SURBL будет приниматься запросы только к multi.surbl.org, остальные работать не будут - http://wiki.apache.org/spamassassin/SURBL
Сразу напишу ограничения:
sbl.spamhaus.org - 300К
multi.uribl.com - 500К
multi.surbl.org - 250К
в сутки.
Чем эти ограничения отличны от RBL - проверяется только почта, которая уже прошла все проверки MTA. У меня приходит 500 писем в день, так что не страшно.
Вот хорошая ссылка на списки - http://spamlinks.net/filter-dnsbl-lists.htm
очень интересно.
Таким образом, Second Stage в борьбе со СПАМом можно считать включенной.
Теперь надо посмотреть, как сработает и задрать scores.
Кстати, этот плагин позволяет добавлять и свои списки RBL.
Теперь на очереди будет настройка Spamtrap - как подсказывают товарищи есть вариант с прокси-сервером для любого MTA и policy daemon для postfix.
Смотрю в сторону mail-filter/policyd
А может сначала?..
Командир, ты не прав :)
Не уподобляйся сам знаешь кому ;)
Я бы настоятельно рекомендовал сначала составить собственное мнение на предмет области применимости фичи и проверить применимость данных условий к твоему частному случаю.
Например: есть злобный спаммер. Попыток отправления [например] на адрес yourdomain@yourdomain.zone в сутки - 20, общее число сессий на твой почтовый сервер в сутки - 100. ИМХО скорее имеет смысл.
Но при соотношении 10/10 целесообразность, как бы это выразиться, несколько менее очевидна.
ИМХО фича скорее всего имеет смысл в ситуации, когда у тебя несколько доменов, причём реальные почтовые адреса представлены не во всех.
Хотя, ещё необходимо учитывать параметр адаптивности спаммеров.
:wq
--
Live free or die
Затрудняюсь с ответом
Затрудняюсь с ответом сразу.
Пока приведу статистику сервера за прошлую неделю с пон. до пон.
и настройки postfix:
Тут нужно подумать, сопоставить статистику и расставить все по местам, как в случае с RBL :)
А также найти наиболее подходящее место для ловушки.
Предварительно я думаю, что ее можно ставить после локальных проверок (без обращения в сеть) поскольку, что проверить
regexp, что записать в mysql по-моему одинаково, только mysql расти начнет.
Еще нужна статистика попыток отправления на адрес, как Вы говорите.
Можно сделать более гибкий вариант - вначале соединения (в точке подключения ловушки) увеличиваем счетчик подключений для IP (подсети). Если счетчк стал большим - выкидываем.
Ставим проверку reject_unlisted_recipient в самый конец, как говорит Avari.
А после этой проверки уменьшаем счетчик на единицу.
Таким образом, у всех кто не дошел до этого момента, счетчик будет расти. Кто прошел, счетчик будет нулевой.
У этого метода есть плюс - не прошел ЛЮБУЮ проверку - больше не пройдешь.
И минус - попал твой клиент в zen - потом неделю не вылезет из бана.
Естественно, такую базу надо чистить раз в неделю или в месяц.
Но думаю, если идею отшлифовать, можно ее использовать.
Например, увеличивать счетчик на единицу, а уменьшать на 2. И большие минусы не чистить - это whitelist.
Такой вариант не требует почтового ящика ловушки.
Что Вы на это скажете?
В таблицу заносим
Cron:
раз в день
delete from blacklist where count=1;
раз в неделю
delete from blacklist where count between 0 and 10;
раз в месяц
Я вот подумал, для virtual hosting как у меня
reject_unauth_destination - 1 обращение к mysql и ничего, живет.
так что ставим ловушку сразу после permit.
Добавлено.
Проверил на статистике:
Первое число - количество хостов, второе - количество отказов за неделю для каждого из этих хостов.
Таким образом, всего хостов, которым отказано = 27412
Хостов, которым отказов меньше 10 = 22995
То есть, в среднем в базе 4417 хостов + 300, от которых я все время получаю + 22995/7=3000 (в среднем в день не успел удалить)
Всего не более 8000.
Общее количество отказов = 251520
Для хостов, которые я постоянно буду удалять (потому что количество отказов меньше 10) общее количество отказов = 69662 или 27,7%
То есть 75% отказов будет происходить минуя все остальные проверки.
По идее, это должно работать быстрее, в 4 раза меньше нагрузка на все сетевые проверки в том числе.
Кстати, число 10 тоже не случайно. 251520/27412 = 9,2 - среднее колчество отказов на 1 хост.
Вот такой анализ
Вот такой анализ получился:
check_count - установка счетчика. Если больше 10 - отказ.
set_count - счетчик уменьшаем на 2.
А эти не сработали ни разу.
reject_unauth_pipelining пусть будет на всякий случай.
Ну а эти
думаю сильно поредеют после 5 RBL.
Внутренняя почта за неделю составила 5284 сообщения. Эти сообщения не проходили никаких проверок
стоит в самом начале.
Таким образом, из внешнего мира было получено 1648 сообщений за неделю.
1648/(1648+251460) = 0,65%
То есть отфильтровалось 99,35% спама.
Из полученных 66 отловил SpamAssassin.
66/1648 = 4,0%
И примерно 70 (10 в день) просочилось, то есть еще 4%.
Вот такая статистика.
Конечно, если эту цифру размазать на всю почту (включая внутреннюю) получится 1%.
Сейчас у меня стоит в SA -2.5 для внутренней почты.
В связи с этим возникает вопрос.
Как отключить amavisd-new для внутренней почты?
Советуют что-то такое:
у меня стоит
Нашел.
http://www200.pair.com/mecham/spam/bypassing.html
Очень подробно написано как сделать BYPASS.
SASL отключается так
SASL отключается так:
То есть, авторизованные пользователи проверку SpamAssassin пропускают.
Правда в лог стало сыпаться
на каждого клиента.
Также пропускают проверку my_networks. Так что эта проблема решена.
И еще.
Засуну-ка я
check_client_access regexp:/etc/postfix/amavisd.regexp
в самый конец проверок. А то лог сильно большой становится.
У меня permit есть только в одном месте -
check_helo_access hash:/etc/postfix/client_access
Надеюсь, они не станут мне спам присылать, а вирусы он проверит.
Теперь для чистоты
Теперь для чистоты эксперимента
Байес я почистил полностью, толку от него все равно было мало.
и настроил SIEVE для dovecot.
Раньше сюда валилась вся входящая почта.
Теперь написал скрипт:
который выкидывает всю локальную почту (Нет "X-Spam-Flag").
Теперь буду заносить постоянных отправителей email[1-2-3...]
чтобы не мешались.
А то получать 1000 писем в день и искать там СПАМ мне надоело.
Завтра посмотрю, что туда накопится. Может папку сделаю для вероятного СПАМ (scores>5).
Кстати...
На таком объёме правильно настроенный и хорошо обученный Байес Thunderbird'а при стремящейся к нулю вероятности ложного срабатывания отфильтрует 940-980 писем (в предположении того, что полезных писем за указанный интервал - ~2-4).
:wq
--
Live free or die
А если наоборот?
Хех..
Если Вы внимательно читали - после фильтрации методами, предоставленными postfix режется 97% входящих сообщений.
Из тех 3%, что приходят пользователям, в моем частном случае 70% - внутренняя почта, которую я не хочу резать, поскольку САМ лично раздавал от нее пароли. Соответственно, проерки никакие эта почта не проходит.
Оставшаяся почта, которая приходит извне, составляет 0,6 процента от всего.
4% от этого остатка я режу с помощью content-filter, то есть spamassassin.
и еще 4% от этого остатка по моим личным наблюдениям является спамом.
Если посчитать этот не отрезанный спам ко всем входящим сообщениям - это будет 0,03%.
Если считать процент к фактически полученным пользователями сообщениями - 1%.
То есть из 1000 сообщений мне нужно найти 10, которые СПАМ.
Ситуация обратная к описанной Вами.
Так что пусть
курит в сторонке.
Не отрезанный спам к входящим сообщениям извне - 4%.
После того, как я еще исключу из своего рассмотрения постоянно мне пишущих адресатов, процент вырастет в несколько раз.
Согласитесь, удобнее искать 10-20 из 100, чем 1.
Но тут мы выходим несколько
Но тут мы выходим несколько за рамки настройки собственно почтовой системы.
Про инфраструктуру же правильнее сочинять на wiki (можно попробовать организовать уголок здесь).
Честно обещаю на следующей неделе постараться наваять там статью про SSL.
:wq
--
Live free or die
Про SSL я бы тоже почитал
Про SSL я бы тоже почитал.
Мне вот кажется несколько неудобным организовывать уголок на форуме. Древовидная форма как-то коряво отображает - перемешивает ответы даже в этой теме (посмотрите сообщение ниже - и угадайте к чему оно относится :). Потом я не топик-стартер в этой теме, чтобы вносить изменения вверху. И не знаю способ, как склеить темы. А еще я допускал опечатки несколько раз. Так вот, их нельзя исправить, если кто-то ответил на пост. Если же удается исправить не сразу - ответ перемешивается приклеивается не к месту.
Иногда даже хочется решить вопрос в отдельной теме, а потом результат записать на чистую сюда.
вики действительно было бы удобнее.
А как туда писать?
Там даже есть тема http://ru.gentoo-wiki.com/wiki/Spamassassin
Как туда написать?
.
Я честно обещаю :)))
Именно поэтому я предпочитаю плоское отображение.
Это работа для модераторов :) Нефиг им прохлаждаться :)))
Наверное сначала надо зарегистрироваться.
Правда, у wiki есть свои недостатки...
ЗЫ: В качестве одного из (но безусловно не главного) способа общения можно использовать местный jabber.
:wq
--
Live free or die
оп
Ага, всё бросили, побежали исправлять (-%Е
Уже не надо.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Првожу улучшенный SIEVE как и
Првожу улучшенный SIEVE как и обещал.
Сразу поясню его задачу.
В postfix сделано bcc всех писем, которые приходят на сервер на
На многих форумах встречал вопрос как оттуда выкинуть локальную почту, то есть отправитель - мы.
На SIEVE это легко написать.
Я же хочу выкинуть не только локальную почту, но и всю бесполезную для анализа СПАМа и настройки spamassassin.
Отрубается вся почта, которая не проверялась SA и разные рассылки, которые приходят каждый день и мешают анализу.
В конце оставил комментарий, т.к. еще не решил, как лучше почту разбивать.
Мне больше нравится идея, опять же, только для анализа СПАМа раскидывать почту по разным тестам.
Например, у меня есть тесты:
LOCAL_LANG_RU - русский язык, соответственно нет теста - язык не русский.
LOCAL_COUNTRY_US - страна США
URIBL_* - в письме ссылка на сайт спамеров
LOCAL_RUSLAT - смешанная кодировка
scores>5 - тот, что я привел.
На тесты SIEVE можно натравить так:
Написать мне это очень помогло http://wiki.fastmail.fm/index.php?title=MichaelKloseSieveScript
?
А по false positives какая статистика?
:wq
--
Live free or die
Трудно сказать
По ложным срабатываниям точную статистику посчитать трудно. Обращаются с жалобами наши получатели, что им кто-то послал и не дошло в среднем раз в неделю (для конторы с 300 адресами-получателями). В основном из-за того, что smtp-сервера отправителей попадают в блэклисты. Уже на многие блэк-листы снизил вес спамности в local.cf из-за этого.