Одна из самых важных характеристик почтового сервера - его репутация. В случае, если она окажется подмоченной неконтролируемой массовой рассылкой, возникает риск, что отправленное с такого сервера письмо не просто окажется в папке “Спам”, но будет автоматически удалено еще до попадания на сервер. Одним из наиболее надежных способов защиты сервера от потери репутации является контроль за количеством отправляемых пользователями писем, чтобы они не устроили массовую спам-рассылку, а имя вашего сервера не пополнило публичные черные списки. Ограничить количество писем, которые могут отправить пользователи, позволяет CBPolicyD. В данной статье мы расскажем о том, как настроить ограничение на отправку писем в Carbonio, а также расскажем о других возможностях CBPolicyD.

Cluebringer Policy Daemon - это служба для Postfix, которая позволяет применять на почтовом сервере различные политики, включая серые списки, ограничения на получение и отправку почты как на основе адресатов и отправителей, так и на основе хостов и IP-адресов. Политики в CBPolicyD настраиваются в соответствующей базе данных. Данная инструкция подойдет как для коммерческой версии Carbonio, так и для бесплатной версии Carbonio CE.

CBPolicyD устанавливается вместе с Carbonio, однако по умолчанию данный модуль не активирован. Для его включения в односерверной инфраструктуре необходимо выполнить команду carbonio prov ms mail.carbonio.ru +zimbraServiceEnabled cbpolicyd. В случае с мультисерверной инфраструктурой следует выполнить эту команду на MTA-серверах.

После выполнения этой команды в папке /opt/zextras/data/cbpolicyd/db появится база данных SQLite cbpolicyd.sqlitedb, в которой хранятся все данные CBPolicyD. Просмотреть её можно при помощи SQLite3: sqlite3 /opt/zextras/data/cbpolicyd/db/cbpolicyd.sqlitedb и команды .tables.

Просмотреть количество различных элементов в базе данных можно при помощи команды select * from sqlite_sequence;

Просмотреть каждый из сохраненных элементов можно при помощи команды вида select * from policies; и других

Как видно из вывода команд, политики являются обычными строками в таблице SQLite, а это значит, что добавление новых политик будет представлять из себя добавление новых строк в данную таблицу.

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

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

Делается это при помощи SQL-инъекции в таблицу policy_members. Для этого нужно создать файл policy_members.sql с содержимым инъекции.

BEGIN TRANSACTION;

INSERT INTO "policies" (Name,Priority,Description) 
VALUES(Сarbonio CBPolicyD', 0, Carbonio CBPolicyD');

INSERT INTO "policy_members" (PolicyID,Source,Destination) 
VALUES(6, 'any', 'any');

COMMIT;

Первая строка инъекции добавляет новую политику с максимальным приоритетом в список политик CBPolicyD, вторая строка добавляет новую группу, в которую входят все пользователи и которая ассоциируется с добавленной в первой строке политикой. Обратите внимание, что в качестве PolicyID во второй строке используется цифра 6. Это связано с тем, что по умолчанию в Carbonio уже есть пять политик, соответственно, добавляемая политика будет шестой. Если вы ранее добавляли политики к тем, что есть в Carbonio по умолчанию, используйте тот PolicyID, который будет у вас.

Когда все будет готово, внедрите инъекцию в SQLite sqlite3 /opt/zextras/data/cbpolicyd/db/cbpolicyd.sqlitedb < policy_members.sql

Для создания политики с ограничением отправки писем также потребуется создать SQL-инъекцию. Для этого создайте файл quota_send.sql со следующим содержимым:

BEGIN TRANSACTION;

INSERT INTO "quotas" (PolicyID,Name,Track,Period,Verdict,Data) 
VALUES (6, 'Sender:user@domain','Sender:user@domain', 60, 'DEFER', 'Deferring: Too many messages sent in last 60 seconds');

INSERT INTO "quotas_limits" (QuotasID,Type,CounterLimit) VALUES(3, 'MessageCount', 10);

COMMIT;

Здесь мы вставляем в таблицы “quotas” и “quotas_limits” строки с идентификатором политики, к которой применяется квота, параметрами для отслеживания сообщений, периодом действия политики, ограничением и результатом ее превышения. 

После того как файл с SQL-инъекцией будет сохранен, достаточно будет просто добавить его в таблицу с политиками:

sqlite3 /opt/zextras/data/cbpolicyd/db/cbpolicyd.sqlitedb < quota_send.sql

Также необходимо включить на сервере поддержку квот CBPolicyD 

carbonio prov ms mail.carbonio.ru zimbraCBPolicydQuotasEnabled TRUE

После этого политика начнет применяться.

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

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

BEGIN TRANSACTION;

INSERT INTO "quotas" (PolicyID,Name,Track,Period,Verdict) 
VALUES (6, 'Recipient:@domain', 'Recipient:@domain', 60, 'REJECT');

INSERT INTO "quotas_limits" (QuotasID,Type,CounterLimit) 
VALUES(4, 'MessageCount', 125);

COMMIT;

В этой инъекции количество получаемых доменами электронных писем ограничено 125 штуками в минуту, а все сообщения, которые превышают этот лимит, отклоняются сервером. Такая мера может показаться эффективной для предотвращения мейл-бомбинга или спам-атаки на сервер, но на деле она может оказаться хуже и разрушительнее чем сами кибератаки на почтовый сервер, так как любая, даже самая скромная по масштабу спам-атака может остановить получение писем пользователями. Вместо этого рекомендуется использовать Postscreen.

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

Комментарии (0)