Ранее мы писали об установке почтового сервера 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
)
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. Подключитесь к другой системе и выполните следующие команды:
- helo yourdomain.com
- mail from: your.alias@yourdomain.com
- rcpt to: your.personal.mailbox@gmail-or-hostmail.com
- data
- Введите тестовую строку и дважды нажмите CTRL+D
- quit
Замените адреса и посмотрите, пересылаются ли сообщения на адрес за пределами вашего домена. Например, в качестве адреса получателя можно использовать адрес 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
(входящий трафик) значение «1».smtpd_tls_loglevel
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