Страница 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
Как быть?
Re: 40 правил антиспама / SpamGuard ?
Добавлено: 2008-12-12 2:46:04
lerryc
Lehan писал(а):
Пересобирал exim с опцией WITH_OLD_DEMINE:
Выдержка из make.conf
Как быть?
хюзю, если честно
это 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 все еще работает.