У меня есть сервер ретрансляции SMTP, который я недавно заменил на OS X 10.10 Yosemite с сервером Server.app. Он работает как ретранслятор только для SMTP, позволяя ретранслировать только хосты из локальной сети. Мы делаем это так, чтобы вся почта из нашей подсети правильно отправлялась с проверенного хоста для нашего домена для Sender Policy Framework (SPF) и т. Д.
Настроить ретрансляцию было довольно просто. Следуя документации Apple для Отключение почтовых служб на OS X Server, Я сделал следующее:
sudo serveradmin settings mail:global:skip_enable_service_check = yes
sudo serveradmin settings mail:imap:enable_imap = no
sudo serveradmin settings mail:imap:enable_pop = no
sudo serveradmin settings mail:imap:enable_sieve = no
sudo serveradmin stop mail
sudo serveradmin start mail
Это гарантировало, что работает только SMTP, и останется так после перезагрузки или перезапуска почтовой службы. Поскольку имя хоста сервера ретрансляции SMTP является поддоменом в домене, для которого он ретранслирует, мне также пришлось изменить /Library/Server/Mail/Config/postfix/main.cf
удалять $myhostname
& $mydomain
из "mydestination" результирующая строка будет следующей:
mydestination = localhost.$mydomain, localhost
Это также сработало, Server.app распознал и сохранил изменение (что подтверждается запуском sudo serveradmin settings mail:postfix
). То же самое и с настройками mynetworks
строка, чтобы указать, из каких подсетей принимается ретрансляция.
Проблема, с которой я столкнулся, заключается в том, что изменения в smtpd_pw_server_security_options
линия (в частности, чтобы удалить LOGIN
& PLAIN
типы аутентификации) не сохранятся и вернутся к значениям по умолчанию (включая нежелательные типы аутентификации в виде открытого текста) при запуске почтовой службы. Документация Apple по Параметры постфикса для Apple в Mac OS X Server подразумевают, что пропуск LOGIN
& PLAIN
параметры должны быть действительными.
Я пытался:
smtpd_pw_server_security_options
в /Library/Server/Mail/Config/postfix/main.cf
sudo serveradmin settings mail:postfix:smtpd_use_pw_server = no
(mail:postfix:smtpd_use_pw_server
вроде пустой словарь под Йосемити)sudo serveradmin settings postfix:smtp_sasl_auth_enable = yes
(в Йосемити по умолчанию установлено «нет», поэтому я предполагаю, что Apple просто поменяла местами функциональность этой опции из приведенного выше mail:postfix:smtpd_use_pw_server
вариант)serveradmin
удалить login
& plain
элементы из mail:postfix:smtpd_pw_server_security_options
массив (например, sudo serveradmin settings mail:postfix:smtpd_pw_server_security_options:_array_index:2 = delete
), но, как упоминает Чарльз Эдж в своем сообщении в блоге о Удаление записей 'serveradmin settings' в OS X Server, похоже, что эта функция не работает. И нет, эти настройки не отражаются в /Library/Server/Mail/Config/MailServicesOther.plist
или любой другой .plist, поэтому изменение их вручную не представляется возможным.Я временно отключил аутентификацию по обычному тексту с помощью Server.app, переключив настройку аутентификации с открытым текстом с частично установленного флажка (предположительно из-за того, что IMAP отключен) на полностью снятый флажок, но он несовместим и не сохраняется после перезапуска почтовой службы.
Мы будем очень благодарны за любые предложения или решения, за исключением совета не использовать Server.app в OS X. Это для магазина Apple, который должен кормить продукты Apple по причинам, о которых я не могу здесь рассказать. Естественно, включение аутентификации по обычному тексту также не является вариантом по очевидным причинам безопасности и соответствия требованиям PCI DSS.
Я могу - немного поиграть - отключить аутентификацию открытого текста SMTP через Server.app, хотя он не очень хорошо приживается (конечно, не переживает перезагрузку или перезапуск почтовой службы, а иногда даже теряется, когда копается в Server.app). Я понял, что в качестве временного обходного пути я могу, по крайней мере, автоматически уведомлять, если аутентификация SMTP с открытым текстом «PLAIN» и «LOGIN» будет повторно включена.
Я создал следующий сценарий быстрого bash, который выполняет свою работу:
#!/bin/bash
#
# smtp_plaintext_auth_check - check to see if plaintext auth is supported by SMTP service and warn if it is
#
# v0.1 2015-03-12 - Morgan Aldridge <http://serverfault.com/users/13496/morgant>
# Initial version.
#
admin_emails="email@domain.tld"
debug=false
host=$(hostname)
date=$(date +%Y-%m-%d-%H%M)
plaintext_auth_enabled=false
# check via serveradmin to see if plaintext auth is allowed by the SMTP server
if $debug; then echo "Checking Mail service to see if SMTP plaintext auth is supported..."; fi
while IFS= read -r line; do
if [[ "$line" =~ (plain|login) ]]; then
if $debug; then echo " Found '${BASH_REMATCH[1]}' SMTP auth method which is plaintext!"; fi
plaintext_auth_enabled=true
fi
done <<< "$(serveradmin settings mail:postfix:smtpd_pw_server_security_options)"
# if plaintext auth is enabled, notify admins
if $plaintext_auth_enabled; then
if $debug; then echo "Notifying admins via email that SMTP plaintext auth IS supported. That's bad!"; fi
mail -s "Error on $host: SMTP plaintext auth is allowed! $date" $admin_emails <<-EOM
ERROR on $host: SMTP plaintext auth appears to be allowed by the Mail service! This is a security risk and against PCI DSS compliance!
Please resolve ASAP!
EOM
else
if $debug; then echo "Phew, SMTP plaintext auth doesn't appear to be supported. That's good."; fi
fi
Опять же, это обходной путь и я бы предпочел программно отключить аутентификацию открытого текста SMTP.