Страница 1 из 1

Dspam обучение

Добавлено: 2007-12-05 15:05:34
Al
проблема в следующем.
Поставил dspam,настройки по статье....
В результате если ему шлешь на spam-user@domain, то в статистике мускуля растет spam_learned. но если послать письмо на notspam-user@domain, то spam_learned сбрасывается в 0.
в конфигах так:

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

dspam_addspam_router:
  driver = accept
  domains                      = +local_domains
  local_part_prefix = spam-
  condition    = ${if eq{} {${lookup mysql{SELECT `username` FROM `mailbox` WHERE `username` =REPLACE('$local_part@$domain','spam-','')}}}{no}{yes}}
  transport = dspam_addspam_transport

dspam_notspam_router:
  driver = accept
  domains                      = +local_domains
  local_part_prefix = notspam-
  condition    = ${if eq{} {${lookup mysql{SELECT `username` FROM `mailbox` WHERE `username` =REPLACE('$local_part@$domain','notspam-','')}}}{no}{yes}}
  transport = dspam_notspam_transport
и

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

dspam_addspam_transport:
  driver = pipe
  command = "/usr/local/bin/dspam --user $local_part@$domain --class=spam --source=error"
  return_path_add = false
  return_fail_output = true
  log_output = true
  home_directory = "/var/db/dspam"
  current_directory = "/var/db/dspam"
  user = mailnull
  group = mail

dspam_notspam_transport:
  driver = pipe
  command = "/usr/local/bin/dspam --user $local_part@$domain --class=innocent --source=error"
  return_path_add = false
  return_fail_output = true
  log_output = true
  home_directory = "/var/db/dspam"
  current_directory = "/var/db/dspam"
  user = mailnull
  group = mail
такое поведение нормально?

Re: Dspam обучение

Добавлено: 2008-11-22 23:38:07
Alex Keda
логично, вроде....

Re: Dspam обучение

Добавлено: 2009-11-12 15:49:31
eyatsko@ngs.ru
Добрый день!
У меня иная проблема, но тоже связанная с обучением DSPAM. настраивал по статье "DSPAM extension to exim", с небольшими отклонениями, которые, как мне показались, сделают работу удобнее :-). Я ввел пользователя не local_part@domain.com (который, как я понял, просто пользователь).

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

dspam_train_spam_router:
  driver               = accept
  domains              = +local_domains
  condition            = ${if eq{$local_part}{spam-dspam}{1}{0}}
  transport            = dspam_train_spam_transport

dspam_train_ham_router:
  driver               = accept
  domains              = +local_domains
  condition            = ${if eq{$local_part}{ham-dspam}{1}{0}}
  transport            = dspam_train_ham_transport

dspam_spam_router:
  driver               = accept
  domains              = +local_domains
  local_part_prefix    = spam-
  transport            = dspam_spam_transport

dspam_ham_router:
  driver               = accept
  domains              = +local_domains
  local_part_prefix    = ham-
  transport            = dspam_ham_transport

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup mysql{SELECT recipients FROM aliases WHERE alias='${quote_mysql:$local_part@$domain}' OR alias='${quote_mysql:@$domain}'}}

dnslookup_router:
  driver               = dnslookup
  domains              = ! +local_domains
  transport            = remote_smtp
  ignore_target_hosts  = 0.0.0.0 : 127.0.0.0/8
#  no_more

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_spamscan_transport
  require_files                = /usr/local/bin/dspam
  address_test                 = false

local_spam_delivery_router:
  driver                       = accept
  domains                      = +local_domains
  condition                    = ${if match{$h_X-DSPAM-Result:}{Spam}}
  transport                    = local_spam_delivery_transport
  no_more

