Усиление безопасности и защита конфиденциальной информации в Postfix

Ранее мы писали об установке почтового сервера Postfix в дистрибутиве Ubuntu или Debian Linux и на CentOS 7. Если вы уже установили Postfix, то пришло время подумать о повышении безопасности сервера и защите конфиденциальности данных. Этому и будет посвящена наша статья.

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

Почему необходимо усиливать безопасность Postfix?

Каждый сервис, подключенный к сети Интернет, рано или поздно подвергается атаке автоматизированными скриптами. Например, некорректно сконфигурированный Postfix может отправлять сообщения любой сетевой системе. Этот тип конфигурации называется open-relay. В результате система окажется в черных списках. Хорошо, если это просто тестовая система. Если же это может коснуться клиентов, то вы можете понести репутационные риски.

Другой причиной для усиления защиты Postfix является растущая потребность в сохранении личной информации. Безопасность и сохранность конфиденциальных данных стоят не на первых местах в списке приоритетов большинства действующих протоколов, включая SMTP. Согласно им обмен данными с другими системами может производиться без какой-либо защиты. Это может привести к несанкционированному отслеживанию данных кем-угодно, от системного администратора до, возможно, ЦРУ или АНБ.

Поэтому важно самостоятельно усилить защиту Postfix, и данная статья поможет вам в этом.

Подготовка

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

Проверка существующей конфигурации Postfix

Текущая конфигурация Postfix может иметь ошибки, о которых вы можете не знать. Итак, запустим первый тест, чтобы проверить это.

postconf 1> /dev/null

Команду postconf можно использовать для отображения конфигурации Postfix или внесения изменений. В этом случае весь стандартный вывод (stdout) перенаправляется в цифровую корзину (/dev/null). Если в конфигурации есть ошибки или предупреждения, они отобразятся, как показано на примере ниже:

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

Создание резервной копии конфигурации Postfix

Перед внесением изменений в настройки системы рекомендуется сделать резервную копию настроек. Создадим копию каталога /etc/postfix.

tar czf /root/postfix-$(date "+%F").tar.gz /etc/postfix

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

postconf > /root/postconf-$(date "+%F")

Версия Postfix

Проверить версию Postfix можно следующей командой:

postconf mail_version | awk -F" = " '{print $2}'

Или воспользуйтесь менеджером пакетов. Пользователи Debian и Ubuntu могут использовать команду dpkg.

dpkg -l postfix

Усиление безопасности Postfix

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

Базовые настройки безопасности

Отключение VRFY (verify)

С помощью команды VRFY (сокращение от «verify») можно проверить, существует ли адрес электронной почты на почтовом сервере. Она позволяет другим делать предположения о существовании запрашиваемой учетной записи и доставлять сообщения, возможно, спам. Для пересылки данных между двумя почтовыми серверами команда VRFY обычно не требуется.

postconf -e disable_vrfy_command=yes

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

Сетевые интерфейсы (inet_interfaces)

Первый параметр настройки, который нужно проверить — это inet_interfaces или интерфейсы, которые прослушивает Postfix. По умолчанию он имеет значение all. Если вы просто хотите передавать сообщения другим системам, например отправлять исходящие электронные письма, не нужно прослушивать все сетевые интерфейсы. Настройте Postfix для прослушивания портов только в локальном интерфейсе. Для этого установите для inet_interface значение loopback-only.

postconf -e inet_interfaces=loopback-only

Проверьте конфигурацию после перезапуска Postfix. Можно использовать вывод netstat или ss:

ss -pant | grep ":25"

Важно:

  • Некоторые изменения требуют перезапуска Postfix.
  • При изменении параметра inet_interfaces обновления настроек (reload) недостаточно, делайте restart службы.
  • Если вы настраиваете систему, которая пересылает почтовые сообщения от других систем, то, вам необходимо настроить прослушивание всех сетевых интерфейсов, откуда поступают запросы.

Предотвращение нежелательной пересылки электронной почты

Первое правило при настройке почтового сервера — избегайте open-relay. Сервер open-relay — это почтовый сервер, позволяющий отправлять электронную почту от произвольного отправителя произвольному получателю. Такие серверы не ограничивают доступ к себе, то есть не производят проверку того, является ли отправитель письма собственным клиентом-пользователем или является ли получатель письма локальным пользователем такого сервера. Благодаря чему такой сервер легко используется для рассылки спама.

