Dspam в качестве демона

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Dspam в качестве демона

Непрочитанное сообщение Al » 2008-05-23 9:51:23

Суть в следующем: если 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 с поддержкой запуска в качестве процесса.
На статью времени нет, так что кто хотит, может и до статьи добомбить.
Предложения-дополнения в студию!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
serge
майор
Сообщения: 2133
Зарегистрирован: 2006-07-30 15:34:14
Откуда: Саратов
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение serge » 2008-05-23 13:17:30

Al писал(а):при большом количестве спама мускуль отказывается принимать новые подключения
А сколько это в цифрах?
Т.к., например, при 20000 в сутки вызов бинарника совершенно не влияет на работу сервера.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение Al » 2008-05-23 13:33:19

дело не в нагрузке в сутки, а в единовременной нагрузке. Как только у мускуля заканчиваются разрешенные конекты(а каждый вызов бинарника - конект), встает все, что с ним работает, а при высокой нагрузке на почту большая часть этих конектов -dspam. У меня вставал при 80-100 тыс. в сутки. Да и запуск демоном как-то правильнее. Разгружает ОС, например. Ведь при каждом вызове бинарника под него выделяется память, создаются дискрипторы и т.д., а процессом висит и никого не трогает + можно задать максимальное кол-во конектов к мускулю, тем самым распределяя его ресурсы между приложениями.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение Alex Keda » 2008-05-23 13:34:14

фря - не линукс и не винда.
тут с форками намного проще - можно не париться.
а конекты... my.cnf ещё никто не отменял =)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
serge
майор
Сообщения: 2133
Зарегистрирован: 2006-07-30 15:34:14
Откуда: Саратов
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение serge » 2008-05-23 13:46:29

В любом случае заметка про демона интересная. Но, имхо, для очень нагруженных почтовиков. Как столкнусь с таким, так сразу попробую :)

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение Al » 2008-05-23 13:56:51

ну,я думаю, хуже не будет... Надо еще баги поискать.

Qwrta administrator
проходил мимо

Re: Dspam в качестве демона

Непрочитанное сообщение Qwrta administrator » 2008-05-25 14:47:22

Судя по грейлисту у меня получается за 2 недели около 7 000 000 записей в базе делим на 14 дней получаем 500 000 в среднем за день Dspam умирал при потоке в 100 000 когда был настроен не как демон за день было тоскливо Платные фильтры тоже не выдерживали такой нагрузки После настройка Dspam в качестве демона нагрузка на сервер резко упала + повысилась производительность Сервера. )) Спасибо Автору за наводку ))

dserga
ефрейтор
Сообщения: 57
Зарегистрирован: 2008-05-23 7:23:36

Re: Dspam в качестве демона

Непрочитанное сообщение dserga » 2008-09-01 11:19:50

Возникает переодически проблем при использовании dspam в качестве демона. При обработке письма dspam не возвращает его в систему, а процесс зависает как бы. Далее процесс зависания развивается, и в течение 6 часов происходит зависание всех возможных инстансов dspam в памяти и встает уже очередь exima. Письма копяться в очереди не не обрабатываются. Приходится перезапускать сервер, чтобы все заработаело, так как зависшие процессы невозможно renice-ить или убить по -KILL, что мне напоминает винду, с ее неубиваемыми процессами. При этом в debug log dspam ничего не попадает, обнаружить на каком письме произошел завис, тоже сложно, так как нет сообщений об ошибках.
Есть какие-либо мысли по этому поводу?

Да, вот еще что. На сервере порядка 30 ящиков и около 10 алиасов. Сервер тур компании, поэтому в день приходит в среднем "нормальных" писем где-то около 700, отшивается спама до 100 000, кладеться в карантин около 600. Пользователи говорят, что после установки нового сервера (новые правила отсева + dspam) реальное количество прорвавшивося спама снизилось и теперь составляет не более 10% от общего количества писем в ящике пользователя.

maxt
проходил мимо

Re: Dspam в качестве демона

Непрочитанное сообщение maxt » 2008-09-29 15:31:52

После попытки отправить письмо выскакивает ошибка:

Код: Выделить всё

authentificator dspam_addspam_router: cannot find authentificator driver "accept"
Как с ошибкой бороться?

maxt
проходил мимо

Re: Dspam в качестве демона

Непрочитанное сообщение maxt » 2008-09-29 16:08:28

Взято из статьи про 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.

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: Dspam в качестве демона

Непрочитанное сообщение Morty » 2009-02-26 23:25:30

ребят а с mysql51
dspam дружит / будет дружить ??

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение buryanov » 2009-05-03 23:32:34

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
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение buryanov » 2009-05-29 11:55:49

И куда копать?

Код: Выделить всё

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
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: Dspam в качестве демона

Непрочитанное сообщение savio » 2009-09-01 9:39:44

есть идея вынести dspam на отдельную машину с целью большей производительности.
вопрос в том, как прикрутить тогда exim к dspam?
Помни о смерти, все суета сует....

gyurza2000
лейтенант
Сообщения: 895
Зарегистрирован: 2007-07-08 23:53:20
Откуда: SPb
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение gyurza2000 » 2009-10-13 22:33:29

