Документация по ОС FreeBSD Среда, 08.05.2024, 17:24
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Mail

yandex spamooborona [2008]
Не подумайте, что реклама....
Была поставлена задача найти спаморезалку хорошую, при этом цена не имела особого значения. До этого работал dspam - отличная штука, но требует обучения - в этом его минус. Ленивые пользователи обучать его не хотели.
В итоге решил попробовать спамоборону от яндекса. Результаты работы будут ниже, а пока по установке.
Надо скачать дистрибутив с http://so.yandex.ru/. Там есть пробная версия на 30 дней. Для получения пробной версии надо зарегиться - поставить спамоборону - ответить на необходимые вопросы - выслать конф файлы и получить ключ на 30 дней.
Итак, установка.
Просто качаем файл для нашей оси и ставим. Там есть установочный скрипт с подобием гуя. В качестве метода интеграции с почтовой системой выбираем smtp-proxy. Если выбрать exim, то они предлагают пересобрать экзим со своим файлецом - мне такая затея не понравилась сразу - даж не стал разбираться.....
Косяки на этом этапе следующие:
- локальные домены надо писать сразу все. После получения ключа список изменять НЕЛЬЗЯ!.
- ключ и конф фай присылается иногда с добавленим ^M в конце строк. естественно, при этом ничего не работает. Открываем файл присланного ключа на редактирование в мс (другие редакторы не показывают этот косяк) и стираем виндовые хрени оттуда.

Инсталлер сам добавляет везде свои записи, не особо нас об этом спрашивая. После установки в rc.d появляются 2 скрипта: sp-daemon.sh* и sp-proxy.sh*. При перезагрузке мы обнаруживаем, что сцуко работает от рута..
Для исправления переносим эти скрипты в /var/yamail, а в rc.d создаем свой скрипт
[mx1:/usr/local/etc]#cat rc.d/so-proxy.sh
#!/bin/sh

# PROVIDE: soproxy
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: nojail shutdown

# Подключаем доп. функции
. /etc/rc.subr

# Имя скрипта
name="soproxy"

# Значение _enable из rc.conf
rcvar=`set_rcvar`
# Старт -стоп функции
start_cmd="${name}_start"
restart_cmd="${name}_restart"
stop_cmd="${name}_stop"

# Ставим NO, если в rc.conf не задан параметр soproxy_enable="YES"
eval "${rcvar}=\${${rcvar}:-"NO"}"

