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

40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-04 9:56:20
lerryc
Задача: Сделать самообучающуюся систему и чтоб сама боролась со спамом, не доводя разборок до спамассисн, и чтоб меня не дергала по мелочам.
В конфиге по сути ничего нового, все взято сами знаете откуда...
Но может что-то не учел, может где-то палку перегнул.
Привожу не все acl'ы - после того, как в базе набралось 24тыс черных адресов и 7тыс черных емайлов -стало мучительно долго ждать очередного спама, которое добралось бы нужного фильтра.
так что не все еще оттестировано и поэтому привожу только то, что прошло откатку в боевых условиях.
Конструктивная критика не возбраняется, полезные советы приветствуются.
PS
В конфиге используется

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

set acl_m12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
вместо

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

set acl_m12   = ${lookup mysql{MYSQL_ADDBLACK}}
в связи с приемом почты/спама и от fetcthmail тоже

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-04 9:58:38
lerryc

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

$Cambridge: exim/exim-src/src/configure.default,v 1.13 2007/06/26 11:21:36 ph10 Exp $
### version 0.2  /10.12.08/

MY_IP           = 111.222.333.444

MY_MSG          = If You want near contacts us call me now by phone +7 xxx xxxx or ICQ xx-xxx-xxx \n
MY_MSG          == MY_MSG or/and look more details on this page http://www.xxx.ru/abuse.html  \n
MY_MSG          == MY_MSG or send me to my personal address  abuse@$primary_hostname

BAD_HELONAME    = adsl|dialup|pool|peer|dhcp|pppoe|dynamic|.home.|ppp-|dsl-|Dynamic|.user.|.dsl.|.dyn.|.ttnet.net.tr
BAD_HELONAME    == BAD_HELONAME|.orange.fr|.net.il|.wanadoo.

BAD_XXX         = TNAME|FIRSTNAME|LASTNAME
BAD_XXX         == BAD_XXX|devochk|katty|teddy
BAD_XXX         == BAD_XXX|online.marine.su

MYSQL_ADDBLACK  = INSERT IGNORE INTO blackhost(iphost,rule,comment,dates,hostname) VALUES ('$sender_host_address','$acl_c11','$sender_helo_name',CURRENT_TIMESTAMP,'$sender_host_name')

MYSQL_ADDWHITE  = REPLACE INTO  blackhost(iphost,rule,comment,dates,hostname) VALUES ('$sender_host_address','0','$sender_helo_name',CURRENT_TIMESTAMP,'$sender_host_name')

MYSQL_UPDTWHITE = UPDATE  blackhost SET rule=0 WHERE iphost='$acl_c14'

MYSQL_ADDEMAIL  = INSERT IGNORE INTO blackemail(email,rule,iphost) VALUES ('$sender_address','$acl_c11','$sender_host_address')

MYSQL_WHITE_EMAIL  = REPLACE INTO blackemail(email,rule,iphost) VALUES ('${quote_mysql:$local_part@$domain}','0','$acl_c14')

MYSQL_ADDSPAM  = INSERT IGNORE INTO spamers(mdbody,iphost,sender,spcount) VALUES ('$acl_c15','$sender_host_address','$sender_address','1')

MYSQL_HISTORY   = INSERT INTO mailhistory(way,sender,recipient,sizes,dates) VALUES ('$acl_c11','${quote_mysql:$sender_address}','${quote_mysql:$recipients}','$message_size',CURRENT_TIMESTAMP)



##### это позволяет засечь спамера и не доводить дело до спамассиссина для реальных получателей
SPAM_LIKE       = postmaster : webmaster : info : admin : support: director : direktor : secretar : sekretar
SPAM_LIKE       == SPAM_LIKE : web : mail

MY_INF1         = $sender_host_address [$sender_host_name] /helo=$sender_helo_name / ($sender_address ==> $local_part@$domain)

MY_INF2         = $sender_host_address [$sender_host_name] /helo=$sender_helo_name / ($sender_address ==> $recipients) Size=$message_size

MAX_SPAM_SIZE   = 40K

MIN_SPAM_SIZE   = 5K

