Способы защиты почтового сервера от несанкционированного доступа с использованием VPN на CentOS/RHEL

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

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

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

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

  • Как просто установить полноценный почтовый сервер на CentOS 8 с помощью iRedMail.

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

  • Создайте личный VPN-сервер WireGuard на CentOS.

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

  • Конфигурация зоны политики ответов (RPZ) в резолвере BIND на CentOS/RHEL.

Если 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.

Читайте также:  Как установить последнюю версию Webmin на Debian 10/9/8

Внесите IP-адрес VPN-сервера в список разрешенных в брандмауэре.

После настройки и запуска почтового сервера и VPN-сервера необходимо внести IP-адрес VPN-сервера в белый список брандмауэра почтового сервера. Если у вас установлен Firewalld (CentOS/RHEL), выполните следующую команду.

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 команды=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 команды=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 команды=2/3

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

Для отключения служб imap, imaps, smtp-submission, smtps, pop3 и pop3s на CentOS/RHEL выполните следующие две команды.

sudo firewall-cmd --permanent --remove-service= sudo firewall-cmd --permanent --remove-port=

Если вам попалось предупреждение, такое как Warning: NOT_ENABLED: smtps, не обращайте на него внимания. Чтобы изменения начали действовать, перезапустите firewalld.

Читайте также:  Регулярные выражения grep, egrep, sed в Linux

sudo systemctl reload firewalld

Безусловно, необходимо оставить порт 25 открытым для приема электронных писем от других SMTP-серверов.

Обеспечение безопасности администраторской панели и веб-электронной почты.

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

Nginx

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

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

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

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

Apache

Измените конфигурационный файл виртуального хоста для веб-почты, расположенный в директории /etc/httpd/conf.d/, например

sudo nano /etc/httpd/conf.d/mail.your-domain.com-le-ssl.conf

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

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

Читайте также:  PostfixAdmin – Настройка виртуальных почтовых ящиков на почтовом сервере Ubuntu

Необходимо получить IP.12.34.56.78 12.34.56.79

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

sudo apachectl - t

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

sudo systemctl reload httpd

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

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

Выключите DNS через HTTPS в вашем интернет-браузере.

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

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

В 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 # отключить белый список в виртуальном хосте Nginx sed - i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.your-domain.comВот перефразированный текст:

cssmail.your-domain.com.c