Ivanovo Linux Users Group -  
Форум Помощь Поиск Вход
Предыдущая Следующая Вверх Тема Администрирование / Общее администрирование / Exim и борьба со спамом (20827 хитов)
- Написал(а) LOE (Site/forum admin) Дата 09.08.05 20:16
Опишу еще пару директив настройки 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
Parent Написал(а) PAHA Дата 09.08.05 22:58
хм весьма полезно
утром будем пробовать :-)
Parent - Написал(а) PAHA Дата 10.08.05 16:36
думаю можно ещё использовать ответный запрос на наличие такого ящика у отправителя
также можно посылать тех у кого не прописано в обратном днсе имя домена, хотя по этому поводу идет много споров

кстати по поводу автоматики добавления в блек листы , сегодня поглядел результат, не порадовал :-)
Parent Написал(а) LOE (Site/forum admin) Дата 10.08.05 17:30

>думаю можно ещё использовать ответный запрос на наличие такого ящика у отправителя


Пробовал.
Создал ящик на mail.ru, посылаю с него на себя письмо. Включено require verify = sender/callout
В результате, mail.ru "посылает" меня с сообщением "нет такого юзера".

Т.е. метод хороший. Однако и тут есть подводные камни...
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) LOE (Site/forum admin) Дата 10.08.05 18:09
Эх. Не прав был я.
Не была включена одна опция, в результате фактической проверки не производилось.
Сейчас всё включил - посмотрим на поведение.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) G0thic Дата 11.08.05 22:00
Ну как? чего за опция?
Когда кругозор человека сужается к минимуму, он называет это своей точкой зрения.
Parent Написал(а) LOE (Site/forum admin) Дата 12.08.05 07:00
В роутере lookuphost (driver=dnslookup) стояла опция no_verify
Соответственно, когда надо было обратно сроутить входящий адрес, чтобы выполнить соединение и проверить наличие юзера на удаленной стороне, exim не мог это сделать :-)
В логах за это время уже 389 отлупов по проверке отсутствия адреса отправителя.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) PAHA Дата 15.08.05 13:00
а примерчик можно ?
Parent - Написал(а) LOE (Site/forum admin) Дата 15.08.05 14:05
В нужном месте в блоке ACL'ек поставил:
require verify = sender/callout=defer_ok,no_cache/no_details
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent Написал(а) PAHA Дата 17.08.05 20:07
Спасибо
будем пробовать и тестить
и вобще как начал юзать Exim уже более 6 тыщ отлучпов за неделю с небольшим
Parent - Написал(а) PAHA Дата 18.08.05 10:23
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, то в табличку надо занести

а если надо занести домен второго уровня тогда как писать в базу ???
вот мне надо занести домен swip.net
пишу туда swip.net
и пробовал *.swip.net
но всеравно он не сразу их отлупливает они залазиют сначала в  Грей лист а должны сразу улетать
Parent - Написал(а) LOE (Site/forum admin) Дата 18.08.05 10:48

>Т.е. если передаваемый ehlo p-1-2-3-4.client.comcast.net, то в табличку надо занести client.comcast.net


ты уж цитируй до конца.

Если  тебе передают swip.net, то в моем случае заносить надо (бы) net
Однако это сразу отрежет и кучу других.
Если передают ip123.swip.net - то и в таблицу заноси swip.net
Неужто не понятно? ;-)
Если надо обработать записи вида *.swip.net - то модифицируй select к базе.

А вот почему "залазиют сначала в Грей лист" - смотри
а) порядок ACL'ек
б) корректность данных в табличке.

И не забывай про отладку
exim -bh 1.2.3.4 -d+all - инициация SMTP сессии на консоли с полной отладкой.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) PAHA Дата 18.08.05 11:40
у меня с СКЛ плохо :-(((

Подскажи плиз как будет выборка чтобы отсекало сразу весь домен, может ещё одну ACL завести на домены паразиты

кстати если в блек лист занести (sender_host) 1.1.1.* то бдует резаться вся маска ??

ACL такого вида

deny    message = SPAM  !!! rejected, host $sender_host_address is in a local black list
        condition = ${lookup mysql {select 1 from spam_list where relay_ip='$sender_host_address' limit 1}{$value}}
        hosts = ! +relay_hosts
Parent Написал(а) LOE (Site/forum admin) Дата 18.08.05 18:54
То, что пропишешь, то и будет выбираться.
Если сказал where pole='что-то' - то и будет выбираться по полному равенству.
Если сказал where pole like 'что-то%' - то будет выборка по частичному совпадению.
Например, если в базе находится 1.2.3.4 и 1.2.5.6 а ты сказал where pole like '1.2.3.%' - то запрос выберет только 1.2.3.4
Поэтому, если хочешь выбирать по IP адресу, а в таблицу заносить IP сети, то надо (один из вариантов):
- занести в базу IP адрес без последней части (если IP=1.2.3.4 то в базу занести 1.2.3)
- сделать преобразование аналогично моему частичному helo, но отбросив последнюю часть с точкой
- сделать выборку по совпадению (where pole=)

Дело в том, что нельзя в базу класть именно маску. Поскольку exim не может без цикла сделать выборку масок и сравнить с имеющимся значением. Надо имеющееся значение (например IP адрес) преобразовать к нужному виду, а уж этот вид хранить в базе и делать выборку по совпадению.

Твой вариант будет выбирать по полному совпадению IP адреса. Никакие звездочки тут не помогут.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Предыдущая Следующая Вверх Тема Администрирование / Общее администрирование / Exim и борьба со спамом (20827 хитов)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 1.262s with 10 database queries.