MAX_USERS       = 4

###################################
acl_smtp_connect = acl_check_connect
acl_smtp_rcpt    = acl_check_rcpt
acl_smtp_predata = acl_check_predata
acl_smtp_data    = acl_check_data

####################################

######################################################################
#                       ACL CONFIGURATION                            #
######################################################################
###   acl_c10  - verify sender (older client, not spammer)
###   acl_c11  - reject code (temp value)
###   acl_c12  - MYSQL request status (temp value)
###   acl_c13  - MYSQL request status (temp value)
###   acl_c14  - black or white IP host (data section)
###   acl_c15  = MD5 summ of message_body (check_spam in data section)
###   acl_c17  = $local_part
###   acl_c18  = $domain
###   acl_c19  = $sender_address_domain
#### 

begin acl
##########
acl_check_connect:

##########        принимаем все локальные (в том числе и fetchmail) и от наших релеев
  accept  hosts         = 127.0.0.1 : +relay_from_hosts
          logwrite       = INPUT_CONNECT_LOCAL: MY_INF1 

##########    принимаем со спамерских хостов потому, что там встечаются и наши клиенты
  accept  hosts         = !127.0.0.1 : !+relay_from_hosts
          condition     = ${lookup mysql{SELECT 1 FROM blackhost WHERE iphost='${quote_mysql:$sender_host_address}' AND rule=0}}
          logwrite       = INPUT_CONNECT_TRUST: MY_INF1

##########01      блокируем по черному списку
  deny    message       = "Spam Guard#01: IP $sender_host_address in our blak_host_list...\n  MY_MSG \n "
          condition     = ${lookup mysql{SELECT rule FROM blackhost WHERE iphost='${quote_mysql:$sender_host_address}'}}
          logwrite      = MyBlock#01: black IP MY_INF1
          delay         = 30s

##########02      не нравится имя хоста
  deny    message       = "Spam Guard#02: Drop dynamic address..."
          condition     = ${if match{$sender_host_name} {BAD_HELONAME}{yes}{no}}
          set acl_c11   = 2
          set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
          logwrite      = MyBlock#02: black host MY_INF1 
          delay         = 30s

##########33      в имени нет точки (но  вряд ли такое тут возможно)
  deny    condition     = ${if !eq{$sender_host_name}{}{yes}{no}}
          condition     = ${if !match{$sender_host_name}{\N\w\.\w\N}{yes}{no}}
          message       = "Spam Guard#33: Bad hostname $sender_host_name"
          set acl_c11   = 33
          set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
          logwrite      = MyBlock#33: MY_INF1
          delay         = 30s

###########32   deny    message	= "Spam Guard#32: Drop IP digits in name... "
###########             подумать еще раз - не обрежется ли тут нужное что-нить
###################          condition	= ${if match{$sender_host_name} {\N[0-9]\.[0-9]\-[0-9]\-[0-9]\N}{yes}{no}}

  accept  logwrite     = INPUT_CONNECT_NEW: MY_INF1

acl_check_rcpt:
  accept  hosts = :

##########06      проверяем наличие HELO/EHLO
    deny    message       = "Spam Guard#06: HELO\EHLO need for me"
            condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
            set acl_c11   = 6
            set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#06: no HELO / MY_INF1
            delay         = 30s

##########07      в HELO только IP 
    deny    message       = "Spam Guard#07: We dont allow IP-only in hello"
	    condition     = ${if isip{$sender_helo_name}{yes}{no}}
	    hosts         = !127.0.0.1 : !+relay_from_hosts 
	    set acl_c11   = 7
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#07:IP-only MY_INF1
	    delay         = 30s

##########08      в HELO нет точки 
    deny    condition     = ${if !match{$sender_helo_name}{\N\w\.\w\N}{yes}{no}}
	    hosts         = !127.0.0.1 : !+relay_from_hosts 
            message       = "Spam Guard#08: Bad helo name $sender_helo_name"
	    set acl_c11   = 8
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#08: not dot MY_INF1
	    delay         = 30s


