Вопрос или проблема
Я начинаю сервер Postfix на своем частном сервере. У меня установлен Dovecot, а система – Ubuntu 18.04.
Вот ошибка в mail.log
:
11 фев 03:23:47 hostname postfix/smtpd[9858]: соединение от localhost6.localdomain6[::1]
11 фев 03:23:47 hostname postfix/smtpd[9858]: предупреждение: smtpd_client_event_limit_exceptions: ненулевой хост
11 фев 03:23:47 hostname postfix/smtpd[9858]: фатальная ошибка: нет механизмов аутентификации SASL
11 фев 03:23:48 hostname postfix/master[9057]: предупреждение: процесс /usr/lib/postfix/sbin/smtpd pid 9858 завершился с кодом 1
11 фев 03:23:48 hostname postfix/master[9057]: предупреждение: /usr/lib/postfix/sbin/smtpd: ошибка запуска команды -- ограничение
Вот мой файл конфигурации, адреса доменов были изменены для конфиденциальности:
# См. /usr/share/postfix/main.cf.dist для более полного комментаризованного варианта
# Специфика Debian: указание имени файла приведет к использованию
# первой строки этого файла в качестве имени. Дефолт Debian
# это /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = нет
# добавление .domain - это задача MUA.
append_dot_mydomain = нет
# Раскомментируйте следующую строку, чтобы сгенерировать предупреждения о "отложенной почте"
#delay_warning_time = 4h
readme_directory = нет
# См. http://www.postfix.org/COMPATIBILITY_README.html -- по умолчанию 2 на
# свежих установках.
compatibility_level = 2
# Параметры TLS
smtpd_tls_cert_file = /etc/ssl/mydomain.com.crt
smtpd_tls_key_file = /etc/ssl/mydomain.com.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# См. /usr/share/doc/postfix/TLS_README.gz в пакете postfix-doc для
# информации о включении SSL в smtp-клиент.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = smtp.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, smtp.mydomain.com, mydomain.com, localhost.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
#inet_interfaces = all
inet_protocols = all
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous,noplaintext
smtpd_sasl_tls_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
master.cf
:
#
# Файл конфигурации процесса master Postfix. Для подробностей о формате
# файла см. мануал master(5) (команда: "man 5 master" или
# онлайн: http://www.postfix.org/master.5.html).
#
# Не забудьте выполнить "postfix reload" после редактирования этого файла.
#
# ==========================================================================
# тип сервиса частный неудобный chroot пробуждение maxproc команда + аргументы
# (да) (да) (нет) (никогда) (100)
# ==========================================================================
smtp inet n - y - - smtpd
#smtp inet n - y - 1 postscreen
#smtpd pass - - y - - smtpd
#dnsblog unix - - y - 0 dnsblog
#tlsproxy unix - - y - 0 tlsproxy
#submission inet n - y - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - y - - smtpd
# -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_wrappermode=no
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
#628 inet n - y - - qmqpd
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
#qmgr unix n - n 300 1 oqmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
#
# ====================================================================
# Интерфейсы для ПО, не относящегося к Postfix. Убедитесь, что вы изучили мануал
# страницы не-Postfix ПО, чтобы узнать, какие опции ему необходимы.
#
# Многие из следующих сервисов используют агент доставки Postfix pipe(8). См. мануал pipe(8)
# для информации о ${recipient} и других параметрах оболочки сообщения.
# ====================================================================
#
# maildrop. См. файл Postfix MAILDROP_README для подробностей.
# Также укажите в main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Последние версии Cyrus могут использовать существующий пункт master.cf "lmtp".
#
# Укажите в cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Укажите в main.cf один или несколько из следующих:
# mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Амос Гуо)
# Также укажите в main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Старый пример доставки через Cyrus.
#
#old-cyrus unix - n n - - pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# См. файл Postfix UUCP_README для подробностей конфигурации.
#
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Другие внешние методы доставки.
#
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
Вот что происходит, когда я запускаю telnet localhost 25
:
root@hostname:~# telnet localhost 25
Пытаюсь ::1...
Подключено к mydomain.com.
Символ выхода '^]'. # Задерживается здесь на некоторое время, почти минуту
Соединение закрыто удаленным хостом.
И попытка подключиться к сеансу telnet удаленно, используя smtp.mydomain.com:25
или просто IP сервера на порту 25, просто истекает по времени.
Я пытался искать много решений, но ни одно из них не решило эту проблему. Я новичок в Postfix, SMTP и любых почтовых вещах.
EDIT:
Dovecot dovecot.conf
:
disable_plaintext_auth = нет
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {
driver = passwd
}
passdb {
args = %s
driver = pam
}
protocols = " imap"
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
}
ssl=required
ssl_cert = </etc/ssl/mydomain.com.crt
ssl_key = </etc/ssl/mydomain.com.key
Dovecot 10-master.conf
:
#default_process_limit = 100
#default_client_limit = 1000
# Ограничение VSZ по умолчанию (размер виртуальной памяти) для процессов сервиса. Это в основном
# предназначено для обнаружения и завершения процессов, которые утечки памяти, прежде чем они съедят
# все.
#default_vsz_limit = 256M
# Логин пользователя используется внутренне процессами входа. Это самый ненадежный
# пользователь в системе Dovecot. Он не должен иметь доступ ни к чему.
#default_login_user = dovenull
# Внутренний пользователь используется непривилегированными процессами. Он должен быть отделен от
# пользователя входа, чтобы процессы входа не могли мешать другим процессам.
#default_internal_user = dovecot
service imap-login {
inet_listener imap {
#port = 143
}
inet_listener imaps {
#port = 993
#ssl = yes
}
# Количество соединений, которые нужно обработать, прежде чем начать новый процесс. Обычно
# единственно полезные значения - это 0 (без ограничений) или 1. 1 более безопасен, но 0
# быстрее. <doc/wiki/LoginProcess.txt>
#service_count = 1
# Количество процессов, которые всегда должны ожидать дополнительных соединений.
#process_min_avail = 0
# Если вы установили service_count=0, возможно, вам нужно будет увеличить это.
#vsz_limit = $default_vsz_limit
}
service pop3-login {
inet_listener pop3 {
#port = 110
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}
service lmtp {
unix_listener lmtp {
#mode = 0666
}
# Создать inet слушателя только если вы не можете использовать указанный выше UNIX-сокет
#inet_listener lmtp {
# Избегайте сделать LMTP видимым для всего интернета
#address =
#port =
#}
}
service imap {
# Большая часть памяти идет на mmap() файлов. Вам может понадобиться увеличить это
# ограничение, если у вас огромные почтовые ящики.
#vsz_limit = $default_vsz_limit
# Макс. число процессов IMAP (соединений)
#process_limit = 1024
}
service pop3 {
# Макс. число процессов POP3 (соединений)
#process_limit = 1024
}
service auth {
# auth_socket_path по умолчанию указывает на этот сокет userdb. Обычно
# используется dovecot-lda, doveadm, возможно процесс imap и т. д. Пользователи, которые имеют
# полные права на этот сокет, могут получить список всех имен пользователей и
# получить результаты всех запросов userdb.
#
# Режим 0666 по умолчанию позволяет любому подключаться к сокету, но
# запросы userdb будут успешными, только если userdb возвращает поле "uid", которое
# совпадает с UID процесса вызова. Также, если uid или gid вызывающего совпадают с
# uid или gid сокета, запрос выполняется. Все остальное вызывает сбой.
#
# Чтобы предоставить вызывающему полные права на поиск всех пользователей, установите режим
# на что-то, кроме 0666, и Dovecot разрешит ядру применять
# разрешения (например, 0777 позволяет всем иметь полные права).
unix_listener auth-userdb {
#mode = 0666
#user =
#group =
}
# Аутентификация Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
# Процесс аутентификации выполняется от имени этого пользователя.
#user = $default_internal_user
}
service auth-worker {
# Процесс рабочего аутентификатора по умолчанию выполняется от имени root, чтобы он мог получить доступ
# к /etc/shadow. Если это не обязательно, пользователя следует изменить на
# $default_internal_user.
#user = root
}
service dict {
# Если используется прокси dict, почтовые процессы должны иметь доступ к его сокету.
# Например: mode=0660, group=vmail и global mail_access_groups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}
}
И dovecot 10-auth.conf
полностью закомментирован, только эти строки не закомментированы:
auth_mechanisms = plain login
!include auth-system.conf.ext
Похоже, вы хотите использовать dovecot
в качестве источника аутентификации SASL для postfix
. В этом случае dovecot
должен работать и быть настроен для предоставления сокета аутентификации внутри chroot, в котором работает postfix/smtpd
.
В вашей конфигурации postfix
тип аутентификации SASL и путь к сокету определены как:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
(довольно общий) dovecot
конфигурация, соответствующая этому, будет:
service auth {
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0600
}
}
В моем случае я избавился от этого сообщения (после миграции старой конфигурации Postfix), установив libsasl2-modules
на Debian 12.
# apt install libsasl2-modules
Journalctl возвращал эти строки после фатальной строки.
postfix/smtpd[1234]: фатальная ошибка: нет механизмов аутентификации SASL
12 ноя 15:18:20 hal90002 postfix/master[5678]: предупреждение: процесс /usr/lib/postfix/sbin/smtpd pid 1234 завершился с кодом 1
12 ноя 15:18:20 hal90002 postfix/master[5678]: предупреждение: /usr/lib/postfix/sbin/smtpd: ошибка запуска команды -- ограничение
Ответ или решение
Ошибка "Postfix – fatal: no SASL authentication mechanisms" указывает на то, что ваш сервер Postfix не может найти доступные механизмы аутентификации SASL (Simple Authentication and Security Layer). Это может произойти по нескольким причинам, включая неправильные настройки Dovecot или отсутствие необходимых компонентов SASL. Давайте разберем ситуацию подробнее и шаг за шагом рассмотрим возможные решения.
Шаг 1: Проверка Установки Необходимых Пакетов
Для начала убедитесь, что у вас установлены необходимые пакеты для работы с SASL. На системах, основанных на Debian (включая Ubuntu), вам может понадобиться установить пакет libsasl2-modules
. Вы можете сделать это с помощью команды:
sudo apt install libsasl2-modules
Этот пакет предоставляет различные механизмы аутентификации SASL, которые необходимы для правильной работы Postfix.
Шаг 2: Конфигурация Dovecot
Убедитесь, что ваша конфигурация Dovecot правильно настроена для работы с Postfix. Ваша секция service auth
в конфигурационном файле Dovecot должна выглядеть следующим образом:
service auth {
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0660
}
}
Эта настройка создает Unix-сокет, через который Postfix может взаимодействовать с Dovecot для аутентификации пользователей. Убедитесь, что указанное местоположение сокета /var/spool/postfix/private/auth
совпадает с настройками в вашем файле конфигурации Postfix.
Шаг 3: Настройки Postfix
Ваш основной файл конфигурации Postfix (main.cf
) должен содержать следующие строчки:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
Эти параметры указывают Postfix использовать Dovecot для аутентификации. Убедитесь, что вы не забыли перезапустить Postfix после внесения изменений:
sudo systemctl restart postfix
Шаг 4: Проверка Логов
Если ошибка сохраняется, проверьте журналы сообщений вашей системы. Используйте следующую команду для просмотра логов Postfix:
sudo tail -f /var/log/mail.log
Это может дать вам дополнительную информацию о том, что происходит при попытке аутентификации.
Шаг 5: Проверка Сетевых Настроек
Если вы не можете подключиться к серверу через telnet
, это может быть признаком проблем с сетевыми настройками. Убедитесь, что необходимые порты открыты. По умолчанию, Postfix слушает на порту 25. Убедитесь, что ваш фаервол не блокирует этот порт. Для проверки используйте:
sudo ufw status
Если необходимо, откройте порт:
sudo ufw allow 25/tcp
Заключение
Следуя этим шагам, вы должны быть в состоянии решить проблему с аутентификацией SASL на вашем сервере Postfix. Убедитесь в правильной конфигурации Dovecot и Postfix, а также в наличии необходимых пакетов. Если проблема не устраняется, попробуйте более подробные логи и обратитесь к документации по Dovecot и Postfix для дальнейшей отладки.
Если у вас возникнут дополнительные вопросы или нужна помощь по другим аспектам, не стесняйтесь обращаться за помощью!