Как обезопасить почтовый сервер от хакерских угроз с использованием VPN (Debian/Ubuntu)

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

Защита почтового сервера от взлома

Предварительные требования

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

  • Как просто создать полноценный почтовый сервер на Ubuntu 20.04 с помощью iRedMail.
  • Как просто установить почтовый сервер на Debian 10 Buster с помощью iRedMail.

Предполагается, что у вас уже настроен VPN-сервер. Если это не так, пожалуйста, воспользуйтесь одним из предложенных ниже руководств. Почтовый сервер и VPN-сервер могут функционировать как на разных хостах, так и на одном и том же.

  • Создание личного VPN-сервера WireGuard на Ubuntu.

Рекомендуется размещать VPN-сервер и почтовый сервер на разных хостах для уменьшения сложности управления. Если оба сервера находятся на одном хосте, необходимо выполнить дополнительные действия, включая настройку политики ответов на VPN-сервере для изменения DNS A-записи вашего почтового сервера.

  • Конфигурация зоны политики ответов (RPZ) в DNS-резолвере BIND на системах Debian/Ubuntu.

Допустим, что DNS A запись для mail.yourdomain.com указывает на 12.34.56.78. В таком случае необходимо добавить запись в зоне политики ответов, которая будет перенаправлять её на частный IP-адрес VPN-сервера 10.10.10.1.

В последующих текстах я использую 12.34.56.78 в качестве публичного IP-адреса VPN-сервера. Если VPN-сервер и почтовый сервер размещены на одном хосте, необходимо заменить 12.34.56.78 на внутренний IP-адрес VPN 10.10.10.0/24.

Внесите IP-адрес VPN-сервера в исключения брандмауэра.

Когда вы настроили функционирующий почтовый сервер и VPN-сервер, необходимо внести IP-адрес VPN-сервера в список разрешенных адресов брандмауэра почтового сервера. Если у вас установлен брандмауэр UFW на Debian или Ubuntu, выполните следующую команду на почтовом сервере. Не забудьте заменить 12.34.56.78 на IP-адрес вашего VPN-сервера.

sudo ufw insert 1 allow in from 12.34.56.78

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

Читайте также:  Установка редакторов OnlyOffice Desktop на Linux: пошаговая инструкция

sudo ufw insert 1 allow in from IP-адрес-другого-веб-сервера

Закройте порт для отправки, а также порты IMAP и POP3

  • Порты для отправки: 587 и 465.
  • Порты IMAP: 143 и 993.
  • Порты для POP3: 110 и 995.

Порты 587 и 465 служат для отправки электронных писем через почтовые клиенты, такие как Mozilla Thunderbird и Microsoft Outlook. Злоумышленники могут осуществлять атаки методом перебора на эти порты.

В моем почтовом журнале (/var/log/mail.log на Debian/Ubuntu, /var/log/maillog на CentOS/RHEL) я нашел следующий случай: некомпетентный злоумышленник пытался получить доступ к системе, но каждый раз сталкивался с неудачей при аутентификации SASL.

postfix/smtps/smtpd[18071]: Установлено анонимное TLS-соединение с unknown[92.118.38.56]: TLSv1.2 с шифром ECDHE-RSA-AES256-GCM-SHA384 (256/256 бит) postfix/smtps/smtpd[18071]: предупреждение: unknown[92.118.38.56]: Аутентификация SASL LOGIN не удалась: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: потеряно соединение после AUTH от unknown[92.118.38.56] postfix/smtps/smtpd[18071]: отключение от unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: подключение от unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Установлено анонимное TLS-соединение с unknown[92.118.38.56]: TLSv1.2 с шифром ECDHE-RSA-AES256-GCM-SHA384 (256/256 бит) postfix/smtps/smtpd[18071]: предупреждение: unknown[92.118.38.56]: Аутентификация SASL LOGIN не удалась: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: потеряно соединение после AUTH от unknown[92.118.38.56] postfix/smtps/smtpd[18071]: отключение от unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: подключение от unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Установлено анонимное TLS-соединение с unknown[92.118.38.56]: TLSv1.2 с шифром ECDHE-RSA-AES256-GCM-SHA384 (256/256 бит) postfix/smtps/smtpd[18071]: предупреждение: unknown[92.118.38.56]: Аутентификация SASL LOGIN не удалась: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: потеряно соединение после AUTH от unknown[92.118.38.56] postfix/smtps/smtpd[18071]: отключение от unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3

Мне не нравится подобная активность в моем почтовом журнале, поэтому я блокирую порты 587, 465, 143, 993, 110 и 995 через брандмауэр. Так как IP-адрес моего VPN-сервера в белом списке, только пользователи, подключенные к нему, могут использовать эти порты.

Для блокировки этих портов в брандмауэре UFW сначала следует вывести список текущих правил.

sudo ufw status numbered

Существуют определенные правила для IPv4 и IPv6. Чтобы заблокировать порт 587, необходимо удалить правила с номерами 16 и 6, начиная с удаления правила с более высоким индексом.

sudo ufw delete 16 sudo ufw delete 6

После этого вам нужно заново ввести команду sudo ufw status numbered, чтобы увидеть обновлённый список правил брандмауэра. Имейте в виду, что номера индексов некоторых правил были изменены.

На этот раз я планирую заблокировать порт 465, поэтому необходимо удалить правила #15 и #6.

Читайте также:  Настройка безопасного FTP-сервера с использованием Pure-FTPd на Ubuntu

sudo ufw delete 15 sudo ufw delete 6

После этого примените аналогичный подход для блокировки портов 143, 993, 110 и 995. Естественно, порт 25 должен оставаться открытым для приема электронных писем от других SMTP-серверов.

