Не подумайте, что реклама.... Была поставлена задача найти спаморезалку хорошую, при этом цена не имела особого значения. До этого работал dspam - отличная штука, но требует обучения - в этом его минус. Ленивые пользователи обучать его не хотели. В итоге решил попробовать спамоборону от яндекса. Результаты работы будут ниже, а пока по установке. Надо скачать дистрибутив с http://so.yandex.ru/. Там есть пробная версия на 30 дней. Для получения пробной версии надо зарегиться - поставить спамоборону - ответить на необходимые вопросы - выслать конф файлы и получить ключ на 30 дней. Итак, установка. Просто качаем файл для нашей оси и ставим. Там есть установочный скрипт с подобием гуя. В качестве метода интеграции с почтовой системой выбираем smtp-proxy. Если выбрать exim, то они предлагают пересобрать экзим со своим файлецом - мне такая затея не понравилась сразу - даж не стал разбираться..... Косяки на этом этапе следующие: - локальные домены надо писать сразу все. После получения ключа список изменять НЕЛЬЗЯ!. - ключ и конф фай присылается иногда с добавленим ^M в конце строк. естественно, при этом ничего не работает. Открываем файл присланного ключа на редактирование в мс (другие редакторы не показывают этот косяк) и стираем виндовые хрени оттуда.
Инсталлер сам добавляет везде свои записи, не особо нас об этом спрашивая. После установки в rc.d появляются 2 скрипта: sp-daemon.sh* и sp-proxy.sh*. При перезагрузке мы обнаруживаем, что сцуко работает от рута.. Для исправления переносим эти скрипты в /var/yamail, а в rc.d создаем свой скрипт
При этом не забываем добавить пользователя souser c домашкой /var/yamail. У пользователя обязательно должен быть шел, а пароль лучше закоментить. Добавляем в rc.conf
soproxy_enable="YES"
для старта нашего свежеиспеченного скрипта. Запускаем его от рута и проверяем, что получилось
360 # принимаем с локалхоста без проверки, т.к. с него приходят
361 # проверенные письма с спамобороны, а она не пишет отправителя
362 accept hosts = localhost:127.0.0.1
Теперь логика работы. Если письмо доходит до роутера локальной доставки - это локальное письмо. Соответственно,перед локальной доставкой мы его пересылаем на проверку на локалхост на порт 1125 в спамоборону. Там проверяется на спам и возвращается на локалхост на порт 1025 в экзим. Для него мы не проверяем акли и смотрим, что пришло не с 25 порта в роутерах - значит, письмо от спамобороны - доставляем локально. В заголовках появляется
X-Spam-Yversion: Spamooborona-2.3
Кстати,не забываем в exim указывать, чтоб слушал 1025 порт на локахосте.
Тестированию поддается так: убираем роутер спамобороны из экзима и заходим телнетом на 1125 порт (это спамоборона) и средствами smtp пытаемся отправить себе письмо. Если все ок, письмо проходит проверку в спамобороне и передается в экзим на 1025 порт для доставки. Если с этим все ок и вы получили письмо, включаем роутер, и экзим начинает перенаправлять все письма на спамоборону. Логи читаем так:
или можно покопаться вручную в /usr/local/etc/spamooborona или /var/yamail. Кстати через гую рекомендую настроить глобальную политику обработки спама - я просто помечаю в теме. Так же есть статистика (не забываем ее включить и создать под нее папку)
Интересно реализован механазм вайтлистинга. При добавлении в вайтлист письмо все равно проходит через спамобороу и ему присуждается спамовый коэффициент. Реализованы разные алгоритмы на обработку белых листов, в которых просто домен и белых листов, в которых пользователь@домен получатель@домен. если в белом списке найден домен - то минус 3 балла к спамовому весу если связка получатель - отправитель - то минус 10 баллов правила регулируются тут
По поводу вайтлистинга. У них разные алгоритмы на обработку белых листов, в которых прото домен и белых листов, в которых пользователь@домен получатель@домен. если в белом списке найден домен - то минус 3 балла к спамовому весу если связка получатель - отправитель - то минус 10 баллов правила регулируются тут
Я держу вайтлисты в мускуле сразу на спамоборону и акли. Выглядит это так: В роутерах
#проверяем на спам
spam_yandex_route:
driver = manualroute
transport = spamoborona
domains = +local_domains
condition = ${if and {{eq {$interface_port}{25}} \
{!match {$h_X-WHITELISTED:}{$sender_address}} }}
route_data = localhost
self = send
Это при условии, что существуют вайтлисты в аклях и при попадании в вайтлист добавляется заголовок
X-WHITELISTED: $sender_address
Пробовал делать кондишен с выборкой из мускуля, но че-т не получилось, чтоб было два условия, при этом одно из мускуля. В аклях, кстати,тож не получилось. Поэтому вайтлистинг в аклях выглядит так:
# пропускаем падонкав, не умеющих писать отправителя.
accept set acl_m1 = ${lookup mysql{SELECT `white_senders` \
FROM `white_senders` WHERE `active`='1' \
AND `white_senders`='$sender_address'}}
condition = ${if eq {$acl_m1} {$sender_address}{yes}{no}}
hosts = ${lookup mysql{SELECT `hosts` \
FROM `white_senders` WHERE `active`='1' \
AND `white_senders`='$sender_address'}}
add_header = X-WHITELISTED: $sender_address
logwrite = !message sended by $sender_address - \
[$sender_host_address] - white sender!
Качество работы устроило вполне. Пока из косяков - забраковал 2 daily, но это из-за неправильно настроенных белых листов. В общем, все довольны и счастливы. Процент ложного срабатывания - пока минимальный. Но сразу опишусь, что штука эта комерческая и как она работает внутри - непонятно. Поэтой причине если есть возможность обойтись без нее, я бы посоветовал ее не ставить.