Amavisd-New.Использованием хешей из внешнего файла

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Amavisd-New.Использованием хешей из внешнего файла

Непрочитанное сообщение Amaka » 2018-11-30 12:48:16

В Amavisd-new активно используются хеши. Стандартно предлагается описывать все хеши в конфиг файле. Вот пример нескольких строк конфига:

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

   
{ # a hash-type lookup table (associative array)
     'promoconcert.es'                        => -3.0,
     'nobody@cert.org'                        => -3.0,
     'cert-advisory@us-cert.gov'              => -3.0,
}
Это хорошо для простых конфигураций.
Но меня несколько сложнее. Поэтому стараюсь перенести все хеши во внешние файлы. Вот пример успешно перенесенного хеша:

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

# Хеши по отдельным адресам с начислением баллов
# Все хеши(адрес-баллы) перечислены в файле:
 read_hash("/var/amavis/sender_scores_sitewide");
Где содержимое файла "/var/amavis/sender_scores_sitewide" такое:

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

mailma.vedomosti.ru            -5.0
rostelecom.ru                   -3.0
info@aeroexpress.ru             -10.0
Следую этой логике я решил перенести в файл хеш с репутициями DKIM подписей.
Вот так было и работало:

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

# $reputation_factor = 0.2;
# Репутация для некоторых подписей DKIM
# default => @signer_reputation_maps = ();
@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
   'emailro.club'       => 50.0,
} );
Перенес хеш в файл "/var/amavis/dkim_signer_reputation",
и перестало работать:

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

@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
#   'emailro.club'       => 50.0,
  read_hash("/var/amavis/dkim_signer_reputation"),
} );
Репутация подписи для домена 'emailro.club' не срабатывает. В чем причина?
Как после изменения провести проверку значений, которые получили массивы и хеши?
Режим amavisd debug не показывает.
Всем удачи!

Хостинговая компания 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/

Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Amavisd-New.Использованием хешей из внешнего файла

Непрочитанное сообщение Amaka » 2018-12-05 12:08:46

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

Вот что я сделал.
1. Я решил, что по стилю файл конфигурации amavisd.conf это перловый файл. Только расширние у него не .pl или .pm.
Соответственно в этом файле я попробовал вставить перловые инструкции:

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

use Data::Dumper;
print Dumper(@signer_reputation_maps);
2. Потом проверил корректность файла amavisd.conf запустив режим debug:

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

amavisd debug
Ошибок компиляции не было. Вставленные инструкции работали. В результате отладочной информации на экране будет содержимое массива @signer_reputation_maps.
Получается, так я могу смотреть любой массив из конфига перед принятием его в работу.

3. В результате у меня рабочий вариант конфига такой:

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

############# @signer_reputation_maps #####################
# Репутация для некоторых подписей DKIM (AM.DKIM_REPUT)
# default => $reputation_factor = 0.2;
# default => @signer_reputation_maps = ();

# Чтение хеша %dkim_signer_reputation из файла 
my %dkim_signer_reputation;
read_hash(\%dkim_signer_reputation, "/var/amavis/dkim_signer_reputation");
####для проверки данных -> ### use Data::Dumper;
####для проверки данных -> ### print Dumper(%dkim_signer_reputation);

@signer_reputation_maps = ( {
  'ebay.ca'                  =>  -9.57,
  'ebay.de'                  =>  -3.38,
  'ebay.fr'                  => -10.95,
   %dkim_signer_reputation,
} );
####для проверки данных -> ### print Dumper(@signer_reputation_maps);
############# @signer_reputation_maps #####################
Содержимое файла с репутациями подписей (/var/amavis/dkim_signer_reputation) такое:

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

emailro.club   50.0
mail.ru		-20.0
Все.
Всем удачи!