
Опишу еще пару директив настройки exim'а для борьбы со спамом.
Первая основана на возможности проверки sender адреса регулярными выражениями.
Тонкость в том, что на входе имеем полный адрес, а выражение находится в табличке в базе. Выражение должно быть в определенном формате, поэтому в таблице будет находиться всего одна строка 

CREATE TABLE `rejectM` (
  `address` text NOT NULL
);
ACL'ка exim'а:
deny    message = You are SPAM sender. Not accepted.
        senders = ${lookup mysql {select * from rejectM}{$value}{}}
Запись (
единственная!) в таблице должна быть такого вида:
insert into rejectM values ('^.*@.*modemcable.*:^.*@pppd+.*:^.*@pppoe.*:^.*@.*dhcp.*:^.*@.*\.nat\..*:^.*@.*dialup.*');
 И начинаться обязательно с 
^ ! Через двоеточия - регулярные выражения.
Вторая - обработка HELO приглашения.
Очень часто используются специфические helo, "выдающие" диалапы и тому подобные хосты.
Проверять на полное совпадение - слишком много данных. А вот на часть helo - самое то.
Табличка:
CREATE TABLE `ehloP` (
  `ehlo` varchar(96) NOT NULL default '',
  PRIMARY KEY  (`ehlo`)
);
ACL'ка exim'а:
deny    message = You are SPAM sender. Not accepted.
        condition = ${lookup mysql {select 1 from ehloP where \
                    ehlo='${sg{$sender_helo_name}{^[^\.]*\\.(.*)\$}{\$1}}' limit 1}{$value}}
        hosts = ! +relay_hosts
 Проверка происходит на HELO с отбрасыванием его части до первой точки.
Т.е. если передаваемый 
ehlo p-1-2-3-4.client.comcast.net, то в табличку надо занести 
insert into ehloP values ('client.comcast.net');
Хочу обратить внимание, что автоматизированное занесение данных в таблички блокировок может иметь самые неожиданные последствия 

 Ведь не секрет, что всякие трояны, рассылающие спам с машин конечных пользователей, используют их адреса в качестве обратного. А так-же, происходят всякие "подставы".
Поэтому, данные должны тщательно анализироваться и только после этого заноситься в блок-листы.
 
"No!  Try not!  Do.  Or do not.  There is no try." -- Yoda