Страница 1 из 3
Dspam в качестве демона
Добавлено: 2008-05-23 9:51:23
Al
Суть в следующем: если dspam каждый раз при проверке на спам письма вызывать как бинарник, то это несколько тормозит процесс и при большом количестве спама мускуль отказывается принимать новые подключения. Думается,что проблема решится запуском dspam как процесс. Таким образом письма на проверку будут передаваться не через бинарник, а через сокет или TCP.
Для передачи писем на проверку используется протокол LMTP. Он очень похож на SMTP и основные команды те же.
Начнем с dspam.conf. Конфиг не целиком, а то, что нас интересует с точки зрения перехода на LMTP. Настройка dspam расписана в статье
http://www.lissyara.su/?id=1301
Код: Выделить всё
# Агент локальной доставки. Таким образом мы возвращаем проверенные на спам письма. Для доверенных пользователей и недоверенных.
TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned"
UntrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned"
## SOCKET. через него передается почта на проверку. Его и указываем в конфе почтовика.
ServerDomainSocketPath "/var/run/dspam.sock"
ClientHost "/var/run/dspam.sock"
# Если хотим посмотреть работу протокола, то раскоментируем эти строки. Как результат, dspam ожидает письмо на проверку не через сокет, а на #локалхосте на порту 24. Идем туда телнетом и пробуем отправить письма. Письмо будет проверено на спам и возвращено способом #TrustedDeliveryAgent. Если работает exim, то письма должно перейти на почтовик и доставиться адресату.
#DeliveryHost 127.0.0.1
#DeliveryPort 24
#DeliveryIdent localhost
#DeliveryProto LMTP
# LMTP без аутентификации. Судя мо манам, экзим не умеет LMTP аутентификацию, да и не надо..
ServerMode auto
# Включаем доставку через TrustedDeliveryAgent, когда принимает по LMTP. Точнее, добавляем ключи. Без них письмо не вернется обратно.
ServerParameters "--deliver=innocent -d %u"
# DEBUG. Если надо.
#DebugOpt: process, classify, spam, fp, inoculation, corpus
#Debug user
конфиг exim
Код: Выделить всё
routers:
dspam_spamscan_router:
-transport = dspam_spamcheck_transport
+transport = lmtp
transports:
lmtp:
driver = lmtp
socket = /var/run/dspam.sock
batch_max = 20
user = mailnull
Вот,собственно,и все.
Да,кстати,не забываем собирать dspam с поддержкой запуска в качестве процесса.
На статью времени нет, так что кто хотит, может и до статьи добомбить.
Предложения-дополнения в студию!
Re: Dspam в качестве демона
Добавлено: 2008-05-23 13:17:30
serge
Al писал(а):при большом количестве спама мускуль отказывается принимать новые подключения
А сколько это в цифрах?
Т.к., например, при 20000 в сутки вызов бинарника совершенно не влияет на работу сервера.
Re: Dspam в качестве демона
Добавлено: 2008-05-23 13:33:19
Al
дело не в нагрузке в сутки, а в единовременной нагрузке. Как только у мускуля заканчиваются разрешенные конекты(а каждый вызов бинарника - конект), встает все, что с ним работает, а при высокой нагрузке на почту большая часть этих конектов -dspam. У меня вставал при 80-100 тыс. в сутки. Да и запуск демоном как-то правильнее. Разгружает ОС, например. Ведь при каждом вызове бинарника под него выделяется память, создаются дискрипторы и т.д., а процессом висит и никого не трогает + можно задать максимальное кол-во конектов к мускулю, тем самым распределяя его ресурсы между приложениями.
Re: Dspam в качестве демона
Добавлено: 2008-05-23 13:34:14
Alex Keda
фря - не линукс и не винда.
тут с форками намного проще - можно не париться.
а конекты... my.cnf ещё никто не отменял

))
Re: Dspam в качестве демона
Добавлено: 2008-05-23 13:46:29
serge
В любом случае заметка про демона интересная. Но, имхо, для очень нагруженных почтовиков. Как столкнусь с таким, так сразу попробую

