Config files and scripts for antivirus and antispam

in

 

 

spamassassin.sql

-- Contents of spamassassin.sql
-- Use the following syntax to import it:
-- mysql -u root -p < spamassassin.sql
-- WARNING: IF YOU ALREADY HAVE A DATABASE 'spamassassin',
-- THIS SCRIPT WILL REMOVE IT BEFORE
-- IMPORTING THE NEW DATABASE INFORMATION!!!!
--
--
DROP DATABASE IF EXISTS spamassassin;

CREATE DATABASE spamassassin;

DELETE FROM mysql.user WHERE user='spamassassin' AND host='localhost';
GRANT ALL PRIVILEGES ON spamassassin.*
      TO 'spamassassin'@'localhost' IDENTIFIED BY 'spampass';

FLUSH PRIVILEGES;

USE spamassassin;

CREATE TABLE userpref (
  username varchar(100) NOT NULL default '',
  preference varchar(30) NOT NULL default '',
  value varchar(100) NOT NULL default '',
  prefid int(11) NOT NULL auto_increment,
  PRIMARY KEY  (prefid),
  KEY username (username)
) TYPE=MyISAM;

INSERT INTO userpref VALUES ('@GLOBAL', 'required_hits', '5', 1);
INSERT INTO userpref VALUES ('@GLOBAL', 'spam_level_stars', '1', 3);
INSERT INTO userpref VALUES ('@GLOBAL', 'report_header', '1', 4);
INSERT INTO userpref VALUES ('@GLOBAL', 'defang_mime', '0', 5);
INSERT INTO userpref VALUES ('@GLOBAL', 'use_terse_report', '0', 6);
INSERT INTO userpref VALUES ('@GLOBAL', 'skip_rbl_checks', '1', 7);
INSERT INTO userpref VALUES ('@GLOBAL', 'subject_tag', '[SPAM: _HITS_]', 8);
INSERT INTO userpref VALUES ('@GLOBAL', 'rewrite_subject', '1', 2);

 

folders2sa.pl

#!/usr/bin/perl
# Cron script: link to /etc/cron.hourly

my $server="localhost";
my $login="public";
my $passw="welcome";
my $dirname="/tmp";
my %folders = ( spam => "PublicSpam", ham => "PublicNotSpam" );

use File::Temp qw(tempfile tempdir);
use Net::IMAP::Simple;
use Net::IMAP::Simple::SSL;
use strict;

open(LOG, ">>", "/var/log/cgp-folders2sa.log");
select LOG;

my $imap;
$imap = Net::IMAP::Simple::SSL->new($server);
$imap = Net::IMAP::Simple->new($server)
  unless $imap;
die "mf2sa: cannot connect to IMAP: ".$Net::IMAP::Simple::errstr."\n"
  unless $imap;
die "mf2sa: login failed: " . $imap->errstr . "\n"
  unless $imap->login($login,$passw);
print "=== mf2sa: " . `date`;

for my $type (keys %folders) {
  my $folder = $folders{$type};
  $imap->select($folder);
  my $msgnum = $imap->messages($folder);
  $msgnum = 0 unless $msgnum;
  next if $msgnum <= 0;
  print "mf2sa: messages in $folder : $msgnum \n";
  my $dir = tempdir("/tmp/mf2sa-$type-XXXXX", CLEANUP => 1);
  for my $i (1 .. $msgnum) {
    my $msg = $imap->get($i);
    open(MSG, ">", sprintf("%s/%04d.eml", $dir, $i));
    my $hdr = 1;
    my $skip = 0;
    for (@{$msg}) {
      if ($hdr) {
        if (/^\s*$/) { print MSG; $hdr = 0; next; }
        next if /^\s+/ && $skip;
        $skip = 0;
        if (/^X\-Spam\-/) { $skip = 1; next; }
      }
      print MSG;
    }
    close MSG;
    $imap->delete($i);
  }
  my $cmd = "/usr/bin/sa-learn --use-ignores --$type $dir";
  my $out = `$cmd 2>&1`;
  print ">>> $cmd \n";
  print $out;
  $imap->expunge_mailbox($folder);
}

$imap->quit;
print "========================\n";

 

 

Count rule effectiveness

#!/bin/sh
# проверяем наличие итогового файла, если нет, то создаем
ls -N /home/test/spam > /home/test/test_spam_list
#подготавливаем список писем
# (заливаем весь спам в папку /home/test/spam)
ALL=/home/test/itogs #файл для итоговых значений
RULES1=""; # набор слов для поиска
SPAM2=""; # список файлов, где искать эти слова
DIR="/home/test/spam"; #
rules="/home/test/test_rul"; # файл с именами правил (гот. заранее)
spam="/home/test/test_spam_list"; # файл с именами файлов спама

#-------start grep rules name--------------#
while [ 1 ]; do
  read RULES1 || break
  while [ 2 ]; do
    read SPAM2 || break
    cat $DIR/$SPAM2 | awk '{if($0~/'${RULES1}'/) {print 1}}' >> t
    # если название правила есть в письме, то в файл t пишем 1
  done < $spam
  awk '{ s = s + $1} END {print ("'${RULES1}' = " s/3)}' t >> $ALL
  # суммируем все единицы из файла t и записываем итоговую строку
  # для каждого правила в итоговый файл
  # очищаем счетчик для следующего имени правила
  echo -n > /home/test/t
done < $rules

 

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
To prevent automated spam submissions leave this field empty.