mysql_user_router:
  driver               = accept
  condition            = ${if eq{}{${lookup mysql{SELECT home FROM users WHERE username='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}
  transport            = mysql_delivery

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

remote_smtp:
  driver = smtp

mysql_delivery:
  driver = appendfile
  check_string = ""
  create_directory
  delivery_date_add
  directory = ${lookup mysql{SELECT CONCAT(home,'/${domain}/${local_part}') FROM users WHERE username='${local_part}@${domain}'}}
  directory_mode = 770
  envelope_to_add
  return_path_add
  group = mail
  maildir_format
  maildir_tag = ,S=$message_size
  message_prefix = ""
  message_suffix = ""
  mode = 0600

address_pipe:
  driver = pipe
  return_output

address_reply:
  driver = autoreply

dspam_spam_transport:
  driver               = pipe
  command              = /usr/local/bin/dspam --user $local_part@$domain --class=spam --source=error
  return_path_add      = false
  return_fail_output   = true
  log_output           = true
  home_directory       = /var/db/dspam
  current_directory    = /var/db/dspam
  user                 = mailnull
  group                = mail

dspam_ham_transport:
  driver               = pipe
  command              = /usr/local/bin/dspam --user $local_part@$domain --class=innocent --source=error --deliver=innocent %u
  return_path_add      = false
  return_fail_output   = true
  log_output           = true
  home_directory       = /var/db/dspam
  current_directory    = /var/db/dspam
  user                 = mailnull
  group                = mail

dspam_train_spam_transport:
  driver               = pipe
  command              = /usr/local/bin/dspam --class=spam --source=corpus --user dspam@runoguy.ru --process
  return_path_add      = false
  return_fail_output   = true
  log_output           = true
  home_directory       = /var/db/dspam
  current_directory    = /var/db/dspam
  user                 = mailnull
  group                = mail

dspam_train_ham_transport:
  driver               = pipe
  command              = /usr/local/bin/dspam --class=innocent --source=corpus --user dspam@runoguy.ru --process
  return_path_add      = false
  return_fail_output   = true
  log_output           = true
  home_directory       = /var/db/dspam
  current_directory    = /var/db/dspam
  user                 = mailnull
  group                = mail

dspam_spamscan_transport:
  driver               = pipe
  command              = /usr/local/bin/dspam --deliver=innocent --user "$local_part@$domain" -- %u
  return_path_add      = false
  log_output           = true
  return_fail_output   = true
  headers_remove       = X-DSPAM-Result
  user                 = mailnull
  group                = mail

local_delivery_spam_transport:
  driver               = pipe
  command              = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -m INBOX.Junk
  message_prefix       =
  message_suffix       =
  delivery_date_add
  envelope_to_add
  return_path_add
Вот такая ситуация получается:

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

mysql> select * from dspam_stats;
+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+
| uid |spam_learned|innocent_learned|spam_misclassified|innocent_misclassified|spam_corpusfed|innocent_corpusfed|spam_classified|innocent_classified|
+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+
|   1 |          2312 |                525 |                       0 |                           0 |           2312 |                   525 |                   0 |                        0 |
|   2 |               0 |                    7 |                       0 |                           0 |                0 |                       0 |                   0 |                       0 |
|   3 |               0 |                  14 |                       0 |                           0 |                0 |                       0 |                   0 |                       0 |
+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+
3 rows in set (0.00 sec)
mysql>
Вначале было 300 и 500, соответственно, spam_learned и innocent_learned. Это я потом уже добавил, так как вижу, что ноу-эффект. И, тем не менее, пользователям как шел спам, так и идет. Вот эти 7 и 14 - это чисто спам. Учу так: посылаю на spam-dspam@runoguy.ru - спам и на ham-dspam@runoguy.ru - нормальные письма.

Для меня непонятна увязка:
/usr/local/etc/exim> vi /var/db/dspam/group
----------------------------------------------------------
primary:classification:dspam@runoguy.ru
----------------------------------------------------------
/usr/local/etc/exim>

с вот ними:
eyatsko@runoguy.ru
oyatsko@runoguy.ru
Насколько до меня дошло: classification распространяется на всех без исключения пользователей. Это так? Потому что есть такое ощущение, что DSPAM не использует накопленную базу для dspam@runoguy.ru.

Буду признателен, если немного просветите?

С уважением,
Яцко Э. Г.

Re: Dspam обучение

Добавлено: 2009-11-12 15:51:00
eyatsko@ngs.ru
Он, оказывается, там моноширинный шрифт использует.

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

+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+
| uid | spam_learned | innocent_learned | spam_misclassified | innocent_misclassified | spam_corpusfed | innocent_corpusfed | spam_classified | innocent_classified |
+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+
|   1 |         2331 |              525 |                  0 |                      0 |           2331 |                525 |               0 |                   0 |
|   2 |            0 |               12 |                  0 |                      0 |              0 |                  0 |               0 |                   0 |
|   3 |            0 |               20 |                  0 |                      0 |              0 |                  0 |               0 |                   0 |
+-----+--------------+------------------+--------------------+------------------------+----------------+--------------------+-----------------+---------------------+

Re: Dspam обучение

Добавлено: 2009-11-12 17:21:51
eyatsko@ngs.ru
Чтение невнятной документации по DSPAM мало что дало..
primary - это имя группы;
classification - это тип группы,
затем, через запятую должны быть перечислены пользователи, чьи базы должны быть использованы для анализа Спам/НеСпам для пользователей, не достигших зрелости: менее 250 спамовых писем, или менее 1000 нормальных писем.
Ну почему же он пропускает все письма с пометкой Innocent?! Не понимаю? Не использует базу? Как, в итоге, надо? Помогите, пожалуйста?

С уважением,
Яцко Э. Г.

Re: Dspam обучение

Добавлено: 2009-11-12 22:11:38
eyatsko@ngs.ru
Да! Главное-то и забыл..

Хочется вот чего:
1) есть некая общая база у одного пользователя;
2) DSPAM анализирует ее, вначале или в конце - не суть важно, она как бы дополнение к пользовательской базе, которую каждый для себя "набивает", топравляя spam-<username>@<domain>.ru или на ham-<username>@<domain>.ru

С уважением,
Яцко Э. Г.

Re: Dspam обучение

Добавлено: 2009-11-12 22:22:29
Гость
Так выглядит процесс доставки:

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

Nov 12 22:20:45 srvgate-msk exim[34549]: 1N8fDp-0008zF-C9 <= eyatsko@runoguy.ru H=main.domain.runoguy.ru [172.16.77.11] P=esmtpa A=auth_plain:eyatsko@runoguy.ru S=12825 from <eyatsko@runoguy.ru> for eyatsko@runoguy.ru
Nov 12 22:20:45 srvgate-msk exim[34555]: 1N8fDp-0008zL-Jt <= eyatsko@runoguy.ru U=mailnull P=spam-scanned S=13592 id=E1N8fDp-0008zF-C9@srvgate-msk.runoguy.ru from <mailnull@runoguy.ru> for eyatsko@runoguy.ru
Nov 12 22:20:45 srvgate-msk exim[34550]: 1N8fDp-0008zF-C9 => eyatsko <eyatsko@runoguy.ru> R=dspam_spamscan_router T=dspam_spamscan_transport
Nov 12 22:20:45 srvgate-msk exim[34550]: 1N8fDp-0008zF-C9 Completed
Nov 12 22:20:45 srvgate-msk exim[34556]: 1N8fDp-0008zL-Jt => eyatsko <eyatsko@runoguy.ru> R=mysql_user_router T=mysql_delivery
Nov 12 22:20:45 srvgate-msk exim[34556]: 1N8fDp-0008zL-Jt Completed

Re: Dspam обучение

Добавлено: 2009-11-13 1:28:57
neyro
по ДСПАМу могу сказать одно-он багнут и иногда нужны танцы с бубном. К примеру у меня он не работал если изменить конфигурацию и не удалить кеш\не обучить его заново (если меняется алгоритм распознавания)(это впринципе логично, но внимание на этом не заостряется в документации (кстати а что с ней не так ? ).
Признак такого поведения- в заголовках добавляемых дспамом письмо числится как innocent 99%.
п.с. жаль конечно, что автор дспама продался...какие перспективы у него были...эх

Re: Dspam обучение

Добавлено: 2009-11-13 10:21:32
Гость
Добрый день!
Английская документация, я имел ее ввиду. Хотя и наша - не "блещет" тоже. Самое лучшее, что я нашел в Интернете: http://av5.com/journals-magazines-online/1/4/41
Остальное, как-то не объясняет, как и что прописать в конфигах (в том числе и автор этого сайта :smile: ) Проблема, я думаю, в доступности изложения (для меня, разумеется), либо в отсутствии объяснений, как например, в http://www.lissyara.su/?id=1301 - просто дано - делай так. Почему, зачем - не понятно.. Понимаете, почта дома - это не цель моей жизни, а лишь средство, для достижения других, более важных результатов. Поэтому, наверное, такое отношение - сделать, насколько возможно - разобраться (вдруг еще где когда пригодится?), и, на самом деле, забыть. Хочется быстрых результатов..

По той,"понятной" - я "накопал" делать вот так:
~# vi /var/db/dspam/group

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

dspam@runoguy.ru:merged:*
Вроде, начал отрабатывать транспорт local_delivery_spam_transport, там "полезли" проблемы с dovecot/delivery, с его, как оказалось известной проблемой setuid/setgid Permisson Denied, но это уже другая история. А вот непонятно, что со счетчиками:

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

+-----+-----------------+---------------------+
| uid || spam_classified | innocent_classified |
+-----+-----------------+---------------------+
|   1 |               0 |                   0 |
|   2 |               0 |                   0 |
|   3 |               0 |                   0 |
+-----+-----------------+---------------------+
Когда они изменяются? В каких случаях? Письма же, которые он "фильтрует" - они учитываются в spam_learned и innocent_learned.
С уважением,
Яцко Э. Г.