##########09      в helo [ квадратные скобки
    deny    condition     = ${if match{$sender_helo_name}{\N\[\N}{yes}{no}}
	    message       = "Spam Guard#09: Your host is hard spam host because bad helo_name"
 	    hosts         = !127.0.0.1 : !+relay_from_hosts : *
	    set acl_c11   = 9
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#09: >[]< MY_INF1
	    delay         = 30s

##########10     это блокируется   ранее в правиле 7
##########       можно удалить
#    deny    message      = "Spam Guard#10: Don't allow my IP, spammerrs"
#	    condition     = ${if match{$sender_helo_name}{MY_IP}{yes}{no}}
#	    set acl_c11   = 10
#	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
#            logwrite     = MyBlock#10: Don't allow my IP, spammerrs
#	    delay         = 20s

##########11      Рубаем тех, кто в HELO пихает только цифры  
    deny    condition     = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}
	    hosts         = !127.0.0.1 : !+relay_from_hosts : *
	    message       = "Spam Guard#11: can not be only number in HELO!"
	    set acl_c11   = 11
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#11: only number in helo! MY_INF1
	    delay         = 30s

##########12      рубаем по маске плохие хело-нэйм
  deny      message       = "Spam Guard#12: Drop dynamic address..."
 	    hosts         = !127.0.0.1 : !+relay_from_hosts : *
            condition     = ${if match{$sender_helo_name} {BAD_HELONAME}{yes}{no}}
	    set acl_c11   = 12
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#12: drop dynamic MY_INF1
	    delay         = 30s

##########13  Рубаем тех, кто в HELO пихает localhost или наш домен
    deny    hosts         = !127.0.0.1 : !localhost : !+relay_from_hosts: *
            condition     = ${if match{$sender_helo_name}{localhost|$primary_hostname|$domain}{yes}{no}}
            message       = "Spam Guard#13: Your host is not localhost!"
	    set acl_c11   = 13
	    set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
            logwrite      = MyBlock#13: Drop localhost MY_INF1
	    delay         = 30s

# хело проверили - поверяем адреса
#######################################################################################################
###########    пустого отправителя проверять не будем, но убъем позднее
  accept    senders       = :
            logwrite       = INPUT_CHECK:пропущена пустышка  MY_INF1

###########       запомним для секции data
  warn      set  acl_c17  = $local_part
            set  acl_c18  = $domain
            set  acl_c19  = $sender_address_domain

##########04     если у отправителя плохой первый символ "-", "_" или "|" и т.п.
  deny      condition     = ${if match{$sender_address}{\N^[-].*|^[_].*|^[/].*|^[|].*|^[.].*|^[/].*|^.*[%!/|]$\N}{yes}{no}}
            logwrite      = MyBlock#04: Bad sender MY_INF1 
            message       = Spam Guard#04: Bad First Symbol '_-|' blocked!!
##            hosts         = !127.0.0.1 : !+relay_from_hosts
 	    set acl_c11   = 4
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    delay         = 30s

##########05     если у получателя плохой первый символ "-", "_" или "|" и т.п.
  deny      message       = Restricted characters in address
###            condition = ${if match{$local_part}{\N^[-].*|^[_].*|^[/].*|^[|].*|^[.].*|^[/].*|^.*[@%!/|]$\N}{yes}{no}}
            local_parts   = ^[./|] : ^.*[@%!/|] : ^.*/\\.\\./
            set acl_c11   = 5
            set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
            logwrite      = MyBlock#05: Bad first symbol MY_INF1
            message       = "Spam Guard#05: Bad First Symbol in local_part '_-|' blocked!!!"
            delay         = 30s

##########14      блокируем при попытке прислать на "закрытый" адрес + в блэклист sender email
  deny      message       = "Spam Guard#14: hard spams: $local_part@$domain in black list"
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
            condition     = ${lookup mysql{SELECT rule FROM blackemail WHERE email='${quote_mysql:$local_part@$domain}'}}
	    logwrite      = MyBlock#14: Close address MY_INF1
 	    set acl_c11   = 14
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
            delay         = 30s