настраивал по статье, потом демонизировал как в первом посте - результат один, если запущен dspam - до MySQL никто достучаться не может (ни почта ни WEB сайт никто), только убиваю этот процесс - работа нормализуется
Xeon X5460, RAM 8Gb, FreeBSD 13.1-RELEASE on amd64, Apache 2.4, PHP 7.3.30, MySQL 5.7, Exim 4.95_5, Dovecot 2.3.19.1

vladsol
проходил мимо

Re: Dspam в качестве демона

Непрочитанное сообщение vladsol » 2009-11-12 3:55:35

Всем доброго времени суток!

Захотелось вот перейти с 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
...

sheva.sv
мл. сержант
Сообщения: 75
Зарегистрирован: 2007-11-20 12:49:14

Re: Dspam в качестве демона

Непрочитанное сообщение sheva.sv » 2009-11-21 0:32:39

Настраиваю 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           localhost
MySQLPort              3306
на

Код: Выделить всё

MySQLServer             /tmp/mysql.sock
#MySQLPort              3306
результат тот же.
В базу

Код: Выделить всё

mysql -u dspam -p
заходит корректно.
Вот 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
Что это может быть ? Подскажите куда копать .
Спасибо всем откликнувшимся.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение Alex Keda » 2009-11-23 10:16:13

до базы достучаться не может
Убей их всех! Бог потом рассортирует...

sheva.sv
мл. сержант
Сообщения: 75
Зарегистрирован: 2007-11-20 12:49:14

Re: Dspam в качестве демона

Непрочитанное сообщение sheva.sv » 2009-11-26 12:43:49

Решил. Спасибо. Действительно, не мог к базе достучаться из-за неверного пароля. Сменил пароль и все заработало!

neyro
сержант
Сообщения: 187
Зарегистрирован: 2008-03-07 20:24:25
Контактная информация:

Re: Dspam в качестве демона

Непрочитанное сообщение neyro » 2009-11-27 23:49:07

savio писал(а):есть идея вынести dspam на отдельную машину с целью большей производительности.
вопрос в том, как прикрутить тогда exim к dspam?
3.8 версия умеет не только принимать но и отдавать почту через lmtp\smtp. т.е. можно выносить на другой сервер и кластеризовать дспамы различными методами.

SKazurov
ефрейтор
Сообщения: 51
Зарегистрирован: 2008-09-06 15:15:15

Re: Dspam в качестве демона

Непрочитанное сообщение SKazurov » 2010-01-22 12:19:38

Коллеги, а подскажите, как вручную dspam обучать когда он режиме демона?

SKazurov
ефрейтор
Сообщения: 51
Зарегистрирован: 2008-09-06 15:15:15

Re: Dspam в качестве демона

Непрочитанное сообщение SKazurov » 2010-04-21 13:55:54

А вот еще вопрос :)

У меня настроено копирование системным фильтром почты с определенных адресов определенному адресату

Код: Выделить всё

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 не так роутеры дспама расположил, что письмо два раза пробегает, толи сам дспам не так сконфигурирован... В чем может быть проблема?

SKazurov
ефрейтор
Сообщения: 51
Зарегистрирован: 2008-09-06 15:15:15

Re: Dspam в качестве демона

Непрочитанное сообщение SKazurov » 2010-04-27 11:35:23

Вот нашел тут рядом на форуме:
После проверки dspam'ом письма снова проходят обрабоку роутами. Вот и получается что одно и тоже письмо 2 раза приходит. В system-filter добавляйте исключение добавления например после проверки dspam. Как вариант при проверки dspam'ом можно ставить какой-то свой хедер, а в системном фильтре его отлавливать. Или искать хедеры, оставляемые dspam'ом.
Соответственно, добавил в фильтр условие на проверку заголовка X-DSPAM-Result:, проблема ушла.

mediamag
лейтенант
Сообщения: 693
Зарегистрирован: 2008-10-02 20:49:21

Re: Dspam в качестве демона

Непрочитанное сообщение mediamag » 2011-01-05 12:46:06

Доброго времени суток. Вот и я добрался до спам фильтра, заранее подготовил грубый фильтр, написавши около 20 кондишенов ручками. Поставил dspam, демон запустился, но при получении и обработке письма вижу следущую ошибку:

Код: Выделить всё

dspam[1536]: No such feature 'chained'
Может изменился синтаксис конфига? Буду рад за любую подсказку.

anti
рядовой
Сообщения: 10
Зарегистрирован: 2008-07-04 14:23:55

Re: Dspam в качестве демона

Непрочитанное сообщение anti » 2011-01-05 15:44:05

mediamag писал(а):

Код: Выделить всё

dspam[1536]: No such feature 'chained'
Может изменился синтаксис конфига? Буду рад за любую подсказку.
просто убери его и не заморачивайся

Господа, кто-нибудь поборол перезапись Return-path в заголовках на root@domain после прохождения через dspam в режиме демона? Насколько я понял, проблема не одиночная, и решения нормального никто не опубликовал :(