Postfix – фатальная ошибка: нет механизмов аутентификации SASL

Вопрос или проблема

Я начинаю сервер 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 для дальнейшей отладки.

Если у вас возникнут дополнительные вопросы или нужна помощь по другим аспектам, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...