##########16      блокируем email отправителя, если он в  списке чёрных доменов
  deny      message       = "Spam Guard#16: Your domain in black list"
            sender_domains = +bad_domain
 	    set acl_c11   = 16
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
	    logwrite      = MyBlock#16: 2-black email MY_INF1 
            delay         = 30s

##########17      блокируем за попытку писать на служебные адреса, которые не используем в работе
  deny      message       = "Spam Guard#17: Your domain add to black list : not use my reserved name"
            domains       = +local_domains
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
            local_parts   = SPAM_LIKE
 	    set acl_c11   = 17
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
	    logwrite      = MyBlock#17: spam like MY_INF1 
            delay         = 30s

##########       письмо локальному  реальному юзеру доставить сможем, если примем ?
##########18     если получатель не найден - отправителя в черный ящик
  deny      message       = "Spam Guard#18: Unknow recipient.... "
            domains       = +local_domains : +relay_to_domains
	    !verify       = recipient
	    logwrite      = MyBlock#18: unknow users MY_INF1 
#                         чтоб своих не внести в черный список
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
###	                 на всякий случай, если "черный" емайл идет с другого (нового) хоста 
            set acl_c11   = 18
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
            delay         = 30s

##########20    Проверка SPF :  этот может слать отсюда?
 deny       message       = "Spam Guard#20: [SPF] $sender_host_address is not allowed to send mail from $sender_address_domain" 
            hosts         = !+relay_from_hosts :  * 
            spf           = fail 
 	    set acl_c11   = 20
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
            logwrite      = MyBlock#20: SPF Fail : MY_INF1 /$spf_received/
##            log_message = SPF check failed 
##            logwrite      = "SPF-1 status: spf_result = $spf_result; spf_smtp_comment = $spf_smtp_comment"
	    delay         = 30s

##########31    пришлось добавить эту проверку т.к.SPF не всегда отлавливает подлог
  deny      message       = Spam Guard#31:  $sender_host_address is not allowed to send mail from $sender_address_domain
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
            sender_domains = +local_domains
 	    set acl_c11   = 31
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
            logwrite      = MyBlock#31: from me to me : MY_INF1
	    delay         = 30s

##########       отравитель состоял в близких связях с нами ? (на всякий случай, чтоб не забанить важного клиента)

  warn      domains       = +local_domains : +relay_to_domains
            set acl_c10   = ${lookup mysql{SELECT 1 FROM blackemail WHERE email='${quote_mysql:$sender_address}' AND rule=0}}
###              запомним адрес или снимем спам-блокировку 
            set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDWHITE}}}{0}}
            logwrite      = INPUT_CONNECT_TRUST_USER:[$acl_c12] MY_INF1
                
##########	отправителя проверить можно  ?
##########19     отправитель не найден ->  в черный ящик его
  deny     !condition     = $acl_c10
            domains       = +local_domains : +relay_to_domains
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
           !verify        = sender
            message       = "Spam Guard#19: We not allow messages from untrusted users.... "
 	    set acl_c11   = 19
###	                 на всякий случай, если "черный" емайл идет с другого (нового) хоста 
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
	    logwrite      = MyBlock#19: black email MY_INF1 
            delay         = 30s

##########37    слишком много получателей для одного письма
  deny      message       = Spam Guard#37:  so many recipients .... not allow...
            hosts         = 127.0.0.1 : !+relay_from_hosts : *
            condition     = ${if >{$rcpt_count}{MAX_USERS}{yes}{no}}
 	    set acl_c11   = 37
	    set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
	    set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
            logwrite      = MyBlock#37: many recipients : MY_INF1 
	    delay         = 30s

###########34  нули в заголовке

###########35 check RBL если хоцца

###########36 проверить связку емайл - релей (думаем тут)

#######    письмо идет от нас наружу 

warn       hosts         = +relay_from_hosts
           domains       = !+local_domains
####       клиент попал уже в черный список ?           
           set acl_c14   = ${lookup mysql{SELECT iphost FROM blackemail WHERE email='${quote_mysql:$local_part@$domain}'}}
           logwrite      = базе input : $acl_c14
####       такого адресата еще не было - подставим IP нашего отправителя, если клиент в списке - оставим его адрес
           set acl_c14   = ${if eq{$acl_c14}{}{$sender_host_address}{$acl_c14}}
