Якщо хост надіслав лист на ханіпот – додати до локального RBL, після того, як він з’явився у публічному DNSBL – видалити з локальної бази нафіг.
# Шлях до БД локального RBL
RBL_DB = /var/db/exim/spam-source.db
# Список публічних поштових сервісів
hostlist public_services = net-iplsearch;/etc/exim/public-services
# Список негідників, які не дотримуються основних положень RFC5321
hostlist rfc_ignorants = net-iplsearch;/etc/exim/rfc-ignorants
# Список спамерів
hostlist spam_source = net-iplsearch;/etc/exim/spam-source : \
${lookup sqlite{RBL_DB \
SELECT ip_address \
FROM banned_hosts \
WHERE ip_address='$sender_host_address';}}
<...>
warn
set acl_m_dnsbl = 0
set acl_m_localrbl = 0
# Перевіряємо нявність хосту у публічних DNSBL-ах
warn dnslists = dnsbl.foobar.net : \
dul.foobar.net
!hosts = +relay_from_hosts : \
+public_services
!recipients = : soft_recipients
set acl_m_dnsbl = 1
# Перевіряємо нявність хосту у локальному RBL
warn hosts = +spam_source
!hosts = +relay_from_hosts : \
+public_services
!recipients = : soft_recipients
set acl_m_localrbl = 1
# Видаляємо з локального RBL, якщо хост знайдено у публічних DNSBL
warn log_message = "IP address found in public DNSBL: $dnslist_domain. Removing from local RBL."
condition = ${if and { \
{eq {$acl_m_dnsbl}{1}} \
{eq {$acl_m_localrbl}{1}} \
} {yes}{no}}
set acl_m_junk = ${lookup sqlite{RBL_DB \
DELETE FROM banned_hosts \
WHERE ip_address='$sender_host_address';}{$value}}
set acl_m_localrbl = 0
# Деферимо, якщо "пасажир" у публічному DNSBL
defer message = "Your IP address is listed in the DNSBL $dnslist_domain: dnslist_text ($dnslist_value)."
log_message = DEFERRED: Listed in $dnslist_domain.
condition = ${if eq{$acl_m_dnsbl}{1} {yes}{no}}
delay = 30s
# Локальний RBL
defer message = "Your IP address is listed in the local RBL as the spam source."
log_message = DEFERRED: Listed in local RBL
condition = ${if eq{$acl_m_localrbl}{1} {yes}{no}}
set acl_m_junk = ${lookup sqlite{RBL_DB \
UPDATE banned_hosts SET hit_count=hit_count+1, \
last_hit=datetime('now','localtime') \
WHERE ip_address='$sender_host_address';}{$value}}
delay = 30s
# Додаємо до локального RBL
warn log_message = "Gotcha! Spam trap: $local_part@$domain."
domains = myspamtrap.com : \
myspamtrap.net : \
myspamtrap.org
!hosts = +relay_from_hosts : +public_services
set acl_m_junk = ${lookup sqlite{RBL_DB \
INSERT INTO banned_hosts(ip_address, ptr, added) \
VALUES ('$sender_host_address', '$sender_host_name', datetime('now','localtime'));}{$value}}
<...>
База даних:
CREATE TABLE banned_hosts(
ip_address varchar(64),
ptr varchar(64),
added datetime,
last_hit datetime,
hit_count int default 0
);



