Методы защиты почтового сервера от хакерских атак с использованием VPN на системах Debian и Ubuntu

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

Начальные условия

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

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

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

  • Установите и настройте личный VPN-сервер WireGuard на Ubuntu.
  • Настройка собственного сервера VPN с использованием WireGuard на операционной системе Debian

Рекомендуется размещать 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.

Читайте также:  Как установить LibreOffice 6.2 на Ubuntu 18.04 и 16.04 через PPA

Внесите 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-адреса других ваших серверов. К примеру, у некоторых пользователей может быть отдельный веб-сервер, который должен отправлять письма через почтовый сервер. В таком случае не забудьте добавить его в белый список.

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

Отключите порты для подачи, IMAP и POP3.

  • Порты для подключения: 587 и 465.
  • Порты для IMAP: 143 и 993.
  • Порты для POP3: 110 и 995.

Почтовые клиенты, например, Mozilla Thunderbird и Microsoft, применяют порты 587 и 465.

postfix/smtps/smtpd[18071]:

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

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

sudo ufw status numbered

sudo ufw статус с номерами закройте порт 587.

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

sudo ufw delete 16 sudo ufw delete 6

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

Закройте порт 465 в файрволе UFW на Debian или Ubuntu.

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

sudo ufw delete 15 sudo ufw delete 6

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

Обеспечение безопасности административной панели

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

Читайте также:  Как установить Tor Browser на Ubuntu или любую другую версию Linux

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

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

Сохраните изменения и закройте файл. После этого проверьте настройки 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-адресам будет отказано в доступе.

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

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

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

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

sudo apache2ctl - t

Если синтаксис корректен, перезапустите Apache для применения изменений.

sudo systemctl reload apache2

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

Защита административной панели и веб-почты от взлома в Apache.

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

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

  • Когда ваш компьютер использует VPN-сервер, DNS-трафик уже защищен, поэтому функция DNS через HTTPS в браузере вам не требуется.
  • Когда в веб-браузере активирован DNS через HTTPS, вы обращаетесь к стороннему DNS-резольверу, что исключает использование вашего собственного. В результате вы не сможете получить доступ к панели администратора и веб-почте.
Читайте также:  Эффективное использование Nmap для сетевого сканирования и анализа безопасности

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

Обратите внимание: вы можете настроить собственный DNS через HTTPS-резольвер, но это не требуется, если вы используете свой VPN-сервер.

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

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

Напишите shell-скрипт в директории /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

Чтобы обновить TLS-сертификат, выполните команду:

systemctl reload nginx

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

certbot renew --quiet

Чтобы активировать белый список, отредактируйте файл командой:

sed - i 's/#deny all;/deny all;/g' /etc/nginx/conf.d/

.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-nle-ssl.conf systemctl reload apache2 # обновить сертификат TLS 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

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

@daily bash /root/certbot-renewal.sh

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

Закрыть доступ к порту SSH?

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

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