Была поставлена задача найти спаморезалку хорошую, при этом цена не имела особого значения. До этого работал 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]#
Добавляем в 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/*
Перед роутером локальной доставки добавляем
Код: Выделить всё
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
Код: Выделить всё
local_interfaces = <; [127.0.0.1]:1025; [127.0.0.1]:25; [ваши адреса]
Логи читаем так:
Код: Выделить всё
[mx1:/usr/local/etc]#cat /etc/syslog.conf
*.* /var/log/all.log
.....
Код: Выделить всё
##-- 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
Кстати через гую рекомендую настроить глобальную политику обработки спама - я просто помечаю в теме.
Так же есть статистика (не забываем ее включить и создать под нее папку)
Код: Выделить всё
[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
Мнения - в студию!