|
Matthew B-M: Mailfilter: Full Version |
|||||||
|
(please note: the regexps and spamtraps I use on this version of the page are different to the ones I use for my own personal email, I strongly recommend that you don't use the ones here...) In order to get this to work, you will need the following components: $ mkdir ~/mailfilter $ touch ~/mailfilter/black.list $ touch ~/mailfilter/black.domains $ touch ~/mailfilter/black.servers $ touch ~/mailfilter/grey.servers $ touch ~/mailfilter/use.once and you will have had to create the files:
# Exim filter
# Allow mail delivery failures through
if error_message then
finish
endif
# Allow postmaster access
if $original_local_part is postmaster then
finish
endif
# if we have blacklisted this server, send the sender
# a message telling them so.
if ("${lookup{$sender_host_address} lsearch {$home/mailfilter/black.servers}{$value}}" is "black")
then
seen mail expand file $home/mailfilter/blh-bounce
to $return_path return message
subject "Returned mail: blacklisted"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: host already blacklisted"
finish
endif
# if we have blacklisted this sender's domain, then send them
# a mail telling them so.
if ("${lookup{${domain:${lc:$sender_address}}} lsearch {$home/mailfilter/black.domains}{$value}}" is "black")
then
seen mail expand file $home/mailfilter/bld-bounce
to $return_path return message
subject "Returned mail: blacklisted domain"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: already blacklisted"
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "grey")
then
logwrite "[$tod_log] *** [$sender_host_address]: blacklisted host"
logfile $home/mailfilter/black.servers 0644
logwrite "$sender_host_address: black"
else
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "")
then
logfile $home/mailfilter/grey.servers 0644
logwrite "$sender_host_address: grey"
endif
endif
finish
endif
# if we have blacklisted this sender, then send them
# a mail telling them so.
if ("${lookup{${lc:$sender_address}} lsearch {$home/mailfilter/black.list}{$value}}" is "black")
then
seen mail expand file $home/mailfilter/bl-bounce
to $return_path return message
subject "Returned mail: blacklisted"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: already blacklisted"
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "grey")
then
logwrite "[$tod_log] *** [$sender_host_address]: blacklisted host"
logfile $home/mailfilter/black.servers 0644
logwrite "$sender_host_address: black"
else
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "")
then
logfile $home/mailfilter/grey.servers 0644
logwrite "$sender_host_address: grey"
endif
endif
finish
endif
# if we have seen this address in the use once list, it
# is no longer valid.
if ( ${lc:$original_local_part} matches "^(.*?)(-[a-z0-9-+=]*)?\\\$" )
then
if ("${lookup{${lc:$1}} lsearch {$home/mailfilter/use.once}{$value}}" is "used")
then
seen mail expand file $home/mailfilter/used-bounce
to $return_path return message
subject "Returned mail: address no longer valid"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: reuse of a single-use address"
finish
endif
endif
# spambait addresses, will automatically blacklist you and mark
# your server down as being grey or black
if ( ${lc:$original_local_part} is "spamdump" or
${lc:$original_local_part} matches ^\\d?[a-z]{3}\\d+(-[a-z0-9+=-]*)?\$)
then
seen mail expand file $home/mailfilter/spam-bounce
to $return_path return message
subject "Returned mail: blacklisted"
logfile $home/mailfilter/black.list 0644
logwrite "${lc:$sender_address}: black"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: blacklisted"
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "grey")
then
logwrite "[$tod_log] *** [$sender_host_address]: blacklisted host"
logfile $home/mailfilter/black.servers 0644
logwrite "$sender_host_address: black"
else
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "")
then
logfile $home/mailfilter/grey.servers 0644
logwrite "$sender_host_address: grey"
endif
endif
finish
endif
# open relay warnings. If your server is already listed as
# grey, then it is blacklisted by this.
if ( $header_X-RBL-Warning contains "mail-abuse.org" )
then
seen mail expand file $home/mailfilter/rbl-bounce
to $return_path return message
subject "Returned mail: blacklisted"
logfile $home/mailfilter/reject.log 0644
if ( $header_X-RBL-Warning contains "mail-abuse.org" ) then
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: on rbl (MAPS ONLY)"
endif
if("${lookup{$sender_host_address} lsearch {$home/mailfilter/grey.servers}{$value}}" is "grey")
then
logwrite "[$tod_log] *** [$sender_host_address]: blacklisted host"
logfile $home/mailfilter/black.servers 0644
logwrite "$sender_host_address: black"
endif
finish
endif
# this is a use-once address, deliver it as normal, but
# log the use of the address.
if ( ${lc:$original_local_part} matches ^(^[a-z]{2}\\d{2}[a-z]{3}\\d{2})(-[a-z0-9+=-]*)?\$)
then
logfile $home/mailfilter/use.once 0644
logwrite "${lc:$1}: used"
endif
add 0 to n1
add 0 to n2
add 0 to n3
if ( $tod_log matches "^(\\\\d{4})-0*(\\\\d+)-0*(\\\\d)\\\\s" ) then
add $1 to n1
add $2 to n2
add $3 to n3
endif
if ( ${lc:$original_local_part} matches "^\\\\$0*(\\\\d+)\\\\$0*(\\\\d+)[a-z]0*(\\\\d+)\\\\d\\$(-[a-z0-9-+=]*)?\\\$" ) then
add $1 to n6
add $2 to n4
add $3 to n5
add 1977 to n4
add -52 to n5
add -9 to n6
if ( ( $n1 is above $n4 ) or
( $n1 is $n4 and $n2 is above $n5 ) or
( $n1 is $n4 and $n2 is $n5 and $n3 is above $n6 ) or
( $n4 is below 1 or $n5 is below 1 or $n6 is below 1 ) )
then
seen mail expand file $home/mailfilter/time-bounce
to $return_path return message
subject "Returned mail: address no longer valid"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: address timed out (expired $n4-$n5-$n6)"
finish
endif
endif
# scoring algorithms, I don't tend to get these in legitimate mail.
# we'll use n9 for scoring - 100 and we reject the mail
if( ${lc:$message_body} matches "a\\\\shref=(['\"])mailto:([^@]@[^@])\$1" and
$2 is not {$lc:$return_path} and $2 is not {$lc:$sender_address})
then
add 60 to n9
endif
if (${lc:$message_body} matches "<html>")
then
add 60 to n9
endif
if (${lc:$message_body} matches "<script")
then
add 90 to n9
endif
if (${lc:$message_body} matches "checks?\\\\spayable\\\\sto.*for \\\\\\$\\\\d+")
then
add 90 to n9
endif
if($message_body matches "Dear Friend,")
then
add 80 to n9
endif
if(${lc:$header_subject} matches "\\\\s\\\\s\\\\s\\\\s+(\\\\(\\\\d+\\\\)|\\\\d+)\\\$")
then
add 40 to n9
endif
if(${lc:$header_to} matches "friend@" or ${lc:$header_from} matches "friend@")
then
add 90 to n9
endif
if(${lc:$header_to} matches "@public.com")
then
add 90 to n9
endif
if(${lc:$message_body} matches "not spam" or ${lc:$message_body} matches "spam free")
then
add 80 to n9
endif
if(${lc:$message_body} matches "not junk mail")
then
add 80 to n9
endif
if(${lc:$message_body} matches "university diploma")
then
add 80 to n9
endif
if(${domain:${lc:$header_to}} is "")
then
add 30 to n9
endif
if(${lc:$sender_address} matches "([a-z\\\\d]+)@(lycos|hotmail|aol|yahoo|msn)\\\\.co(\\\\..*|m)" and
$1 matches \\d)
then
add 40 to n9
endif
if($header_subject matches \\\$\\\$+)
then
add 50 to n9
endif
if(${lc:$sender_host_name} matches "ppp" or ${lc:$sender_host_name} matches "dial-?up")
then
add 50 to n9
endif
if($n9 is above 99)
then
seen mail expand file $home/mailfilter/score-bounce
to $return_path return message
subject "Returned mail: failed score checking"
logfile $home/mailfilter/reject.log 0644
logwrite "[$tod_log] ${lc:$sender_address} [$sender_host_address] -> ${lc:$original_local_part}@${lc:$original_domain}: score failure"
finish
endif
|
This page last modified on
Monday, 05-Feb-2018 19:43:34 UTC
Contact <webmaster@colondot.net> for more information about this
site, or <plunder@colondot.net> if you want not to be able to send
any more mail to this machine.