Захист Zimbra OSE від брутфорсу та DoS-атак

Zimbra Collaboration Suite Open-Source Edition має у своєму арсеналі декілька потужних інструментів для забезпечення інформаційної безпеки. Серед них Postscreen - рішення для захисту поштового сервера від атак з боку ботнетів, ClamAV - антивірус, здатний перевіряти вхідні файли та листи на предмет зараження шкідливими програмами, а також SpamAssassin — один із найкращих спам-фільтрів на сьогоднішній день. Однак ці інструменти не здатні забезпечити захист Zimbra OSE від такого виду атаки, як брутфорс. Не найелегантніший, але досі досить ефективний перебір паролів за спеціальним словником загрожує не тільки ймовірністю успішного злому з усіма наслідками, але й створенням значного навантаження на сервер, який обробляє всі невдалі спроби злому сервера з Zimbra OSE.

Захист Zimbra OSE від брутфорсу та DoS-атак

В принципі, захиститись від брутфорсу можна стандартними засобами Zimbra OSE. Налаштування парольної політики безпеки дозволяють встановити кількість невдалих спроб введення пароля, після яких акаунт, що потенційно атакується, блокується. Головною проблемою такого підходу полягає в тому, що виникають ситуації, при яких облікові записи одного або кількох працівників можуть виявитися заблокованими через брутфорс-атаки, до якої вони не мають жодного відношення, а простий у роботі співробітників може завдати компанії великих збитків. Саме тому такий варіант захисту від брутфорсу найкраще не застосовувати.

Захист Zimbra OSE від брутфорсу та DoS-атак

Для захисту від брутфорсу краще підійде спеціальний інструмент під назвою DoSFilter, який вбудований в Zimbra OSE і може автоматично переривати з'єднання c Zimbra OSE по HTTP. Іншими словами, принцип роботи DoSFilter аналогічний принципу роботи PostScreen, що тільки використовується для іншого протоколу. Спочатку покликаний обмежувати кількість дій, яку може здійснювати один користувачів, DoSFilter також може забезпечити захист від брутфорсу. Ключова його відмінність від вбудованого в Zimbra інструменту полягає в тому, що після певної кількості невдалих спроб він блокує не самого користувача, а IP-адресу, з якої робляться множинні спроби увійти в той чи інший обліковий запис. Завдяки цьому системний адміністратор може не тільки захиститися від брутфорсу, але й уникнути блокування співробітників підприємства, просто додавши до списку довірених IP-адрес та підмереж внутрішню мережу свого підприємства.

Великим плюсом DoSFilter є те, що окрім численних спроб увійти до того чи іншого облікового запису, за допомогою даного інструменту можна автоматично заблокувати тих зловмисників, які заволоділи автентифікаційними даними співробітника, а потім успішно увійшли до його облікового запису та почали надсилати на сервер сотні запитів.

Налаштувати DoSFilter можна за допомогою наступних консольних команд:

  • zimbraHttpDosFilterMaxRequestsPerSec — За допомогою цієї команди можна задати максимальну кількість підключень, що допускається для одного користувача. Це значення становить 30 підключень.
  • zimbraHttpDosFilterDelayMillis — За допомогою цієї команди можна встановити затримку в мілісекундах для з'єднань, які перевищуватимуть заданий попередньою командою ліміт. Крім цілих значень, адміністратор може вказати 0, щоб затримки не було зовсім, а також -1, щоб всі підключення, які перевищують заданий ліміт, просто переривалися. За промовчанням це значення становить -1.
  • zimbraHttpThrottleSafeIPs — За допомогою цієї команди адміністратор може вказати довірені IP-адреси та підмережі, на які не діятимуть перераховані вище обмеження. Зазначимо, що синтаксис цієї команди може змінюватись залежно від бажаного результату. Так, наприклад, ввівши команду zmprov mcf zimbraHttpThrottleSafeIPs 127.0.0.1, Ви повністю перезапишете весь список і залишите в ньому лише одну IP-адресу. Якщо ж ви введете команду zmprov mcf +zimbraHttpThrottleSafeIPs 127.0.0.1, то в білий список додасться введена вами IP-адреса. Аналогічно, використовуючи знак віднімання, можна видалити будь-який IP зі списку дозволених.

Зазначимо, що DoSFilter може створювати низку проблем під час використання розширень Zextras Suite Pro. Для того, щоб їх уникнути, рекомендуємо підвищити кількість одночасних підключень з 30 до 100 за допомогою команди zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 100. Крім того, рекомендуємо додати внутрішню мережу підприємства до списку дозволених. Зробити це можна за допомогою команди zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.0.0/24. Після внесення будь-яких змін до DoSFilter обов'язково перезапустіть поштовий сервер за допомогою команди zmmailboxdctl restart.

Головним же мінусом DoSFilter є те, що він працює на рівні програми, і тому може лише обмежити можливість зловмисників здійснювати різні дії на сервері, не обмежуючи при цьому можливість з'єднуватися з північчю. Через це запити на автентифікацію або відправку листів, що посилаються на сервер, хоч і будуть свідомо провальними, як і раніше будуть являти собою стару добру DoS-атаку, зупинити яку на такому високому рівні неможливо.

Для того, щоб повністю убезпечити свій корпоративний сервер з Zimbra OSE, можна скористатися таким рішенням, як Fail2ban, яке є фреймворком, здатним постійно моніторити логи інформаційних систем на предмет повторюваних дій і блокувати порушника за рахунок зміни налаштувань брандмауера. Блокування на такому низькому рівні дозволяє відключати зловмисників прямо на етапі IP-з'єднання із сервером. Таким чином, Fail2Ban може чудово доповнити захист, збудований за допомогою DoSFilter. Давайте дізнаємося, як можна подружити Fail2Ban з Zimbra OSE і за рахунок цього підвищити захищеність ІТ-інфраструктури вашого підприємства.

