Серые списки в MTA Exim

Здесь обсуждаются вопросы настройки и администрирования почтового сервера Exim.
Писать в этот форум могут только зарегистрированные пользователи.

Модераторы: prefer, alexandrnew, ALex_hha, Roman, Axel

Ответить
sandro
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 49
Зарегистрирован: 08 июл 2008, 12:07

Серые списки в MTA Exim

Сообщение sandro » 04 сен 2008, 09:30

Имеется ли аналог postgrey в Exim. Может можно как-то прикрутить сам postgrey к Exim?

Аватара пользователя
corvax
Новичок
Новичок
Сообщения: 10
Зарегистрирован: 06 янв 2006, 15:52
Откуда: Kiev, Ukraine

Re: Серые списки в MTA Exim

Сообщение corvax » 14 сен 2008, 19:18

sandro писал(а):Имеется ли аналог postgrey в Exim.
да

http://www.google.com/search?as_q=exim& ... afe=images
sandro писал(а):Может можно как-то прикрутить сам postgrey к Exim?
да

http://www.google.com/search?as_q=postg ... afe=images
--
/corvax

Vulture
Новичок
Новичок
Сообщения: 4
Зарегистрирован: 11 мар 2009, 13:19

Re: Серые списки в MTA Exim

Сообщение Vulture » 11 мар 2009, 13:34

sandro писал(а):Имеется ли аналог postgrey в Exim. Может можно как-то прикрутить сам postgrey к Exim?
Если интерессно покажу другой способ внутренними средствами Exim

Добавляем в начало файла конфигурации exim

#########################################################################################
# Greylisting server config
#########################################################################################

GREYLIST_ENABLED_GREY = yes

.ifdef GREYLIST_ENABLED_GREY
GREYLIST_TEST = SELECT result, id FROM expire_time WHERE sender = '${quote_mysql:$sender_host_address}' ORDER BY result DESC LIMIT 1
GREYLIST_ADD = REPLACE INTO greylist (sender, stype, ctime) VALUES ('${quote_mysql:$sender_host_address}','a',now())
GREYLIST_DEFER_HIT = UPDATE greylist SET bcount=bcount+1, mtime=now() WHERE id = $acl_m9
GREYLIST_OK_COUNT = UPDATE greylist SET bcount=0, mtime=now() WHERE id = $acl_m9
.endif

после строки begin acl

##########################################################################################
# Greylist Access control list
##########################################################################################
.ifdef GREYLIST_ENABLED_GREY
greylist_acl:

warn set acl_m8 = ${lookup mysql{GREYLIST_TEST}{$value}{result=unknown}}
set acl_m9 = ${extract{id}{$acl_m8}{$value}{-1}}
set acl_m8 = ${extract{result}{$acl_m8}{$value}{unknown}}

accept condition = ${if eq {$acl_m8} {unknown} {1}}
condition = ${lookup mysql{GREYLIST_ADD}{yes}{no}}

accept condition = ${if eq{$acl_m8} {deferred} {1}}
condition = ${lookup mysql{GREYLIST_DEFER_HIT}{yes}{yes}}

warn condition = ${lookup mysql{GREYLIST_OK_COUNT}}
deny
.endif

после acl_check_rcpt:

.ifdef GREYLIST_ENABLED_GREY
defer hosts = !+relay_from_hosts
!authenticated= *
!senders = : postmaster@*
acl = greylist_acl
message = GreyListed: please try again later after 2 minutes
.endif

собственно сама таблица в базе

create table `greylist` (
`id` bigint not null primary key auto_increment
,`sender` varchar(15) not null
,`stype` enum('a','m') not null default 'a'
,`ctime` datetime not null
,`mtime` timestamp not null default CURRENT_TIMESTAMP()
,`bcount` integer not null default '1'
,unique(sender)) ENGINE=MYISAM;

и вьющка на таблицу

CREATE VIEW expire_time AS
select
`id` AS `id`
,(case when (now() > (`ctime` + interval 2 minute)) then 'accept' else 'deferred' end) AS `result`
,`sender` AS `sender`
from
`greylist`;

Ну и каждый день очистка всех у кого поле bcount болше 0

Если нужен больше интервал задержки изменить во вьюшке на нужное количество минут.
Админ это обезбашенный алкоголик с неограниченной сетевой властью и длинными загребущими руками

Ответить