exim memcached greylist

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
posix
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-06-10 15:33:56

exim memcached greylist

Непрочитанное сообщение posix » 2010-06-10 15:57:36

Некоторое время назад реализовали со знакомым грейлист на memcached, вот результат:

Переменные грейлиста.

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

# GreyList Vars 
GREYLIST_ENABLED_GREY          = yes
GREYLIST_INITIAL_DELAY         = 120	#defer	- 2 minutes
GREYLIST_INITIAL_LIFETIME      = 14400	#4 hour
GREYLIST_RECORD_LIFETIME       = 259200	#3 days

.ifdef GREYLIST_ENABLED_GREY
MEMCACHED_HOST = IP_OF_MEMCACHED_SERVER
MEMCACHED_PORT = 11211
MEMCACHED_SET = ${sg{${readsocket{inet:MEMCACHED_HOST:MEMCACHED_PORT}{set $acl_c_memcache_key 1 $acl_c_memcache_expire ${strlen:$acl_c_memcache_value}\r\n$acl_c_memcache_value\r\nquit\r\n}}}{\N\r\n$\N}{}}
MEMCACHED_REPLACE = ${sg{${readsocket{inet:MEMCACHED_HOST:MEMCACHED_PORT}{replace $acl_c_memcache_key 1 $acl_c_memcache_expire ${strlen:$acl_c_memcache_value}\r\n$acl_c_memcache_value\r\nquit\r\n}}}{\N\r\n$\N}{}}
MEMCACHED_GET = ${sg{${readsocket{inet:MEMCACHED_HOST:MEMCACHED_PORT}{get $acl_c_memcache_key\r\n}{5s}{\n}}}{\N^(?:VALUE \S+ \d+ \d+\r\n(.*?)\r\n)?END\r\n$\N}{\$1}}
.endif
Как читать и записывать в сокет мемкешди я прочел в одном блоге https://secure.grepular.com/Accessing_M ... _from_Exim

Секция acl

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

#begin acl
.ifdef GREYLIST_ENABLED_GREY
greylist_acl:

#get val

        warn    set acl_c_memcache_key          = ${lc:$sender_host_address+$sender_address+$local_part@$domain}
                set acl_c_memcache_result       = MEMCACHED_GET
                logwrite     = GREYLIST check greylist key $acl_c_memcache_key, ${if eq{$acl_c_memcache_result}{} {no such record}{result is $acl_c_memcache_result}}, time $tod_epoch


        accept  condition        = ${if eq{$acl_c_memcache_result}{} {yes}{no}}
                set acl_c_memcache_value   = $tod_epoch
                set acl_c_memcache_expire = GREYLIST_INITIAL_LIFETIME
                condition                  = ${if eq{MEMCACHED_SET}{STORED}}
                logwrite                   = GREYLIST key $sender_host_address+$sender_address+$local_part@$domain stored in memcached with value $acl_c_memcache_value and expire time $acl_c_memcache_expire

# check if the triple is still blocked
        accept  condition        = ${if <{$tod_epoch}{${eval:$acl_c_memcache_result + GREYLIST_INITIAL_DELAY}}{yes}{no}}
                set acl_c_memcache_remain = ${eval:$acl_c_memcache_result + GREYLIST_INITIAL_DELAY - $tod_epoch}
                logwrite        = GREYLIST key $sender_host_address+$sender_address+$local_part@$domain still in greylist, remaining $acl_c_memcache_remain seconds


# update expire time
        warn    set acl_c_memcache_value   = $acl_c_memcache_result
                set acl_c_memcache_expire = GREYLIST_RECORD_LIFETIME
                condition        = ${if eq{MEMCACHED_REPLACE}{STORED}}
                logwrite        = GREYLIST update key $sender_host_address+$sender_address+$local_part@$domain set expire time $acl_c_memcache_expire and value is $acl_c_memcache_value

deny
.endif
cекция rcpt, грейлист ставится после всех проверок, но перед приемом письма

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

#RCPT
.ifdef GREYLIST_ENABLED_GREY
  defer senders         = !:
        !spf            = pass
        !hosts          = ${lookup dnsdb{>: defer_never,mxh=$sender_address_domain}}
        acl             = greylist_acl
        message         = Greylisting in action, please try later after ${if eq{$acl_c_memcache_result}{} {GREYLIST_INITIAL_DELAY}{$acl_c_memcache_remain}} seconds
        logwrite        = :reject:
.endif
Дополнительно делаем проверку в acl_smtp_data

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

#DATA
.ifdef GREYLIST_ENABLED_GREY
  defer
         condition      = ${if eq {${domain:$h_from:}}{$sender_address_domain}{no}{yes}}
         !spf           = pass
         !hosts         = ${lookup dnsdb{>: defer_never,mxh=${domain:$h_from:}} }
         acl            = greylist_acl
        message   = Greylisting in action, please try later after ${if eq{$acl_c_memcache_result}{} {GREYLIST_INITIAL_DELAY}{$acl_c_memcache_remain}} seconds
         logwrite       = :reject:
.endif
Часть инфа была честно слита с вики ексима, а часть логики была подсмотрена с грейлиста на перле.
Используемые материалы:
https://secure.grepular.com/Accessing_M ... _from_Exim
http://wiki.exim.org/FastGrayListMiniTutorial
http://memcached.org
http://www.elijaa.org/blog/index.php?po ... nd-summary
http://code.google.com/p/memcached/wiki/NewCommands

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim memcached greylist

Непрочитанное сообщение Alex Keda » 2010-10-03 20:20:05

прикольно

а чем обусловлен выбор столь странной БД?
Убей их всех! Бог потом рассортирует...

posix
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-06-10 15:33:56

Re: exim memcached greylist

Непрочитанное сообщение posix » 2010-10-05 15:12:10

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

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: exim memcached greylist

Непрочитанное сообщение paix » 2010-10-19 21:46:00

для прикола - прикольно ;)
но имхо не для продакшина.

http://wiki.exim.org/DbLessGreyListingRun
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim memcached greylist

Непрочитанное сообщение Alex Keda » 2010-10-21 22:07:43

paix писал(а):для прикола - прикольно ;)
но имхо не для продакшина.

http://wiki.exim.org/DbLessGreyListingRun
как раз Ленино - нет.
если тока на файловой системе в памяти всё это раскладывать.
Убей их всех! Бог потом рассортирует...