Оптимизация почтового сервера Carbonio для больших нагрузок

Ранее мы уже писали о том, как читать логи Carbonio и как отслеживать состояние его сервисов при помощи Grafana. Но что делать, если логи постоянно сигнализируют о достижении или превышении всех возможных пределов нагрузки на сервер, сервис периодически теряет отзывчивость или выдает ошибки при обращении к нему, а графики рисуют картину, которая явно не соответствует норме. Как правило, такая картина свидетельствует о том, что почтовый сервер не справляется с текущим количеством активных пользователей, и в этой статье мы расскажем о том, какие настройки могут быть применены для того, чтобы оптимизировать ваш почтовый сервер лучше справлялся с нагрузкой.

38346b3edb1d83099cca85fd5e028c7a.png

Данная статья может применяться как для коммерческой версии Carbonio, так и для бесплатной Carbonio Community Edition.

  1. Диагностика

В случае, если пользователи почтового сервера начали сталкиваться с замедлениями сервиса или ошибками при выполнении тех или иных действий, первое, что должен выполнить системный администратор — установить причину происходящего.

Первым местом для поиска всегда являются логи почтового сервера. Они хранятся в трех локациях: /opt/zextras/log/carbonio.log; /var/log; /var/log/carbonio.

Наиболее часто используемыми являются:

  • carbonio.log — находится в папке /var/log, содержит данные о работе узлов MTA и LDAP, а также общую информацию о работе сервера

  • mailbox.log — находится в папке /opt/zextras/log, содержит данные о событиях, происходящих на узлах AppServer

  • audit.log — находится в папке /opt/zextras/log, содержит данные о попытках аутентификации (успешных и неуспешных) от различных пользователей

  • nginx.log — находится в папке /opt/zextras/log, содержит данные о событиях, происходящих на узлах Carbonio Proxy

  • mysql_error.log — находится в папке /opt/zextras/log, содержит данные об ошибках, которые возникают в MariaDB

  • myslow.log — находится в папке /opt/zextras/log, содержит данные о медленных запросах в MariaDB

Логи отдельных сервисов собраны в папке /var/log/carbonio. Там можно найти логи:

  • Carbonio Files — /var/log/carbonio/files 

  • Carbonio Docs — /var/log/carbonio/docs 

  • Carbonio Docs DB Connector — /var/log/carbonio/docs-db-connector

  • Carbonio Preview — /var/log/carbonio/preview

Как правило, информация о зашкаливающей нагрузке может быть найдена именно в mailbox.log. Пример такого сообщения:

[name=user@carbonio.local;mid=116;oip=12.34.56.78;port=40600;ua=CarbonioWebClient - GC91 (Mac)/8.8.15_GA_4026;soapId=76fe42;] session - Too many SOAP sessions (6 > 5), closing SoapSession{id=1337, authAcct=42f8d68c-bbdc-42f8-8be8-84ba383442f8, lastAccessed=2024-06-09 10:44:57,231}

Данное сообщение свидетельствует о том, что действие не было выполнено из-за превышения максимального количества сессий SOAP API, то есть причиной этого является не аппаратные, а софтверные ограничения, которые можно решить, изменив максимальное количество потоков.

  1. Увеличение количества потоков

Ограничения максимального числа потоков для SOAP, IMAP, HTTP и ряда других протоколов хранятся либо в глобальной конфигурации LDAP, либо в файле с локальными настройками сервера.

Данные, которые хранятся в глобальных настройках LDAP и меняются, соответственно, при помощи команды вида carbonio prov modifyConfig. Например:

carbonio prov modifyConfig zimbraImapNumThreads 400 zimbraLmtpNumThreads 50

Получить весь список имеющихся ограничений можно при помощи команды:

carbonio prov getAllConfig| grep -i thread | grep -i num

d390f0b816ea4a90bdffffbc70753e07.png

Та часть настроек, отвечающих за максимальное количество потоков, и которая находится в файле локальной конфигурации может быть получена при помощи команды 

zmlocalconfig | grep session

b204dbc74b008305a6cf9b2745f5942f.png

Для изменения выполните ту же команду с атрибутом -e, указанием изменяемой настройки и нового ее значения. Пример:

zmlocalconfig -e zimbra_session_limit_soap=20

Отметим, что повышение предельного числа потоков следует проводить осторожно, так как при этом Carbonio начинает использовать все больше аппаратных ресурсов, в первую очередь это оперативная память и IOPS хранилища. Следить за их использованием можно в Grafana.

  1. DoS-Filter

Еще одним источником возникновения ошибок может быть DoS-Filter, ограничивающий слишком частые запросы от конкретных IP-адресов. Найти связанные с ним ошибки также можно при помощи логов

grep DOS /opt/carbonio/log/zmmailboxd.out

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

carbonio prov modifyConfig zimbraMailTrustedIP 1.2.3.4

Для добавления нескольких адресов используйте параметр со знаком +

carbonio prov modifyConfig +zimbraMailTrustedIP 1.2.3.4 +zimbraMailTrustedIP 5.6.7.8

Для удаления адресов из списка используйте параметр со знаком -

carbonio prov modifyConfig -zimbraMailTrustedIP 5.6.7.8

Получить текущий список можно при помощи команды

carbonio prov getConfig zimbraMailTrustedIP

  1. Почтовые очереди

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

Диагностировать подобные вещи можно просматривая почтовые очереди в консоли администратора. 

dc00fcbdf359be30d76130fce8d4dd07.png

При просмотре очереди в консоли администратор может выбрать узел MTA, очередь на котором он намерен просмотреть, а также полноценно управлять письмами, которые в ней находятся.

Эффективно очистить очередь от конкретных спам-сообщений можно используя утилиты командной строки. Их следует выполнять от имени пользователя root. Пример:

/opt/zextras/postfix/sbin/postqueue -p | grep -i увеличь | awk '{print $1}' | /opt/zextras/postfix/sbin/postsuper -d -

/opt/zextras/postfix/sbin/postqueue -p | grep -i кредит  | awk '{print $1}' | sed 's/\*//g'| /opt/zextras/postfix/sbin/postsuper -d -

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

Бороться с мейл-бомбингом и исходящими спам-атаками можно при помощи CBPolicyD. Соответствующая инструкция уже публиковалась ранее.

По вопросам тестирования, приобретения, предоставления лицензии и консультаций обращаться на почту sales@svzcloud.ru к эксклюзивному партнеру Zextras.

Получить информацию и обменяться информацией о Carbonio CE вы можете в группах в Telegram CarbonioMail и Carbonio CE Unofficial.

© Habrahabr.ru