Обеспечение безопасности панели управления и веб-почты

Закрытие TCP портов 80 и 443 поможет защитить панель администратора и веб-почту от атак. Тем не менее, это также лишит всех виртуальных хостов публичного доступа. Некоторые пользователи могут иметь в Apache/Nginx хосты, которые нужно оставить доступными в Интернете. Вместо блокировки портов 80 и 443 в файрволе, разумнее воспользоваться встроенными механизмами контроля доступа в Apache/Nginx.

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

sudo nano /etc/nginx/conf.d/mail.your-domain.com.conf

Вставьте указанные строки в раздел SSL-сервера, работающего на порту 443. (Блок сервера на порту 80 можно оставить без изменений.) Это обеспечит доступ к веб-почте только для IP-адреса 12.34.56.78, а всем остальным адресам будет отказано в доступе.

allow 12.34.56.78; deny all;

доступ к веб-почте через белый список в nginx

При наличии нескольких VPN-серверов вы можете добавить несколько IP-адресов следующим образом:

allow 12.34.56.78Конечно, напишите текст, который нужно перефразировать.12.34.56.79; deny all;

Сохраните изменения в файле и закройте его. После этого проведите проверку конфигураций Nginx.

sudo nginx - t

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

sudo systemctl reload nginx

Пользователи, которые не включены в белый список, столкнутся с ошибкой 403 — доступ запрещён.

безопасный почтовый сервер на основе nginx

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

sudo nano /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf

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

<locationMatch "^/">Требуется IP.12.34.56.78

Контроль доступа к вебпочте Apache

Если у вас имеется несколько VPN-серверов, вы можете добавить несколько IP-адресов следующим образом:

<locationMatch "^/">Требуется IP.12.34.56.78 12.34.56.79

Сохраните файл и закройте его. После этого проверьте настройки Apache.

sudo apache2ctl - t

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

sudo systemctl reload apache2

Пользователи, не включенные в белый список, столкнутся с ошибкой 403 — доступ запрещен.

Отключение функции DNS по протоколу HTTPS в вашем браузере

Если VPN-сервер и почтовый сервер находятся на одном хосте, потребуется отключить DNS через HTTPS в вашем браузере.

  • Когда ваш компьютер подключен к VPN-серверу, ваш DNS-трафик уже защищен шифрованием, поэтому в веб-браузере функция DNS через HTTPS не требуется.
  • Когда в веб-браузере активирована функция DNS через HTTPS, используется внешний DNS-резольвер, из-за чего ваш локальный резольвер не задействован, и доступ к панели администратора или веб-почте может быть недоступен.
Читайте также:  Как установить PhotoQT Image Viewer на Ubuntu 16.04 и Linux Mint 18

В Firefox это можно найти в параметрах сети. В Chrome – в разделе настроек конфиденциальности и безопасности (безопасный DNS). Отключив его, закройте браузер и подождите около минуты. После этого доступ к админпанели и веб-почте должен восстановиться. Если проблема сохраняется, попробуйте очистить кэш браузера.

Примечание: Вы можете вручную настроить DNS через HTTPS-резольвер, однако это не требуется при подключении к вашему личному VPN-серверу.

Обновление TLS сертификата с использованием Certbot

При активации белого списка в виртуальном хосте Apache/Nginx, серверы Let’s Encrypt не смогут подключиться к вашему веб-серверу, что требуется для обновления TLS-сертификата Let’s Encrypt через вызов HTTP-01. Чтобы избежать этой проблемы, можно временно отключить белый список перед обновлением сертификата, а затем включить его обратно после завершения процесса.

Создайте скрипт оболочки в директории /root/.

sudo nano /root/certbot-renewal. sh

В случае использования Nginx, вставьте следующие строки в данный файл.

#! /bin/bash # отключить белый список sed - i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.your-domain.com:

css mail.your-domain.com.conf systemctl reload nginx postfix dovecot

Если вы работаете с Apache, внесите указанные строки в данный файл.

#! /bin/bash # отключить белый список sed - i 's/Require ip/#Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com Обновление сертификата TLS: systemctl reload apache2. Чтобы запустить автоматическое обновление, используйте команду: certbot renew --quiet. Для активации белого списка выполните: sed - i 's/#Require ip/Require ip/g' /etc/apache2/sites-enabled/.mail.your-domain.com-le-ssl.conf systemctl reload apache2 postfix dovecot

Сохраните файл и закройте его. После этого предоставьте ему права на выполнение.

sudo chmod +x /root/certbot-renewal.sh

После этого внесите изменения в файл crontab для пользователя root.

sudo crontab - e

Вставьте данную строку в конец файла, чтобы скрипт выполнялся ежедневно.

@daily bash /root/certbot-renewal.sh

Сохраните изменения и закройте документ.

Заблокировать порт SSH?

Так как IP-адрес вашего VPN-сервера включен в белый список, вы можете закрыть порт SSH в файрволе. Однако это может быть рискованно. В случае сбоя работы VPN-сервера вы можете оказаться заблокированным. Для повышения безопасности службы SSH я советую настроить аутентификацию с использованием открытого ключа или внедрить двухфакторную аутентификацию.

  • Два простых этапа для конфигурации SSH-входа на Ubuntu без использования пароля.
  • Конфигурация двухфакторной аутентификации SSH (2FA) на сервере Ubuntu

Итоговый анализ

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

  • Как настроить брандмауэр UFW на системах Debian, Ubuntu и Linux Mint.
  • Конфигурация автоматического обновления системы безопасности (Unattended-Upgrade) в Ubuntu.
  • Сервис Canonical Livepatch: обновление ядра Linux в Ubuntu без необходимости перезагрузки системы.

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