soproxy_restart()
{
 echo "restarting sp-proxy"

 # Запуск спамобороны от имени souser
 /var/yamail/sp-daemon.sh stop
 /var/yamail/sp-proxy.sh stop
 /usr/sbin/chown souser:souser /var/yamail/*
 /bin/chmod 775 /var/run
 /usr/bin/chgrp souser /var/run
 /usr/sbin/chown souser /var/spool/spamooborona
 /usr/sbin/chown souser /var/spool/spamooborona/*
 /bin/rm /var/run/sp-*
 /usr/bin/su souser -c "/var/yamail/sp-daemon.sh start"
 /usr/bin/su souser -c "/var/yamail/sp-proxy.sh start"

 echo "sp-proxy restarted"
}

soproxy_start()
{
 echo "Starting sp-proxy"

 # Запуск спамобороны от имени souser
 /var/yamail/sp-daemon.sh stop
 /var/yamail/sp-proxy.sh stop
 /usr/sbin/chown souser:souser /var/yamail/*
 /bin/chmod 775 /var/run
 /usr/bin/chgrp souser /var/run
 /usr/sbin/chown souser /var/spool/spamooborona
 /usr/sbin/chown souser /var/spool/spamooborona/*
 /bin/rm /var/run/sp-*
 /usr/bin/su souser -c "/var/yamail/sp-daemon.sh start"
 /usr/bin/su souser -c "/var/yamail/sp-proxy.sh start"

 echo "sp-proxy started"
}

soproxy_stop()
{
 echo "Starting sp-proxy"

 # Запуск спамобороны от имени souser
 /var/yamail/sp-daemon.sh stop
 /var/yamail/sp-proxy.sh stop
 echo "sp-proxy stoped"
}

# Загружаем переменные из rc.conf
load_rc_config $name
run_rc_command "$1"
[mx1:/usr/local/etc]# 

При этом не забываем добавить пользователя souser c домашкой /var/yamail. У пользователя обязательно должен быть шел, а пароль лучше закоментить.
Добавляем в rc.conf
soproxy_enable="YES"

для старта нашего свежеиспеченного скрипта.
Запускаем его от рута и проверяем, что получилось
[mx1:/usr/local/etc]#rc.d/so-proxy.sh start
[mx1:/usr/local/etc]#ps -aux | grep sp-
souser 6697 0,0 0,0 1736 1172 p0 I 11:49 
 0:00,00 /bin/sh /var/yamail/sp-daemon.sh start
souser 6698 0,0 0,0 1736 1176 p0 I 11:49 
 0:00,00 /bin/sh /var/yamail/sp-daemon.sh start
souser 6699 0,0 1,4 85148 43296 p0 S 11:49 
 2:08,81 /usr/local/sbin/sp-daemon -f -m X-Spam
 Flag -p /var/run/sp-daemon.sock -i/usr/local/etc/
souser 6706 0,0 0,0 1732 1164 p0 I 11:49 
 0:00,00 /bin/sh /var/yamail/sp-proxy.sh start
souser 6707 0,0 0,0 1732 1172 p0 I 11:49 
 0:00,00 /bin/sh /var/yamail/sp-proxy.sh start
souser 6708 0,0 0,1 4652 2716 p0 S 11:49 
 0:47,61 /usr/local/sbin/sp-proxy -f -l 1125 -p
var/run/sp-daemon.sock
root 20449 0,0 0,0 1600 948 p0 S+ 18:39 
 0:00,00 grep sp-
[mx1:/usr/local/etc]# 

Теперь все работает от непривелегированного пользователя.
не забываем менять владельца файлов на нового пользователя
chown souser:souser /var/yamail/*

Далее эту хрень надо подружить с почтовиком. В моем случае - exim.
Перед роутером локальной доставки добавляем
684 #проверяем на спам
685 spam_yandex_route:
686 driver = manualroute
687 transport = spamoborona
688 domains = +local_domains
689 ## no_verify
690 condition = ${if eq {$interface_port}{25}{yes}{no}}
691 #condition=${if !eq {$received_protocol}{local}}"
692 ## address_test = false
693 route_data = localhost
694 self = send

В транспортах описываем транспорт
827 spamoborona:
828 driver = smtp
829 allow_localhost = true
830 port = 1125

И в самом начале аклей добавляем
360 # принимаем с локалхоста без проверки, т.к. с него приходят
361 # проверенные письма с спамобороны, а она не пишет отправителя
362 accept hosts = localhost:127.0.0.1

Теперь логика работы.
Если письмо доходит до роутера локальной доставки - это локальное письмо. Соответственно,перед локальной доставкой мы его пересылаем на проверку на локалхост на порт 1125 в спамоборону. Там проверяется на спам и возвращается на локалхост на порт 1025 в экзим. Для него мы не проверяем акли и смотрим, что пришло не с 25 порта в роутерах - значит, письмо от спамобороны - доставляем локально.
В заголовках появляется
X-Spam-Yversion: Spamooborona-2.3

Кстати,не забываем в exim указывать, чтоб слушал 1025 порт на локахосте.
local_interfaces = <; [127.0.0.1]:1025; [127.0.0.1]:25; [ваши адреса]

Тестированию поддается так: убираем роутер спамобороны из экзима и заходим телнетом на 1125 порт (это спамоборона) и средствами smtp пытаемся отправить себе письмо. Если все ок, письмо проходит проверку в спамобороне и передается в экзим на 1025 порт для доставки. Если с этим все ок и вы получили письмо, включаем роутер, и экзим начинает перенаправлять все письма на спамоборону.
Логи читаем так:
[mx1:/usr/local/etc]#cat /etc/syslog.conf
*.* /var/log/all.log
.....

Чтоб нормально обновлялся правим /etc/crontab до такого
##-- Spamooborona cron entries start
10 5 * * * souser /usr/local/etc/spamooborona/scripts/cron_spamstat
*/20 * * * * souser /usr/bin/lockf -st 0 /var/tmp/rsync.so-rules.lock \
 /usr/local/etc/spamooborona/scripts/cron_rul
00 09 * * * souser /usr/local/etc/spamooborona/scripts/cron_notify

Штука имеет гуй для настройки
/usr/local/etc/spamooborona/adm_so 

или можно покопаться вручную в /usr/local/etc/spamooborona или /var/yamail.
Кстати через гую рекомендую настроить глобальную политику обработки спама - я просто помечаю в теме.
Так же есть статистика (не забываем ее включить и создать под нее папку)
[mx1:/usr/local/etc]#spamooborona/scripts/statcalc.sh summary at 2008-07-15
08-07-15 00:00:05 - 08-07-16 0
Summary:
* 1 (0,00%)
* 93 (0,44%) DLVR
* 16732 (79,04%) SPAM
* 4341 (20,51%) Mail
* 1 (0,00%) 17:40:03
* 21168 total

[mx1:/usr/local/etc]#

Интересно реализован механазм вайтлистинга. При добавлении в вайтлист письмо все равно проходит через спамобороу и ему присуждается спамовый коэффициент.
Реализованы разные алгоритмы на обработку белых листов, в которых просто домен и белых листов, в которых пользователь@домен получатель@домен.
если в белом списке найден домен - то минус 3 балла к спамовому весу
если связка получатель - отправитель - то минус 10 баллов
правила регулируются тут
cat /var/yamail/wl.rul

rule FROM_IN_WL R_ALG -10
describe whitelist

rule FROM_IN_PERSONAL_WL R_ALG -10
describe personal whitelist

rule DOMAIN_IN_WL R_ALG -3
describe domain whitelisted

rule DOMAIN_IN_PERSONAL_WL R_ALG -5
describe domain whitelisted personally

По поводу вайтлистинга. У них разные алгоритмы на обработку белых листов, в которых прото домен и белых листов, в которых пользователь@домен получатель@домен.
если в белом списке найден домен - то минус 3 балла к спамовому весу
если связка получатель - отправитель - то минус 10 баллов
правила регулируются тут
cat /var/yamail/wl.rul

rule FROM_IN_WL R_ALG -10
describe whitelist

rule FROM_IN_PERSONAL_WL R_ALG -10
describe personal whitelist

rule DOMAIN_IN_WL R_ALG -3
describe domain whitelisted

rule DOMAIN_IN_PERSONAL_WL R_ALG -5
describe domain whitelisted personally

Я держу вайтлисты в мускуле сразу на спамоборону и акли. Выглядит это так:
В роутерах
#проверяем на спам
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, но это из-за неправильно настроенных белых листов. В общем, все довольны и счастливы. Процент ложного срабатывания - пока минимальный.
Но сразу опишусь, что штука эта комерческая и как она работает внутри - непонятно. Поэтой причине если есть возможность обойтись без нее, я бы посоветовал ее не ставить.



Источник: http://www.lissyara.su/?id=1720
Категория: Mail | Добавил: oleg (07.08.2008) | Автор: Al
Просмотров: 1187 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024