Re: Dspam в качестве демона
Добавлено: 2008-05-23 13:56:51
Al
ну,я думаю, хуже не будет... Надо еще баги поискать.
Re: Dspam в качестве демона
Добавлено: 2008-05-25 14:47:22
Qwrta administrator
Судя по грейлисту у меня получается за 2 недели около 7 000 000 записей в базе делим на 14 дней получаем 500 000 в среднем за день Dspam умирал при потоке в 100 000 когда был настроен не как демон за день было тоскливо Платные фильтры тоже не выдерживали такой нагрузки После настройка Dspam в качестве демона нагрузка на сервер резко упала + повысилась производительность Сервера. )) Спасибо Автору за наводку ))
Re: Dspam в качестве демона
Добавлено: 2008-09-01 11:19:50
dserga
Возникает переодически проблем при использовании dspam в качестве демона. При обработке письма dspam не возвращает его в систему, а процесс зависает как бы. Далее процесс зависания развивается, и в течение 6 часов происходит зависание всех возможных инстансов dspam в памяти и встает уже очередь exima. Письма копяться в очереди не не обрабатываются. Приходится перезапускать сервер, чтобы все заработаело, так как зависшие процессы невозможно renice-ить или убить по -KILL, что мне напоминает винду, с ее неубиваемыми процессами. При этом в debug log dspam ничего не попадает, обнаружить на каком письме произошел завис, тоже сложно, так как нет сообщений об ошибках.
Есть какие-либо мысли по этому поводу?
Да, вот еще что. На сервере порядка 30 ящиков и около 10 алиасов. Сервер тур компании, поэтому в день приходит в среднем "нормальных" писем где-то около 700, отшивается спама до 100 000, кладеться в карантин около 600. Пользователи говорят, что после установки нового сервера (новые правила отсева + dspam) реальное количество прорвавшивося спама снизилось и теперь составляет не более 10% от общего количества писем в ящике пользователя.
Re: Dspam в качестве демона
Добавлено: 2008-09-29 15:31:52
maxt
После попытки отправить письмо выскакивает ошибка:
Код: Выделить всё
authentificator dspam_addspam_router: cannot find authentificator driver "accept"
Как с ошибкой бороться?
Re: Dspam в качестве демона
Добавлено: 2008-09-29 16:08:28
maxt
Взято из статьи про dspam:
Код: Выделить всё
dspam_addspam_router:
driver = accept
domains = +local_domains
local_part_prefix = spam-
transport = dspam_addspam_transport
dspam_notspam_router:
driver = accept
domains = +local_domains
local_part_prefix = notspam-
transport = dspam_notspam_transport
#DNSLOOKUP_ROUTER можно взять из конфы Лиссяры.
#SYSTEM/VIRTUAL_ALIASES_ROUTERS также можно взять оттуда.
dspam_spamscan_router:
driver = accept
domains = +local_domains
no_verify
condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
{!eq {$received_protocol}{local}} } {1}{0}}"
transport = dspam_spamcheck_transport
require_files = /usr/local/bin/dspam
address_test = false
local_delivery_spam_router:
driver = accept
domains = +local_domains
condition = ${if match{$h_X-DSPAM-Result:}{Spam}}
transport = local_delivery_spam_transport
no_more
#LOCAL_DELIVERY_ROUTER можно взять из конфы Лиссяры. Там это - dovecot_user.
Re: Dspam в качестве демона
Добавлено: 2009-02-26 23:25:30
Morty
ребят а с mysql51
dspam дружит / будет дружить ??
Re: Dspam в качестве демона
Добавлено: 2009-05-03 23:32:34
buryanov
Morty писал(а):ребят а с mysql51
dspam дружит / будет дружить ??
Правишь
Код: Выделить всё
[root@mx /usr/local/etc/exim/includes]# cat /usr/ports/mail/dspam-devel/Makefile |grep My
OPTIONS+= MYSQL50 "Use MySQL 5.0.x as back-end" off
OPTIONS+= MYSQL51 "Use MySQL 5.1.x as back-end" on
Re: Dspam в качестве демона
Добавлено: 2009-05-29 11:55:49
buryanov
И куда копать?
Код: Выделить всё
May 29 11:34:51 mx dspam[8585]: Daemon process starting
May 29 11:34:52 mx dspam[8585]: Creating local domain socket /var/run/dspam.sock
May 29 11:34:57 mx kernel: May 29 11:34:52 mx dspam[8585]: Creating local domain socket /var/run/dspam.sock
May 29 11:34:52 mx dspam[8585]: Daemon mode failed to start
May 29 11:34:57 mx kernel: May 29 11:34:52 mx dspam[8585]: Daemon mode failed to start
May 29 11:34:52 mx dspam[8585]: Daemon process exiting
Re: Dspam в качестве демона
Добавлено: 2009-09-01 9:39:44
savio
есть идея вынести dspam на отдельную машину с целью большей производительности.
вопрос в том, как прикрутить тогда exim к dspam?
Re: Dspam в качестве демона
Добавлено: 2009-10-13 22:33:29
gyurza2000
настраивал по статье, потом демонизировал как в первом посте - результат один, если запущен dspam - до MySQL никто достучаться не может (ни почта ни WEB сайт никто), только убиваю этот процесс - работа нормализуется
Re: Dspam в качестве демона
Добавлено: 2009-11-12 3:55:35
vladsol
Всем доброго времени суток!
Захотелось вот перейти с SA (уж очень ресурсов много потребляет) на Dspam.
Почтовый сервер обслуживает только один домен, пользователи - системные.
Прикрутить dspam к exim получилось, правда для проверки в конфигурации транспортов для "обучения" (спам\не спам) использовал опцию --user spam (завел такого пользователя).
dspam собирал без VIRTUAL_USERS.
Ошибок нету, письма идут, в логах вижу что фильтр работает.
Использую MySQL как бэкенд.
А вот теперь, собсно, вопросы...
Табличка dspam_stats (допустим) - как оказалось, для каждого пользователя-получателя создается своя статистика.
В dspam_signature_data также имеются записи для разных uid
То есть, получается, для каждого UID - свои токены и сигнатуры - это для каждого ящика придется отдельно производить обучение?
Это не очень удобно. Можно ли как-то сделать, чтобы все записи имели один UID ? Или же чтобы при проверке спам\не спам для получателя использовались сигнатуры не только с его uid а и от других тоже..?
Из конфигурации транспортов:
Код: Выделить всё
dspam_addspam_transport:
...
command = "/usr/local/bin/dspam --user spam --class=spam --source=error"
dspam_notspam_transport:
...
command = "/usr/local/bin/dspam --user spam --class=innocent --source=error --deliver=innocent %u"
...
dspam_spamcheck_transport:
...
command = /usr/local/bin/dspam --deliver=innocent --user spam -- %u
...
Re: Dspam в качестве демона
Добавлено: 2009-11-21 0:32:39
sheva.sv
Настраиваю Dspam по статье
http://www.lissyara.su/articles/freebsd ... n_to_exim/ и после команды
Код: Выделить всё
/usr/local/bin/dspam --debug --deliver=innocent --user antispam@domain.com -- %u < spam2
Вылазят ошибки на консоль
Код: Выделить всё
55233: [11/20/2009 23:08:16] Access denied for user 'dspam'@'localhost' (using password: YES)
55233: [11/20/2009 23:08:16] Unable to attach DSPAM context
55233: [11/20/2009 23:08:16] process_message returned error -2. delivering.
такой лог cat /var/log/dspam/dspam.debug
Код: Выделить всё
55233: [11/20/2009 23:08:16] No QuarantineAgent option found. Using standard quarantine.
55233: [11/20/2009 23:08:16] DSPAM Instance Startup
55233: [11/20/2009 23:08:16] input args: /usr/local/bin/dspam --debug --deliver=innocent --user antispam@domain -- %u
55233: [11/20/2009 23:08:16] pass-thru args: /usr/local/sbin/exim -oMr spam-scanned %u
55233: [11/20/2009 23:08:16] processing user antispam@domain
55233: [11/20/2009 23:08:16] uid = 0, euid = 0, gid = 0, egid = 0
55233: [11/20/2009 23:08:16] loading preferences for user antispam@domain
55233: [11/20/2009 23:08:16] default preferences empty. reverting to dspam.conf preferences.
55233: [11/20/2009 23:08:16] Loading preferences from dspam.conf
55233: [11/20/2009 23:08:16] using /var/db/dspam/opt-in/antispam@domain.dspam as path
55233: [11/20/2009 23:08:16] using /var/db/dspam/opt-out/antispam@domain.nodspam as path
55233: [11/20/2009 23:08:16] sedation level set to: 0
55233: [11/20/2009 23:08:16] _ds_init_storage() failed
55233: [11/20/2009 23:08:16] _ds_init_storage: mysql_init: unable to initialize handle to database
55233: [11/20/2009 23:08:16] delivering message
55233: [11/20/2009 23:08:16] Opening pipe to LDA: /usr/local/sbin/exim -oMr spam-scanned antispam@domain
55233: [11/20/2009 23:08:16] LDA returned success
55233: [11/20/2009 23:08:16] DSPAM Instance Shutdown. Exit Code: 0
В dspam.conf пробывал менять
на
Код: Выделить всё
MySQLServer /tmp/mysql.sock
#MySQLPort 3306
результат тот же.
В базу
заходит корректно.
Вот dspam.conf
Код: Выделить всё
Home /var/db/dspam
StorageDriver /usr/local/lib/libmysql_drv.so
TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned"
OnFail error
Trust root
Trust mail
Trust mailnull
TrainingMode teft
TestConditionalTraining on
Feature noise
Feature chained
Algorithm graham burton
PValue graham
Preference "spamAction=tag"
Preference "showFactors=on"
Preference "spamSubject=SPAM"
AllowOverride trainingMode
AllowOverride spamAction spamSubject
AllowOverride statisticalSedation
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride signatureLocation
AllowOverride showFactors
AllowOverride optIn optOut
AllowOverride whitelistThreshold
MySQLServer /tmp/mysql.sock
MySQLUser dspam
MySQLDb dspam
MySQLConnectionCache 1000
HashRecMax 98317
HashAutoExtend on
HashMaxExtents 0
HashExtentSize 49157
HashMaxSeek 100
HashConnectionCache 100
IgnoreHeader X-Spam-Status
IgnoreHeader X-Spam-Scanned
IgnoreHeader X-Virus-Scanner-Result
IgnoreHeader Date
IgnoreHeader Envelope-to
IgnoreHeader Delivery-date
IgnoreHeader Received
IgnoreHeader User-Agent
IgnoreHeader Content-Type
IgnoreHeader Content-Transfer-Encoding
IgnoreHeader To
Notifications off
LocalMX 127.0.0.1
SystemLog on
Opt out
MaxMessageSize 200000
ProcessorBias on
Что это может быть ? Подскажите куда копать .
Спасибо всем откликнувшимся.
Re: Dspam в качестве демона
Добавлено: 2009-11-23 10:16:13
Alex Keda
до базы достучаться не может
Re: Dspam в качестве демона
Добавлено: 2009-11-26 12:43:49
sheva.sv
Решил. Спасибо. Действительно, не мог к базе достучаться из-за неверного пароля. Сменил пароль и все заработало!
Re: Dspam в качестве демона
Добавлено: 2009-11-27 23:49:07
neyro
savio писал(а):есть идея вынести dspam на отдельную машину с целью большей производительности.
вопрос в том, как прикрутить тогда exim к dspam?
3.8 версия умеет не только принимать но и отдавать почту через lmtp\smtp. т.е. можно выносить на другой сервер и кластеризовать дспамы различными методами.
Re: Dspam в качестве демона
Добавлено: 2010-01-22 12:19:38
SKazurov
Коллеги, а подскажите, как вручную dspam обучать когда он режиме демона?
Re: Dspam в качестве демона
Добавлено: 2010-04-21 13:55:54
SKazurov
А вот еще вопрос
У меня настроено копирование системным фильтром почты с определенных адресов определенному адресату
Код: Выделить всё
if $header_from: contains "xxxx@yyy.ru"
then
unseen deliver "user@domain.local"
endif
Когда я настроил Dsapm в качестве демона, то адресатам стало приходить по две копии письма