Як і будь-яка інша програма корпоративного класу, Zimbra Collaboration Suite Open-Source Edition веде докладні логи своєї роботи. Більшість із них зберігаються в папці /opt/zimbra/log/ у вигляді файлів. Ось лише кілька з них:

  • mailbox.log – логи поштової служби Jetty
  • audit.log – логи аутентифікації
  • clamd.log - логи роботи антивірусу
  • freshclam.log - логи оновлень антивірусу
  • convertd.log - логи конвертера вкладень
  • zimbrastats.csv – логи продуктивності сервера

Також логі Zimbra можна знайти у файлі /var/log/zimbra.log, де ведуться логи роботи Postfix та самої Zimbra.

Для того, щоб захистити нашу систему від брутфорсу, ми будемо моніторити mailbox.log, audit.log и zimbra.log.

Для того, щоб все працювало, необхідно, щоб на вашому сервері з Zimbra OSE були встановлені Fail2Ban та iptables. У тому випадку, якщо ви використовуєте Ubuntu, зробити це можна за допомогою команд dpkg -s fail2banЯкщо ж ви використовуєте CentOS, то перевірити це можна за допомогою команд yum list installed fail2ban. У тому випадку, якщо Fail2Ban у вас немає встановлено, то його встановлення не стане проблемою, оскільки цей пакет є практично у всіх стандартних репозиторіях.

Після того, як все необхідне програмне забезпечення встановлено, можна розпочати налаштування Fail2Ban. Для цього необхідно створити конфігураційний файл /etc/fail2ban/filter.d/zimbra.conf, в якому пропишемо регулярні вирази для логів Zimbra OSE, які будуть відповідати невірним спробам входу та приводити в дію механізми Fail2Ban. Ось приклад вмісту zimbra.conf з набором регулярних виразів, що відповідають різним помилкам, що видаються в Zimbra OSE при невдалій спробі автентифікації:

# Fail2Ban configuration file
 
[Definition]
failregex = [ip=<HOST>;] account - authentication failed for .* (no such account)$
                        [ip=<HOST>;] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
                        ;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
                        ;oip=<HOST>;.* security - cmd=Auth; .* protocol=imap; error=authentication failed for .* invalid password;$
                        [oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
                        WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$

ignoreregex =

Після того, як регулярні вирази для Zimbra OSE складені, саме час приступити до редагування конфігурації самого Fail2ban. Налаштування цієї утиліти розміщуються у файлі /etc/fail2ban/jail.conf. Про всяк випадок зробимо його резервну копію за допомогою команди cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak. Після цього наведемо цей файл до наступного виду:

# Fail2Ban configuration file
 
[DEFAULT]
ignoreip = 192.168.0.1/24
bantime = 600
findtime = 600
maxretry = 5
backend = auto
 
[ssh-iptables]
enabled = false
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email protected], [email protected]]
logpath = /var/log/messages
maxretry = 5
 
[sasl-iptables]
enabled = false
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, [email protected]]
logpath = /var/log/zimbra.log
 
[ssh-tcpwrapper]
enabled = false
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=support@ company.ru]
ignoreregex = for myuser from
logpath = /var/log/messages
 
[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-account]
sendmail[name=zimbra-account, [email protected] ]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 5
 
[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-audit]
sendmail[name=Zimbra-audit, [email protected]]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 5
 
[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-recipient]
sendmail[name=Zimbra-recipient, [email protected]]
logpath = /var/log/zimbra.log
bantime = 172800
maxretry = 5
 
[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, [email protected]]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5

Цей приклад хоч і є досить універсальним, проте варто роз'яснити деякі параметри, які ви, можливо, захочете змінити при самостійному налаштуванні Fail2Ban:

  • Ignoreip — за допомогою цього параметра можна вказати конкретний IP або підмережа, адреси з якої Fail2Ban не повинен перевіряти. Як правило, до списку ігнорованих додається внутрішня мережа підприємства та інші довірені адреси.
  • Bantime — Час, на який порушник баниться. Вимірюється за секунди. Значення –1 означає безстроковий бан.
  • Maxretry — Максимальне число разів, яке одна ip-адреса може намагатися отримати доступ до сервера.
  • Sendmail — Налаштування, що дозволяє автоматично надсилати email-повідомлення про спрацювання Fail2Ban.
  • Знайти час — Налаштування, що дозволяє встановити часовий інтервал, після якого ip-адреса може знову спробувати отримати доступ до сервера після вичерпання максимальної кількості невдалих спроб (параметр maxretry)

Після збереження файлу з налаштуваннями Fail2Ban залишається лише перезапустити цю утиліту за допомогою команди service fail2ban restart. Після перезапуску основні логи Zimbra почнуть постійно моніторитись на відповідність регулярним виразам. Завдяки цьому адміністратор зможе фактично виключити будь-яку можливість проникнення зловмисника в не тільки поштові скриньки Zimbra Collaboration Suite Open-Source Edition, але й захистити всі служби, що працюють в рамках Zimbra OSE, а також бути в курсі будь-яких спроб отримання несанкціонованого доступу.

З усіх питань, пов'язаних з Zextras Suite ви можете звернутися до Представника компанії «Zextras» Катерини Тріандафіліді електронною поштою [захищено електронною поштою]

Джерело: habr.com

Додати коментар або відгук