####       клиент не найден или мусор в базе от фетчмайла           
           set acl_c14   = ${if eq{$acl_c14}{0|127.0.0.1|-1}{$sender_host_address}{$acl_c14}}
           logwrite      = записи output : $acl_c14
           set acl_c13   = ${lookup mysql{MYSQL_WHITE_EMAIL}}
           logwrite      = OUTPUT_MAIL [$acl_c13]: MY_INF1 
           set acl_c12   = ${lookup mysql{MYSQL_UPDTWHITE}}
           logwrite      = OUTPUT_MAIL-2  [$acl_c12]: Change to white IP [$acl_c14 for $local_part@$domain 


#############  проверку получателя делали ранее - поэтому просто принимаем все, что для нашего домена и от/для релеев
  accept    domains = +local_domains : +relay_to_domains

  accept    hosts         = +relay_from_hosts 
            control       = submission

  accept    authenticated = *
            control       = submission

##########03  за попытку отрелеить нас ==> в самый черный список
  deny
          hosts         = !+relay_from_hosts : *
          set acl_c11   = 3
          set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
#	  set acl_c12   = ${lookup mysql{MYSQL_ADDBLACK}}
          set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
          logwrite      = MyBlock#03: Block open relay / MY_INF1
	  message       = Spam Guard#03: Access deny - this not open relay! here vam ne tut!!!
	  delay         = 30s

  accept    logwrite      = MyBlock#xx: Warning!!! Loook why?

######################################################################

acl_check_predata:

#########   Прибиваем с пустым отправителями (<>) используется для проверки существования E-Mail'а
#########   тут срежутся и (псевдо) рикошеты (от спамеров) - если нужны, то нужно принять выше этого правила
  deny    message       = "Unknown empty user"
          senders       = : postmaster@* : Mailer-Daemon@*
          logwrite       = INPUT_CHECK:убили пустышку  $sender_host_address [$sender_host_name] ==> $local_part@$domain

  accept

acl_check_data:
#########       этот лог можно включить чтобы отслеживать что пришло сюда и не дошло до акцепта
###   warn   logwrite      = INPUT_DATA: MY_INF2 /$acl_c17 @ $acl_c18/
###
      warn   set acl_c15   = ${md5:$message_body}
  logwrite      = INPUT_DATA: acl_c15 = $acl_c15
 



##########39   пустой отправитель и mailer-daemon (или общий случай -> return-path не соответветсвует адресу from)
 
##########29   порверить количество  кол-во в TO  CC  BCC

##########30   проверить реальный IP адрес если письмо идет через релей, а релей блокировать низзя

##########21     если у отправителя есть плохие символы в имени его  
  deny  !condition    = $acl_c10     
        condition     = ${if match{$h_FROM:}{\N[|]|[!]|[%]|[}]|[{]|[?]|[=]\N}{yes}{no}}
        set acl_c11   = 21
        set acl_c12   = ${if !eq{$sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
        set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
        set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
        logwrite      = MyBlock#21: Bad Symbol in FROM: [$h_FROM] blocked!! MY_INF2
        message       = "Spam Guard#21: Bad Symbol in email $h_FROM:  blocked!!!"
        delay     = 30s

##########22     если у отправителя или получателя есть нехорошие знакомые слова
  deny  !condition    = $acl_c10     
        condition     = ${if match{$h_TO:}{BAD_XXX}{yes}{no}}
        set acl_c11   = 22
        set acl_c12   = ${if !eq{$sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
        set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
        set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
        logwrite      = MyBlock#22: Bad sex in TO: > $h_TO < blocked!! MY_INF2
        message       = "Spam Guard#22: Bad sex in email $h_TO:  blocked!!!"
        delay         = 30s

##########23     если у отправителя есть NUL-символы => кривые руки у скрипача 
  deny  !condition    = $acl_c10 
         message       = Spam Guard#23: This message contains NUL characters
         condition     = ${if > {$body_zerocount}{0}{1}{0}}
         set acl_c11   = 23
         set acl_c12   = ${if !eq{$sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
         set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
         set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
         logwrite      = MyBlock#23: NUL characters MY_INF2
         delay         = 30s

##########38    слишком много получателей для одного письма
  deny   message       = Spam Guard#38:  so many recipients .... not allow...
         hosts         = 127.0.0.1 : !+relay_from_hosts : *
         condition       = ${if >{$recipients_count}{MAX_USERS}{yes}{no}}
         set acl_c11   = 38
         set acl_c12   = ${if !eq{$sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
         set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
         set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
         logwrite      = MyBlock#38: many recipients : MY_INF1 
         delay         = 30s

##########24     за попытку прислать то, что не просили 
  deny   message       = Spam Guard#24: This message contains $found_extension file(s)
##      !condition    = $acl_c10    ### от наших можно если очень хоцца ####  
         demime        = exe:com:bat:vbs:pif:scr:js:lnk:wav:cpl
         set acl_c11   = 24
         set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
         set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
         set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
         logwrite      = MyBlock#24: Bad includes:  $found_extension files / MY_INF2 
         delay         = 30s

###########25   Проверяем письмо на вирусы, если есть вложения из числа дозволенных - без вложений не проверяем вовсе
############ deny <- если очень хочется
  warn  set acl_m1 = 0
        demime       = *
###                  исходящую почту не проверяем, за исключением 127.0.0.1 т.к. тут идут письма от fetchmail 
        hosts        = 127.0.0.1 : !+relay_from_hosts : *
        malware      = *
        add_header   = "Subject: [VIRUS FOUND] $h_subject"
        logwrite     = MyBlock#25-01: VIRUS!!!!  MY_INF2 -==- VIRUS ==> $malware_name" 
        set acl_c11  = 25
###                  для разгреба в систем-фильтре
        set acl_m1   = 1

#########   если отправитель не из нашего списка,  впервые зашел и зразу гадит - в черный список его
 deny  !condition    = $acl_c10 
        condition    = $malware_name  
        set acl_c11   = 25
        set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
        set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
        set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
        message       = Spam Guard#25: This message contains  $found_extension files 
        logwrite      = MyBlock#25: Stop Virus  $found_extension / MY_INF2 


###########40   такой спам уже получали
###########     теперь идет с другого адреса и/или хоста
###### deny
 warn   logwrite      = Check repeate spam input
        condition     = ${lookup mysql{SELECT 1 FROM spamers WHERE mdbody='$acl_c15'}}
        logwrite      = Check repeate spam input ==> Spam Found !!! 
        set acl_c11   = 40
        set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
        set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}


###########26   Проверяем письмо на спам, не от наших только, размером меньше 30К
###             исходящую почту не проверяем, за исключением 127.0.0.1 т.к. тут идут письма от fetchmail 
 warn   set acl_m0   = 0
        hosts        = 127.0.0.1 : !+relay_from_hosts : *
        condition = ${if <{$message_size}{MAX_SPAM_SIZE}}
       !condition    = $acl_c10 
   logwrite      = ControlPoin#26-01 Cheks spam here: sender= $sender_address  acl_c10 = >$acl_c10<
        spam       = spammerrs
       add_header = X-Spam_score_L: $spam_score\n\
                    X-Spam_score_int_L: $spam_score_int\n\
                    X-Spam_bar_L: $spam_bar\n\
                    X-Spam_report_L: $spam_report
##             для разгреба в систем-фильтре
     set acl_m0 = $spam_score_int

#########   если отправитель не из нашего списка,  впервые зашел и зразу гадит -> в черный список его
#########   попавших по ошибке правим ручками или скриптом при отправке письма от наших
#########   для тех, кто в белом списке эта проверка не опасна 
###deny
warn  
        !condition    = $acl_c10 
        condition     = ${if >{$acl_m0}{50}{yes}{no}}
   logwrite      = ControlPoin#26-02 Cheks spam First Dilivery : sender= $sender_address  acl_c10 = >$acl_c10<
        set acl_c11   = 26
        set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
        set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
        set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
        message       = Spam Guard#26: This spam message  
        logwrite      = MyBlock#26: This spam message / MY_INF2

##########27 если отправитель не из нашего списка и письмо маленькое и есть (порно)картинки - в спам его
##################
##deny
  warn    
          hosts         = 127.0.0.1 : !+relay_from_hosts : *
         !condition    = $acl_c10   
          condition     = ${if <{$message_size}{MAX_SPAM_SIZE}}
          condition     = ${if <{$acl_m0}{50}{yes}{no}}
          demime        = gif:jpg:jpeg:png
###                   для разгреба в систем-фильтре   
          set acl_m0    = 77
          set acl_c11   = 27
          set acl_c12   = ${if !eq{sender_host_address}{127.0.0.1}{${lookup mysql{MYSQL_ADDBLACK}}}{0}}
          set acl_c13   = ${lookup mysql{MYSQL_ADDEMAIL}}
          set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}
          message       = Spam Guard#27: This spam message with bad pictures
          logwrite      = MyBlock#27: This picture spam  / MY_INF2

##############################################################################

###########28  если письмо маленькое и содержит ссылку img в тексте
###########    или содержит ссылку на внешний ресурс

#############################################################################
 
######   пишем историю для начальства и статистики
######   письмо из мира  
 warn   hosts         = 127.0.0.1 : !+relay_from_hosts : *
        set acl_c11   = 1
###               посылатель не из нашего списка или впервые пришел и как спам не опознан
#        logwrite      = INPUT_LAST: acl_c15 = $acl_c15   acl_c10 = >$acl_c10<
        !condition    = $acl_c10   
        set acl_c16   = ${lookup mysql{MYSQL_ADDSPAM}}

#####    письмо в наружу       
 warn   hosts         = !127.0.0.1 : +relay_from_hosts
        set acl_c11   = 2

#####    письмо в локали
 warn   condition     =${if eq{$acl_c19}{$acl_c18}{yes}{no}}
        set acl_c11   = 3
 warn   set acl_c12   = ${lookup mysql{MYSQL_HISTORY}}
        logwrite      = INPUT_ACCEPT:   MY_INF2 

 accept 

######################################################################
#                      ROUTERS CONFIGURATION                         #
#               Specifies how addresses are handled                  #
######################################################################



Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-10 15:20:57
Гость
А на структуру таблиц взглянуть можно?

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 5:45:12
lerryc
Гость писал(а):А на структуру таблиц взглянуть можно?
монна....

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

--
-- Структура таблицы `blackemail`
--

CREATE TABLE IF NOT EXISTS `blackemail` (
  `email` varchar(255) NOT NULL,
  `rule` tinyint(2) default '1',
  `iphost` varchar(16) NOT NULL default '127.0.0.1',
  `dates` timestamp NOT NULL default CURRENT_TIMESTAMP,
  UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

=====================================

--
-- Структура таблицы `blackhost`
--

CREATE TABLE IF NOT EXISTS `blackhost` (
  `iphost` varchar(16) NOT NULL,
  `rule` tinyint(2) default '1',
  `comment` varchar(255) NOT NULL,
  `dates` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `hostname` varchar(255) NOT NULL,
  UNIQUE KEY `iphost` (`iphost`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

=====================================

--
-- Структура таблицы `mailhistory`
--

CREATE TABLE IF NOT EXISTS `mailhistory` (
  `way` char(1) NOT NULL,
  `sender` varchar(255) NOT NULL,
  `recipient` varchar(255) NOT NULL,
  `sizes` bigint(20) NOT NULL,
  `dates` timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

==============================

--
-- Структура таблицы `spamers`
--

CREATE TABLE IF NOT EXISTS `spamers` (
  `mdbody` char(32) NOT NULL,
  `iphost` varchar(16) NOT NULL,
  `sender` varchar(255) NOT NULL,
  `spcount` bigint(20) NOT NULL default '1',
  `dates` timestamp NOT NULL default CURRENT_TIMESTAMP,
  UNIQUE KEY `mdbody_2` (`mdbody`,`iphost`),
  KEY `mdbody` (`mdbody`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

====================================
хотя структура принципиальной роли не играет и будет еще меняться по ходу пьесы (под будущие идеи)

могу отдать (кому надо?) и 10,000 е-адресов + 45,000 блэк-хостов (в мускуле это меньше 4 МБ )

и небольшое замечание

Для ускорения процесса обработки (отлупа с наименьшим трафиком) лучше использовать, имхо, такую конфигурацию для ACL'ов

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

acl_smtp_connect = acl_check_connect
acl_smtp_helo = acl_check_helo
acl_smtp_rcpt    = acl_check_rcpt
acl_smtp_predata = acl_check_predata
acl_smtp_data    = acl_check_data
а не то, что принято в "общепринятой" конфигурации

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

acl_smtp_rcpt    = acl_check_rcpt
acl_smtp_data    = acl_check_data

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 10:52:44
Гость
По какой причине EXIM может ругаться при запуске c вышеупомянутыми настройками ACL'ов:

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

Starting exim.
2008-12-11 11:11:07 Exim configuration error in line 297 of /usr/local/etc/exim/configure:
  "acl_smtp_rcpt" option set for the second time

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 11:04:46
lerryc
а кусок конфига с 293 по 298-ю строку ?
(повторное объявление - на этом расстоянии от начала конфига этой директивы как бы не должно быть)

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 11:11:05
Гость
Ну собственно он представляет из себя любезно выложенный вами конфиг... а строки:

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

MIN_SPAM_SIZE   = 5K

MAX_USERS       = 4

###################################
acl_smtp_connect   = acl_check_connect
acl_smtp_rcpt        = acl_check_rcpt
acl_smtp_predata  = acl_check_predata
acl_smtp_data       = acl_check_data

####################################

######################################################################
#                       ACL CONFIGURATION                                                                #
######################################################################

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 11:18:32
Гость
Спасибо за совет. Причину нашел. Еще EXIM в лог льет ошибку, что не определяет список +bad_domain?

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 12:01:10
lerryc
Гость писал(а):Спасибо за совет. Причину нашел. Еще EXIM в лог льет ошибку, что не определяет список +bad_domain?
обычный список\перечень доменов, с которых почта не принимается
кто-то любит доставать из мускула, кому-то хватает пары строк чтоб перечислить все, я беру из внешнего файла

как удобно - так и делай

поскольку этот кусок конфига у всех мало чем отличается от "стандарта" - я его и не приводил

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-11 16:39:20
Lehan

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

acl_check_data:
deny   demine       = exe:com:bat:vbs:pif:scr:js:lnk:wav:cpl
          message     = "SpamGuard: This message contains $found_extension file(s)"
          logwrite      = "SpamGuard: Bad attachment: $found_extension"

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

Starting exim.
2008-12-11 16:39:35 Exim configuration error in line 515 of /usr/local/etc/exim/configure:
  error in ACL: unknown ACL condition/modifier in "deny    demine       = exe:com:bat:vbs:pif:scr:js:lnk:wav:cpl"
Пересобирал exim с опцией WITH_OLD_DEMINE:
Выдержка из make.conf

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

WITH_OLD_DEMIME=        yes
Как быть?

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-12 2:46:04
lerryc
Lehan писал(а): Пересобирал exim с опцией WITH_OLD_DEMINE:
Выдержка из make.conf

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

WITH_OLD_DEMIME=        yes
Как быть?
хюзю, если честно
это BSD'ёвые штучки по всей видимости, у меня екзим из коропки под линуксом - ничего специального в конфигах не крутил
посмотри в опциях (если есть) что-нить касатально "with scan" - т.е. секцию относительно проверки на вирус и спам
может эти опции взаимосвязаны

2.
убери этот ACL из конфига и посмотри - дойдет ли дело до проверок на спам и вирусы

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-12 9:24:54
Alex Keda
документацию ни тот ни другой ниасилили?
========
вариантов два - либо не то собрал, либо такой больше нет, поскольку она устарела.

Re: 40 правил антиспама / SpamGuard ?

Добавлено: 2008-12-18 18:09:20
Lehan
Вариантов, в итоге, было три :)
Ошибся в написании: я написал demine вместо demime и не заметил.

demime все еще работает.