On Apr 10, 2010, at 3:27 AM, Stevan Bajić wrote: > On Fri, 9 Apr 2010 23:23:16 -0700 > Terry Barnum <te...@dop.com> wrote: > >> >> On Apr 9, 2010, at 7:21 PM, Stevan Bajić wrote: >> >>> On Fri, 9 Apr 2010 19:00:54 -0700 >>> Terry Barnum <te...@dop.com> wrote: >>> >>>> I've been running DSPAM for approximately 2 weeks and looking at the >>>> output of dspam_stats, I'm curious how long training normally takes. >>>> >>>> A script is run nightly to check .Junk mailboxes for false negatives and >>>> .NotJunk mailboxes for false positives and retrains on error. (Richard >>>> Valk's http://switch.richard5.net/serverinstall/train.dspam) >>>> >>>> Here's sample output from dspam_stats -H >>>> >>>> x...@dop.com: >>>> TP True Positives: 0 >>>> TN True Negatives: 19 >>>> FP False Positives: 0 >>>> FN False Negatives: 348 >>>> SC Spam Corpusfed: 0 >>>> NC Nonspam Corpusfed: 0 >>>> TL Training Left: 2481 >>>> SHR Spam Hit Rate 0.00% >>>> HSR Ham Strike Rate: 0.00% >>>> PPV Positive predictive value: 100.00% >>>> OCA Overall Accuracy: 5.18% >>>> >>>> y...@dop.com: >>>> TP True Positives: 0 >>>> TN True Negatives: 0 >>>> FP False Positives: 0 >>>> FN False Negatives: 3035 >>>> SC Spam Corpusfed: 0 >>>> NC Nonspam Corpusfed: 0 >>>> TL Training Left: 2500 >>>> SHR Spam Hit Rate 0.00% >>>> HSR Ham Strike Rate: 100.00% >>>> PPV Positive predictive value: 100.00% >>>> OCA Overall Accuracy: 0.00% >>>> >>>> z...@dop.com: >>>> TP True Positives: 0 >>>> TN True Negatives: 0 >>>> FP False Positives: 0 >>>> FN False Negatives: 358 >>>> SC Spam Corpusfed: 0 >>>> NC Nonspam Corpusfed: 0 >>>> TL Training Left: 2500 >>>> SHR Spam Hit Rate 0.00% >>>> HSR Ham Strike Rate: 100.00% >>>> PPV Positive predictive value: 100.00% >>>> OCA Overall Accuracy: 0.00% >>>> >>>> te...@dop.com: >>>> TP True Positives: 0 >>>> TN True Negatives: 3 >>>> FP False Positives: 0 >>>> FN False Negatives: 5108 >>>> SC Spam Corpusfed: 0 >>>> NC Nonspam Corpusfed: 0 >>>> TL Training Left: 2497 >>>> SHR Spam Hit Rate 0.00% >>>> HSR Ham Strike Rate: 0.00% >>>> PPV Positive predictive value: 100.00% >>>> OCA Overall Accuracy: 0.09% >>>> >>> This all looks to me that you are not using DSPAM at all. Seems to me that >>> only the script from http://switch.richard5.net/serverinstall/train.dspam >>> is feeding DSPAM with data in your setup. >> >> Thank you for your help Stevan. My understanding of how this is supposed to >> eventually work is DSPAM analyzes and adds a header to email as Innocent or >> Spam and the MUA, which is configured to trust the Spam header, moves mail >> into the Junk mailbox if DSPAM classified it as Spam. The MUA has its own >> Junk filtering and moves mail it considers spam into the Junk mailbox too. >> So the nightly script may run across mail in the Junk mailbox that it >> mis-classified as Innocent but is actually spam and is retrained as a false >> negative. Conversely, if DSPAM incorrectly classifies mail as spam, the user >> moves that email from the Junk mailbox into the NotJunk mailbox so the >> nightly script can retrain as a false positive. >> > So what it does is basically what the Dovecot anti-spam plugin does. The > plugin however does it in real time while the script you have there does it > on a scheduled basis. > > >> DSPAM appears to be correctly adding headers but so far I've seen only >> Whitelisted and Innocent. >> > But how is it possible that you almost have everywhere 0 for TN/TP. If DSPAM > would work properly then TP/TN would need to increase every time you get a > mail.
That's what I'm wondering too. Could the train.dspam script somehow trigger a reset of those fields? It's very possible I have a stupid mis-configuration problem and I very much appreciate the help. This is my first postfix/dovecot install and I'm learning something every day. >>>> Is so much "Training Left" normal? Do I have something misconfigured? Will >>>> DSPAM start tagging email as SPAM only after 2500 successfully classified >>>> emails? >>>> >>> No. DSPAM is fully functional from day one. The tagging can be turned >>> on/off inside dspam.conf or with the preference extension. However... >>> turning on/off the tagging has nothing to do with the training left number. >>> >>> >>>> $ dspam --version >>>> >>>> DSPAM Anti-Spam Suite 3.9.0 (agent/library) >>>> >>>> Copyright (c) 2002-2009 DSPAM Project >>>> http://dspam.sourceforge.net. >>>> >>>> DSPAM may be copied only under the terms of the GNU General Public License, >>>> a copy of which can be found with the DSPAM distribution kit. >>>> >>>> $ cat /usr/local/dspam.conf | grep -v ^# | grep -v ^$ >>>> >>>> Home /usr/local/var/dspam >>>> StorageDriver /usr/local/lib/dspam/libmysql_drv.dylib >>>> TrustedDeliveryAgent "/usr/bin/procmail" >>>> DeliveryHost 127.0.0.1 >>>> DeliveryPort 10026 >>>> DeliveryIdent localhost >>>> DeliveryProto SMTP >>>> OnFail error >>>> Trust root >>>> Trust dspam >>>> Trust apache >>>> Trust mail >>>> Trust mailnull >>>> Trust smmsp >>>> Trust daemon >>>> Trust _dspam >>>> Trust _postfix >>>> Trust _www >>>> TrainingMode toe >>>> TestConditionalTraining on >>>> Feature whitelist >>>> Algorithm graham burton >>>> Tokenizer osb >>>> PValue bcr >>>> WebStats on >>>> Preference "trainingMode=TOE" # { TOE | TUM | TEFT | NOTRAIN >>>> } -> default:teft >>>> Preference "spamAction=tag" # { quarantine | tag | deliver >>>> } -> default:quarantine >>>> Preference "spamSubject=[SPAM]" # { string } -> default:[SPAM] >>>> Preference "statisticalSedation=5" # { 0 - 10 } -> default:0 >>>> Preference "enableBNR=on" # { on | off } -> default:off >>>> Preference "enableWhitelist=on" # { on | off } -> default:on >>>> Preference "signatureLocation=headers" # { message | headers } -> >>>> default:message >>>> Preference "tagSpam=off" # { on | off } >>>> Preference "tagNonspam=off" # { on | off } >>>> Preference "showFactors=on" # { on | off } -> default:off >>>> Preference "optIn=off" # { on | off } >>>> Preference "optOut=off" # { on | off } >>>> Preference "whitelistThreshold=10" # { Integer } -> default:10 >>>> Preference "makeCorpus=off" # { on | off } -> default:off >>>> Preference "storeFragments=off" # { on | off } -> default:off >>>> Preference "localStore=" # { on | off } -> default:username >>>> <---- ** okay to be blank? ** >>>> >>> Yes >>> >>> >>>> Preference "processorBias=on" # { on | off } -> default:on >>>> Preference "fallbackDomain=off" # { on | off } -> default:off >>>> Preference "trainPristine=off" # { on | off } -> default:off >>>> Preference "optOutClamAV=off" # { on | off } -> default:off >>>> Preference "ignoreRBLLookups=off" # { on | off } -> default:off >>>> Preference "RBLInoculate=off" # { on | off } -> default:off >>>> AllowOverride enableBNR >>>> AllowOverride enableWhitelist >>>> AllowOverride fallbackDomain >>>> AllowOverride ignoreGroups >>>> AllowOverride ignoreRBLLookups >>>> AllowOverride localStore >>>> AllowOverride makeCorpus >>>> AllowOverride optIn >>>> AllowOverride optOut >>>> AllowOverride optOutClamAV >>>> AllowOverride processorBias >>>> AllowOverride RBLInoculate >>>> AllowOverride showFactors >>>> AllowOverride signatureLocation >>>> AllowOverride spamAction >>>> AllowOverride spamSubject >>>> AllowOverride statisticalSedation >>>> AllowOverride storeFragments >>>> AllowOverride tagNonspam >>>> AllowOverride tagSpam >>>> AllowOverride trainPristine >>>> AllowOverride trainingMode >>>> AllowOverride whitelistThreshold >>>> AllowOverride dailyQuarantineSummary >>>> MySQLServer /var/mysql/mysql.sock >>>> MySQLUser * >>>> MySQLPass * >>>> MySQLDb * >>>> MySQLCompress false >>>> MySQLVirtualTable dspam_virtual_uids >>>> MySQLVirtualUIDField uid >>>> MySQLVirtualUsernameField username >>>> MySQLUIDInSignature on >>>> HashRecMax 98317 >>>> HashAutoExtend on >>>> HashMaxExtents 0 >>>> HashExtentSize 49157 >>>> HashPctIncrease 10 >>>> HashMaxSeek 10 >>>> HashConnectionCache 10 >>>> Notifications off >>>> PurgeSignatures 14 # Stale signatures >>>> PurgeNeutral 90 # Tokens with neutralish probabilities >>>> PurgeUnused 90 # Unused tokens >>>> PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes) >>>> PurgeHits1S 15 # Tokens with only 1 spam hit >>>> PurgeHits1I 15 # Tokens with only 1 innocent hit >>>> LocalMX 127.0.0.1 >>>> SystemLog on >>>> UserLog on >>>> Opt out >>>> ParseToHeaders on >>>> ChangeModeOnParse on >>>> ChangeUserOnParse full >>>> ServerPID /var/run/dspam.pid >>>> ServerParameters "--deliver=innocent,spam" >>>> ServerIdent "localhost.local" >>>> ProcessorURLContext on >>>> ProcessorBias on >>>> StripRcptDomain off >>>> >>> What MTA are you using? Postfix? If so could you post your master.conf and >>> your main.conf? >> >> Yes, postfix/dovecot/mysql with virtual users, postgrey, dspam and vacation. >> >> $ postconf -n >> >> broken_sasl_auth_clients = yes >> command_directory = /opt/local/sbin >> config_directory = /opt/local/etc/postfix >> daemon_directory = /opt/local/libexec/postfix >> data_directory = /opt/local/var/lib/postfix >> debug_peer_level = 2 >> default_privs = nobody >> delay_warning_time = 4h >> home_mailbox = Maildir/ >> html_directory = no >> mail_owner = _postfix >> mailq_path = /opt/local/bin/mailq >> manpage_directory = /opt/local/share/man >> mydestination = $myhostname, localhost.$mydomain, localhost >> myhostname = mailbox.dop.com >> mynetworks = 192.168.0.0/23, 127.0.0.0/8 >> myorigin = $mydomain >> newaliases_path = /opt/local/bin/newaliases >> proxy_interfaces = 70.167.15.114 >> queue_directory = /opt/local/var/spool/postfix >> readme_directory = /opt/local/share/postfix/readme >> sample_directory = /opt/local/share/postfix/sample >> sendmail_path = /opt/local/sbin/sendmail >> setgid_group = _postdrop >> smtpd_banner = $myhostname ESMTP $mail_name >> smtpd_helo_required = yes >> smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname >> smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, >> reject_non_fqdn_sender, reject_non_fqdn_recipient, >> reject_unknown_sender_domain, reject_unknown_recipient_domain, >> reject_unauth_pipelining, reject_unauth_destination, >> reject_unlisted_recipient, check_helo_access >> hash:/opt/local/etc/postfix/helo_checks, check_sender_access >> hash:/opt/local/etc/postfix/access_sender, reject_rbl_client >> zen.spamhaus.org, reject_rbl_client bl.spamcop.net, check_policy_service >> inet:127.0.0.1:60000, check_client_access >> pcre:/opt/local/etc/postfix/dspam_filter_access >> > could you post the content of that /opt/local/etc/postfix/dspam_filter_access > file? $ cat dspam_filter_access /./ FILTER dspam:dspam >> smtpd_reject_unlisted_sender = yes >> smtpd_sasl_auth_enable = yes >> smtpd_sasl_local_domain = $myhostname >> smtpd_sasl_path = private/auth >> smtpd_sasl_security_options = noanonymous >> smtpd_sasl_type = dovecot >> smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address >> smtpd_tls_cert_file = /opt/local/etc/postfix/ssl/certs/postfix.cert >> smtpd_tls_key_file = /opt/local/etc/postfix/ssl/private/postfix.key >> smtpd_tls_loglevel = 1 >> smtpd_tls_security_level = may >> tls_random_source = dev:/dev/urandom >> transport_maps = hash:/opt/local/etc/postfix/transport >> unknown_local_recipient_reject_code = 550 >> virtual_alias_maps = >> proxy:mysql:/opt/local/etc/postfix/mysql_virtual_alias_maps.cf >> virtual_gid_maps = static:102 >> virtual_mailbox_base = /xxxx/xxxx/xxxx/ >> virtual_mailbox_domains = >> mysql:/opt/local/etc/postfix/mysql_virtual_mailbox_domains.cf >> virtual_mailbox_maps = >> proxy:mysql:/opt/local/etc/postfix/mysql_virtual_mailbox_maps.cf >> virtual_minimum_uid = 102 >> virtual_transport = dovecot >> virtual_uid_maps = static:102 >> >> $ cat master.cf | grep -v ^# >> >> smtp inet n - n - - smtpd >> dspam unix - n n - 10 pipe >> flags=Ru user=_dspam argv=/usr/local/bin/dspam --deliver=innocent --user >> ${recipient} -i -f $sender -- $recipient >> submission inet n - n - - smtpd >> -o smtpd_enforce_tls=yes >> -o smtpd_tls_security_level=encrypt >> -o smtpd_sasl_auth_enable=yes >> -o smtpd_client_restrictions=permit_sasl_authenticated,reject >> -o milter_macro_daemon_name=ORIGINATING >> pickup fifo n - n 60 1 pickup >> cleanup unix n - n - 0 cleanup >> qmgr fifo n - n 300 1 qmgr >> tlsmgr unix - - n 1000? 1 tlsmgr >> rewrite unix - - n - - trivial-rewrite >> bounce unix - - n - 0 bounce >> defer unix - - n - 0 bounce >> trace unix - - n - 0 bounce >> verify unix - - n - 1 verify >> flush unix n - n 1000? 0 flush >> proxymap unix - - n - - proxymap >> proxywrite unix - - n - 1 proxymap >> smtp unix - - n - - smtp >> relay unix - - n - - smtp >> -o smtp_fallback_relay= >> showq unix n - n - - showq >> error unix - - n - - error >> retry unix - - n - - error >> discard unix - - n - - discard >> local unix - n n - - local >> virtual unix - n n - - virtual >> lmtp unix - - n - - lmtp >> anvil unix - - n - 1 anvil >> scache unix - - n - 1 scache >> dovecot unix - n n - - pipe >> flags=DRhu user=_vmail argv=/opt/local/libexec/dovecot/deliver -f ${sender} >> -d ${recipient} >> localhost:10026 inet n - n - - smtpd >> -o content_filter= >> -o >> receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_address_mappings >> -o smtpd_helo_restrictions= >> -o smtpd_client_restrictions= >> -o smtpd_sender_restrictions= >> -o smtpd_recipient_restrictions=permit_mynetworks,reject >> -o mynetworks=127.0.0.0/8 >> -o smtpd_authorized_xforward_hosts=127.0.0.0/8 >> vacation unix - n n - - pipe >> flags=Rq user=_vacation argv=/opt/local/var/spool/vacation/vacation.pl -f >> ${sender} -- ${recipient} >> > Hmm... that looks to me like you are using FILTER to pass messages to DSPAM. > Right? Yes. Is this not a good approach? Also, I'm not sure if this helps the diagnosis, but here's dspam_admin list preference default output that shows the change you suggested to force signatureLocation into the header. $ sudo dspam_admin list preference default signatureLocation=headers Thanks, -Terry ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Dspam-user mailing list Dspam-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dspam-user