четверг, 1 декабря 2011 г.

Адаптивный delay в exim

Одним из простых, но в то же время эффективных способов отсеивания спама является задержка приветствия при подключении клиента. Легитимный MTA в отличии от спам бота дождется получения приветсвия, спам боты же, как правило, либо шлют команды сразу вне зависимости от получения приветствия, либо не получив его в течение малого промежутка времени отключаются. Для них важна скорость.
На этом и основан метод. Теперь реализация

Все достаточно просто. Сразу же после строки begin acl добавим в конфиг следующее:

acl_connect:
  warn set acl_c_delay = 5 # задержка по-умолчанию

  accept  hosts         =  +no_delay # white list
  accept  condition = ${if eq {$interface_port}{587} {yes}{no}} # пропустим авторизованных
  accept  condition = ${if eq {$interface_port}{465} {yes}{no}} # и работющих по ssl
  set acl_c_reverse_zone = ${escape:${lookup dnsdb{ptr=$sender_host_address}}} # получим запись из обратной зоны для айпи клиента
  warn condition = ${if eq {$acl_c_reverse_zone}{}}
    set acl_c_delay = ${eval:$acl_c_delay+60} # если ее нет, увеличиваем задержку на 60 секунд
  warn !verify = reverse_host_lookup
    set acl_c_delay = ${eval:$acl_c_delay+30} # и на 30, если она не равна прямой
  accept  delay         = ${acl_c_delay}s # собственно задерживаем приветсвие
Кроме того, необходимо убедиться, что smtp_enforce_sync выставлено в true. Это необходимо для отлупа ботов, не дождавшихся приветсвия сервера.
А также нужно указать acl при коннекте:

acl_smtp_connect = acl_connect

Комментариев нет:

Отправить комментарий