Опишу еще пару директив настройки 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