Усиление защиты почтового сервера от взлома с помощью VPN на CentOS/RHEL
15:42, 11.12.2023
Защита почтового сервера с помощью VPN
Эта статья будет полезна всем пользователям, желающим обеспечить высокую степень защиты почтовых серверов от атак из Интернета. Здесь вы узнаете обо всех возможных приемах и рекомендациях для самостоятельного использования VPN. Проблема спамеров действительно огромна, они регулярно атакуют почтовые серверы. Достигнув цели и получив доступ к нужному серверу, они либо крадут информацию, либо рассылают большие объемы спама. Использование VPN на собственном хостинге позволяет значительно снизить вероятность появления таких спамеров и получить более безопасную среду.
Если вы читаете эту статью, то, скорее всего, у вас уже есть почтовый сервер и настроен VPN-сервер. Если нет, то следуйте нескольким руководствам и установите все, что вам нужно. Есть два варианта, VPN-сервер может работать на том же сервере, что и почтовый, или на отдельном хосте.
Лучшим вариантом будет работа почты и VPN как двух отдельных серверов, что значительно снизит сложность работы. При работе на одном сервере возникает необходимость в настроить зону ответа.
Закрытие портов
После того как вы настроили все, что связано с функционированием почтового и VPN-серверов, и убедились, что система работает без сбоев, можно переходить к следующему шагу. Желательно добавить IP-адрес VPN-сервера в белый список брандмауэра. На CentOS или RHEL это можно легко сделать одним небольшим изменением, просто заменив 12.34.56.78 на IP-адрес сервера. Перезагрузите Firewalld, и процесс будет завершен.
Теперь можно приступать к закрытию портов. Вам необходимо закрыть порты POP3, Submission и IMAP. Никому не нужна посторонняя активность на сервере, поэтому лучше закрыть в брандмауэре такие порты, как 995, 587, 110, 465, 993 и 143. Благодаря предыдущему шагу по созданию белых списков IP-адресов доступ к этим портам смогут получить только те, кто действительно подключен к VPN-серверу.
Не стоит забывать и о том, что порт 25 необходимо оставить для продолжения получения электронной почты с серверов SMPT.
Для удаления этих портов на RHEL и CentOS воспользуйтесь следующими командами:
sudo firewall-cmd --permanent --remove-service={smtp-submission,smtps,imap,imaps,pop3,pop3s}
sudo firewall-cmd --permanent --remove-port={587/tcp,465/tcp,143/tcp,993/tcp,110/tcp,995/tcp}
После этих команд может появиться предупреждение, но не стоит беспокоиться. Просто перезагрузите Firewalld, выполнив строку:
sudo systemctl reload firewalld
Защита панели администратора и веб-почты
Защиту Web-почты и панели администратора можно также обеспечить, просто заблокировав порты 443 и 80. Однако при этом возникает другая проблема - не будет публичного доступа к виртуальным хостам. Многие клиенты предпочитают использовать виртуальные хосты, например, в Nginx, и это должно быть открыто. Выходом из этой ситуации может стать развертывание функции контроля доступа для Nginx или Apache.
Безопасность Nginx
Для достижения более высокого уровня безопасности необходимо выполнить несколько важных шагов. Начните со следующего файла:
sudo nano /etc/nginx/conf.d/mail.your-domain.com.conf
Здесь необходимо отредактировать файл виртуального хоста для почты. Следующая строка будет запрещать все IP, кроме указанного вами:
allow 12.43.23.45;
deny all;
Если вы используете несколько VPN-серверов, то это не проблема. Вы можете добавить столько IP-адресов, сколько вам необходимо, затем сохранить изменения и закрыть файл. Протестируйте конфигурацию и, если она работает нормально, перезагрузите Nginx. После завершения всей процедуры пользователи, которых нет в белом списке, будут уведомлены о том, что что-то не так, с помощью ошибки 403.
Безопасность Apache
Как и в случае с Nginx, здесь процесс также начинается с webmail в каталоге /etc/httpd/conf.d/. Вам необходимо найти:
sudo nano /etc/httpd/conf.d/mail.your-domain.com-le-ssl.conf
Вам нужно будет заполнить необходимый IP между следующими тегами - <VirtualHost>...</VirtualHost>.
При заполнении требуемого IP-адреса все остальные доступы будут запрещены.
Require ip 12.45.54.11
В этот файл также можно добавить пару IP-адресов, и эта строка будет выглядеть следующим образом:
Require ip 45.34.11.78 15.45.23.69
Затем оставьте правки в том виде, в котором они были изменены, и закройте этот файл. После этого проверьте конфигурацию Apache и перезагрузите его. Те пользователи, которые не попали в белый список, будут уведомлены об этом с помощью ошибки 403.
Отключение DNS через HTTPS в веб-браузере
Если почтовый и VPN-серверы находятся на одном узле, то рекомендуется отключить DNS через HTTPS в браузере.
- Если машина подключена к VPN-серверу, то DNS-трафик шифруется, и необходимость в функции DNS через HTTPS отпадает.
- Если DNS через HTTPS в браузере включен, то используется DNS сторонних производителей. При этом ваш личный DNS-резольвер не используется, и вы не сможете получить доступ к веб-почте и панели администратора.
В различных браузерах эта настройка может называться по-разному. Например, пользователям Firefox следует искать настройки сети. Клиенты Chrome найдут эти настройки в разделе Конфиденциальность и безопасность. После отключения необходимо закрыть браузер и немного подождать. После этой процедуры доступ, скорее всего, будет восстановлен. В случае если он по-прежнему не работает, возможно, необходимо очистить кэш браузера.
Обновление TLS-сертификатов Certbot
Если вы включили белый список в Nginx или Apache, то в такой ситуации вы также заблокируете подключение Let's Encrypt серверов к вашему серверу. Это необходимо для обновления TLS-сертификата с вызовом HTTP-01. Эту проблему можно решить, отключив белый список перед обновлением сертификата и включив его сразу после обновления.
Начните с создания shell-скрипта в каталоге /root/.
sudo nano /root/certbot-renewal.sh
В случае применения Nginx в файл необходимо добавить следующие строки.
sed -i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.required-domain.com.conf
systemctl reload nginx
certbot renew --quiet
sed -i 's/#deny all;/deny all;/g' /etc/nginx/conf.d/mail.required-domain.com.conf
systemctl reload nginx
В случае применения Apache необходимо добавить следующие строки.
sed -i 's/Require ip/#Require ip/g' /etc/httpd/conf.d/mail.required-domain.com-le-ssl.conf
systemctl reload apache2
certbot renew --quiet
sed -i 's/#Require ip/Require ip/g' /etc/httpd/conf.d/mail.required-domain.com-le-ssl.conf
systemctl reload apache2
Сохраните изменения и закройте этот файл. После этого добавьте разрешение execute и отредактируйте файл crontab пользователя root. Настройте все таким образом, чтобы shell-скрипт запускался один раз в сутки, и закройте файл с внесенными изменениями.
Рассмотрение вопроса о защите портов SSH
После завершения процесса составления белых списков IP-адресов блокировка портов важна для обеспечения безопасности. Как и в случае со всеми закрытыми портами, можно также рассмотреть возможность блокировки порта SSH в брандмауэре. Однако этот процесс может привести к некоторым дополнительным рискам. В случае непредвиденных ситуаций, когда сервер не функционирует, можно полностью заблокировать его. Поэтому лучше подумать о надлежащей защите SSH. Наилучшим вариантом здесь будет настройка двухфакторной аутентификации или аутентификации по открытому ключу.
Подведем итоги
Безопасность почтовых серверов действительно важна и должна быть стратегически спланирована и организована. Все шаги, которые мы рассмотрели в этой статье, несомненно, помогут повысить уровень безопасности и минимизировать риски атак спамеров. Меры по защите портов или их полная блокировка должны рассматриваться как хороший метод защиты от нежелательных входов в систему. Кроме того, защита панели администратора и веб-почты также является хорошим подходом, который следует применять всем пользователям.