В одной копии в заголовке Envelope-to:
user@domain.local, system-filter, а во второй Envelope-to: system-filter. Вот я и не пойму - толи я в Exim не так роутеры дспама расположил, что письмо два раза пробегает, толи сам дспам не так сконфигурирован... В чем может быть проблема?
Re: Dspam в качестве демона
Добавлено: 2010-04-27 11:35:23
SKazurov
Вот нашел тут рядом на форуме:
После проверки dspam'ом письма снова проходят обрабоку роутами. Вот и получается что одно и тоже письмо 2 раза приходит. В system-filter добавляйте исключение добавления например после проверки dspam. Как вариант при проверки dspam'ом можно ставить какой-то свой хедер, а в системном фильтре его отлавливать. Или искать хедеры, оставляемые dspam'ом.
Соответственно, добавил в фильтр условие на проверку заголовка X-DSPAM-Result:, проблема ушла.
Re: Dspam в качестве демона
Добавлено: 2011-01-05 12:46:06
mediamag
Доброго времени суток. Вот и я добрался до спам фильтра, заранее подготовил грубый фильтр, написавши около 20 кондишенов ручками. Поставил dspam, демон запустился, но при получении и обработке письма вижу следущую ошибку:
Может изменился синтаксис конфига? Буду рад за любую подсказку.
Re: Dspam в качестве демона
Добавлено: 2011-01-05 15:44:05
anti
mediamag писал(а): Может изменился синтаксис конфига? Буду рад за любую подсказку.
просто убери его и не заморачивайся
Господа, кто-нибудь поборол перезапись Return-path в заголовках на root@domain после прохождения через dspam в режиме демона? Насколько я понял, проблема не одиночная, и решения нормального никто не опубликовал
