exim greylist

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
uHk
мл. сержант
Сообщения: 134
Зарегистрирован: 2008-05-21 15:16:48
Откуда: Москва
Контактная информация:

exim greylist

Непрочитанное сообщение uHk » 2009-07-02 17:26:44

в полезных советах выложил копипаст с форума, но потом подумал и решил переделать.
была проверка по relay_ip, стало - relay_ip+sender+recipient
за время блокировки отвечает

Код: Выделить всё

interval 5 minute
раз в сутки удаляются записи, где не было успешных попыток доставки, успешные удаляются после 2 месяцев "простоя"

вот что получилось:

Код: Выделить всё

######################################################################################
# Tables
######################################################################################
create table `greylist_ink` (
`id` bigint not null primary key auto_increment
,`relay_ip` varchar(15) not null
,`sender` varchar(64) not null
,`recipient` varchar(64) not null
,`ctime` datetime not null
,`mtime` timestamp not null default CURRENT_TIMESTAMP()
,`bcount` integer not null default '1'
, unique (`relay_ip`,`sender`,`recipient`)) ENGINE=MYISAM;

CREATE VIEW expire_time_ink AS
select
`id` AS `id`
,(case when (now() > (`ctime` + interval 5 minute)) then 'accept' else 'deferred' end) AS `result`
,`relay_ip` AS `relay_ip`
,`sender` AS `sender`
,`recipient` AS `recipient`
from
`greylist_ink`;
в начало конфига:

Код: Выделить всё

#########################################################################################
# Greylisting server config
#########################################################################################
GREYLIST_ENABLED_GREY = yes

.ifdef GREYLIST_ENABLED_GREY
GREYLIST_TEST = SELECT result, id FROM expire_time_ink WHERE \
		`relay_ip` = '${quote_mysql:$sender_host_address}' AND \
 		`sender` = '${quote_mysql:$sender_address}' AND \
		`recipient` = '${quote_mysql:$local_part@$domain}' ORDER BY result DESC LIMIT 1
GREYLIST_ADD = REPLACE INTO greylist_ink (relay_ip, sender, recipient, ctime) VALUES \
		('${quote_mysql:$sender_host_address}', \
		'${quote_mysql:$sender_address}', \
		'${quote_mysql:$local_part@$domain}',now())
GREYLIST_DEFER_HIT = UPDATE greylist_ink SET bcount=bcount+1, mtime=now() WHERE id = $acl_m9
GREYLIST_OK_COUNT = UPDATE greylist_ink 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 5 minutes
.endif
очищаем раз в сутки. засунуть в крон
$user $passwd $db заменить на своё

Код: Выделить всё

1       3       *       *       * /usr/local/bin/mysql -u $user -p$passwd $db -e 'delete from greylist_ink where bcount>0;'
1       3       *       *       * /usr/local/bin/mysql -u user -p$passwd $db -e 'delete from greylist_ink where now()>(`mtime` + interval 2 month);'
http://www.postfix.ru/viewtopic.php?p=32550 - оригинал.
надо сразу брать лошадь за рога

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: exim greylist

Непрочитанное сообщение hizel » 2009-07-02 17:59:52

ненавижу крон :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: exim greylist

Непрочитанное сообщение Laa » 2009-07-02 18:06:20

Потенциальную опасность несут логин и пароль к базе в кроне. Оно доступно для чтения, всплывет на время среди процессов и будет в логе... но это лишь бы к чему придраться.. ;)

Спасибо. :good:
Хорошо оформленная тема, правильно что взял для грейлиста и получателя и отправителя и хост. А-то спамеры переборы разные делают... надо быть готовыми к этому!
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

Аватара пользователя
uHk
мл. сержант
Сообщения: 134
Зарегистрирован: 2008-05-21 15:16:48
Откуда: Москва
Контактная информация:

Re: exim greylist

Непрочитанное сообщение uHk » 2009-07-02 20:51:06

а можно сделать так, чтобы пасс невидно было?
или на крайний случай создать отдельного юзера с правами только к этим действиям.
а можно обойтись без крона?
или может строки в скрипт, а его chmod 700, а уже скрипт в крон ?
надо сразу брать лошадь за рога

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: exim greylist

Непрочитанное сообщение Laa » 2009-07-02 22:40:43

Скрипт с правильными правами на перле-питоне-руби-С++-итд вполне нормально и безопасно. :good:
Скрипт на шеле высветит все, если успеть сделать ps ax во время исполнения скрипта...

Но в большинстве случаев -- это перебор, просто для общедоступного сервера важно об этом помнить. :oops:
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!