Cети

Передача сообщений настраивается с помощью нескольких параметров. Первый — это настройка mynetworks, которая по-умолчанию должна включать в себя только сетевые адреса локального сетевого интерфейса (lo).

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Чтобы расширить этот список, просто добавьте сегменты сети или отдельные системы. Укажите соответствующую маску сети — для одиночного хоста — /32 для IPv4, /128 для IPv6.

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

postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"

Домены

Вторым шагом определим, какие письма принимать. Это называется ретрансляцией, и одним из вариантов настройки ретрансляции является поиск домена получателя, которому соответствует настройка relay_domains, указывающая, для каких доменов принимать электронную почту.

Тестирование настроек ретрансляции Postfix

Вы можете проверить правильность настройки конфигурации, установив соединение с другой системой с помощью Telnet. Подключитесь к другой системе и выполните следующие команды:

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

Если все настроено так, чтобы избежать open-relay, вернется сообщение об отказе в доступе к ретранслятору.

Relay access denied (in reply to RCPT TO command)

Настройки входящей электронной почты

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

Включение HELO

Диалог клиента и сервера, как правило, начинается с приветствия. Люди, приветствуя друг друга, говорят «привет» или «hello» . Почтовые серверы делают это с помощью команды HELO или расширенной версии EHLO. Серверы, которые этого не делают, обычно неверно настроены или просто рассылают спам.

postconf -e smtpd_helo_required=yes

Настройки исходящей электронной почты

Обычно входящую электронную почту получает малое количество машин, а остальные серверы должны поддерживать только отправку. Это может быть рассылка системных уведомлений от ежедневных заданий cron, или это может быть веб-приложение, которое должно отправлять электронные письма для активации учетной записи или сброса пароля.

Настройка ретрансляции с аутентификацией с помощью smarthost

Сперва необходимо определить, какая система будет принимать электронную почту. В терминах Postfix эта система является так называемым smarthost или relayhost. Используйте команду postconf, чтобы задать настройки из командной строки, или отредактируйте файл main.cf.

relayhost = [hostname.example.org]:587

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

Следующим шагом является включение аутентификации SASL.

# Включаем аутентификацию SASL
smtp_sasl_auth_enable = yes
# Запрещаем любые методы, которые разрешают анонимную аутентификацию
smtp_sasl_security_options = noanonymous
# Определяем местоположение файла sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd

Теперь отредактируем файл /etc/postfix/sasl/sasl_passwd.

[mail.example.org]:587 username:password

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

postmap /etc/postfix/sasl/sasl_passwd

Наконец, настраиваем шифрование.

# Включаем шифрование STARTTLS
smtp_use_tls = yes
# Указываем расположение сертификатов CA
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Теперь можно перезапустить Postfix и отправить тестовое письмо.

echo “test” | mail -s “test” me@example.org

Полезные команды:

  • postqueue -f (позволяет очистить очередь сообщений и повторить доставку всех писем)

Криптография, шифрование и защита личной информации

Ведение журнала TLS

Чтобы увидеть подробную информацию из TLS, необходимо повысить уровень журналирования Postfix. Установите для smtp_tls_loglevel (исходящий трафик) или smtpd_tls_loglevel (входящий трафик) значение «1».

postconf -e smtp_tls_loglevel=1

Тестирование ключей

Конфигурацию SMTP и настройки шифрования можно легко проверить с помощью OpenSSL. В частности, следует проверить криптографическую стойкость протокола установки соединения. Обычно это делается с помощью алгоритма Диффи-Хеллмана (DH), который осуществляет обмен криптографическими ключами.

echo | openssl s_client -starttls smtp -connect localhost:25 -cipher "EDH" 2>/dev/null | grep -i -e "Server .* key"

Примечание: Минимальная подходящая версия OpenSSL — 1.02, в противном случае часть информации не будет отображаться. Чтобы убедиться, что используется последняя версия OpenSSL, используйте openssl version.

Эта команда должна вернуть две строки. Первая строка является временным ключом, его длина должна быть длиной не менее 1024 бит, чтобы предотвратить атаку Logjam.

Server Temp Key: DH, 2048 bits

Вторая строка — размер открытого ключа. Обычно в современных системах это 2048-битный (или выше) ключ.

Server public key is 2048 bit