Решение проблемы долгих запросов при работе с почтовой системой RuPost

На контроллеры ALD Pro cо стороны RuPost массово поступают запросы на поиск (ldapsearch), которые выполняются по 3-6 секунд, что приводит к отказу в обслуживании LDAP и останавливает работу DNS:

SRCH base="cn=users,cn=accounts,dc=company,dc=ru" scope=2 filter="(&(|(mail=aldpro@company.ru)(mail=aldpro@company.ru)(proxyAddresses=aldpro@company.ru))(&(objectClass=person)(mail=*@*)

Если таких запросов одновременно больше, чем потоков в 389 DS, то 389 DS перестает отвечать на любые запросы. В лог-файле это выглядит как выделение файловых дескрипторов без дальнейших операций.

Запросом ниже можно произвести проверку:

time ldapsearch -b "cn=users,cn=accounts,$(ipa env basedn|cut -d ' ' -f4)" "(&(|(mail=somebody@$(hostname -d))(mail=somebody@$(hostname -d))(proxyAddresses=somebody@$(hostname -d)))(&(objectClass=person)(mail=*@*)(proxyAddresses=SMTP:*)))" "* aci" -Q

Если зафиксировано время более 1000 мс, то рекомендуется провести индексацию атрибута proxyAddresses в LDAP. Данную процедуру необходимо произвести на каждом контроллере домена только один раз.

Для этого необходимо выполнить действия ниже.

Вывести название INSTANCE LDAP командой, индексы нужно добавить на основной каталог, не на глобальный каталог:

sudo dsctl -l

Произвести добавление индексов:

sudo dsconf INSTANCE-NAME backend index add --index-type eq --attr proxyAddresses userRoot
sudo dsconf INSTANCE-NAME backend index set --add-type sub --attr proxyAddresses userRoot
sudo dsconf INSTANCE-NAME backend index set --add-type pres --attr proxyAddresses userRoot

Проверить командой, что все типы добавлены:

sudo dsconf INSTANCE-NAME backend index get --attr proxyAddresses userRoot

Произвести остановку INSTANCE LDAP командой:

sudo dsctl INSTANCE-NAME stop

Запустить переиндексацию (может занять до нескольких минут) командой:

sudo dsctl slapd-INSTANCE-NAME db2index userRoot

Произвести запуск INSTANCE LDAP командой:

sudo dsctl INSTANCE-NAME start