Защита от DoS-атак в Carbonio

Ранее мы писали про Postscreen, решение, которое способно защитить почтовый сервер Carbonio от автоматизированных рассылок спама со стороны ботнетов и скомпрометированных почтовых серверов по протоколу SMTP, которые могут создать массу неудобств для пользователей и администратора, и даже привести к отказу почтового сервера. Однако протокол SMTP далеко не единственный способ отправки множественных запросов в Carbonio. Для ограничения клиентов, которые проявляют чрезмерную активность в Carbonio встроен DoS Filter. О том, что это такое и как с его помощью повысить безопасность вашего сервера, читайте в нашей статье.

70c22432a65e4a8ae686e1cd15187bec.png

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

Denial of service — распространенный вид атак на информационную инфраструктуру. Их целью является вывод из строя сервера за счет генерации большого количества запросов, которые сервер просто не в состоянии обработать в разумные временные рамки. Результатом становится долгое ожидание ответа от сервера для его пользователей, либо отказ в обслуживании, когда клиент вовсе не получает ответ от сервера.

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

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

Настройка поведения DoS-фильтра осуществляется в командной строке при помощи параметров:

  • zimbraHttpDosFilterMaxRequestsPerSec — определяет максимальное количество запросов, которое может прийти с одного IP-адреса в секунду

  • zimbraHttpDosFilterDelayMillis — определяет количество миллисекунд задержки, которая применяется ко всем запросам, превышающим установленное ограничение

По умолчанию значение параметра zimbraHttpDosFilterMaxRequestsPerSec составляет 100. То есть максимальное число запросов от одного IP адреса не должно превышать этого значения. Судьба, которая ждет отклоненные запросы определяется параметром zimbraHttpDosFilterDelayMillis. По умолчанию он равен -1, то есть запросы, которые не укладываются в установленный лимит, попросту отклоняются.

Изменить эти значения можно на глобальном уровне при помощи команд

carbonio prov modifyConfig zimbraHttpDosFilterMaxRequestsPerSec 150
carbonio prov modifyConfig zimbraHttpDosFilterDelayMillis 0

Параметр zimbraHttpDosFilterDelayMillis может иметь три значения: -1, 0 и любое другое положительное натуральное число. Как уже говорилось, -1 означает невыполнение запроса, который не уложился в лимит, 0 означает выполнение его без задержки, а другие числа означают величину этой задержки.

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

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

carbonio prov modifyConfig zimbraHttpThrottleSafeIPs 10.0.1.2/32

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

carbonio prov modifyConfig zimbraHttpThrottleSafeIPs 192.168.1.0/24

Существующий белый список можно дополнять новыми адресами и подсетями:

carbonio prov modifyConfig +zimbraHttpThrottleSafeIPs 192.168.100.0/24

Убрать адрес или подсеть из белого списка:

carbonio prov modifyConfig -zimbraHttpThrottleSafeIPs 192.168.100.0/24

Просмотреть имеющийся белый список

carbonio prov getConfig -zimbraHttpThrottleSafeIPs

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

За соответствующую настройку отвечают три параметра:

  • zimbraInvalidLoginFilterDelayInMinBetwnReqBeforeReinstating — определяет то, на какой период вермени блокируется IP-адрес нарушителя

  • zimbraInvalidLoginFilterMaxFailedLogin — определяет то, какое количество попыток неудачного входа должен совершить пользователь для того, чтобы быть заблокирован

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

Пример настройки:

carbonio prov modifyConfig zimbraInvalidLoginFilterDelayInMinBetwnReqBeforeReinstating 25
carbonio prov modifyConfig zimbraInvalidLoginFilterMaxFailedLogin 5
carbonio prov modifyConfig zimbraInvalidLoginFilterReinstateIpTaskIntervalInMin 5

В данном примере IP-адрес пользователя, который пятикратно ввел неверный пароль с интервалом менее 5 минут между попытками блокируется на 25 минут. После ввода настроек потребуется перезагрузить почтовый сервер.

Для пользователей коммерческой версии Carbonio с включенной поддержкой Exchange ActiveSync помимо обычного DoS Filter существует дополнительный, который позволяет фильтровать нагрузку, поступающую с мобильных устройств.

Carbonio Mobile DoS Filter изначально отключен, но может быть включен администратором. Он следит за тем, чтобы устройства не превышали доступный им лимит подключений на единицу времени. В случае нарушения, устройство также блокируется на определенный период.

Включение и настройка Carbonio Mobile DoS Filter осуществляется в командной строке при помощи следующих команд:

  • mobileAntiDosServiceEnabled — включает и выключает службу (по умолчанию false)

  • mobileAntiDosServiceJailDuration — продолжительность блокировки (в миллисекундах) устройства (по умолчанию 600000 миллисекунд)

  • mobileAntiDosServiceTimeWindow — временной интервал для оценки периодичности подключения (по умолчанию 30000 миллисекунд)

  • mobileAntiDosServiceMaxRequests — предельное количество запросов на подключение на одно устройство (По умолчанию 150)

От обычного DoS-Filter это решение отличается тем, что блокирует пользователя не по IP-адресу, а по идентификатору устройства. Кстати, при перезагрузке сервиса при помощи команды carbonio mobile doRestartService anti-dos сбрасываются все блокировки и счетчики.

Пример настройки:

carbonio config global set mobileAntiDosServiceEnabled true
carbonio config global set mobileAntiDosServiceJailDuration 60000
carbonio config global set mobileAntiDosServiceTimeWindow 15000
carbonio config global set mobileAntiDosServiceMaxRequests 100

В данном примере происходит включение сервиса Carbonio Mobile DoS Filter, который блокирует на 1 минуту каждое устройство, отправляющее более 100 запросов на подключение  в течение 15 секунд.

Таким образом, DoS Filter позволяет защитить сервер не только от злоумышленников, но и защищает сервер от дополнительных нагрузок, которые могут создать пользователи при слишком активном использовании сервиса.

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

© Habrahabr.ru