У меня есть сервер Debian с установленными postfix, fail2ban, roundcube, webmin и dovecot. Мне удалось отправить почту с порта 25, но независимо от того, что я пытаюсь сделать, я не могу заставить его работать с 465 и/или 587, независимо от метода, который я пытаюсь использовать. Это происходит и в roundcube, и в почтовом клиенте, хотя я подозреваю, что обе ошибки могут отличаться. В последние несколько дней я пробовал разные вещи, а также читал о некоторых возможных решениях, но ни одно из них не сработало для меня, так что вот что у меня есть:
Конфигурация Roundcube/config.inc.php:
<?php
$config['debug_level'] = 4;
$config['smtp_debug'] = истина;
$конфигурация = [];
// Строка подключения к базе данных (DSN) для операций чтения+записи
// Формат (совместимый с PEAR MDB2): db_provider://user:password@host/database
// В настоящее время поддерживаются db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// Для примеров см. http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// ПРИМЕЧАНИЕ: для SQLite используйте абсолютный путь (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
// или (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
$config['db_dsnw'] = 'mysql://user:pass@localhost/db';
// Хост IMAP, выбранный для входа в систему.
// Оставьте пустым, чтобы показать текстовое поле при входе в систему, дать список хостов
// для отображения выпадающего меню или установки одного хоста в виде строки.
// Введите имя хоста с префиксом ssl://, чтобы использовать неявный TLS, или используйте
// префикс tls:// для использования STARTTLS.
// Поддерживаемые замещающие переменные:
// %n - имя хоста ($_SERVER['SERVER_NAME'])
// %t - имя хоста без первой части
// %d - домен (http имя хоста $_SERVER['HTTP_HOST'] без первой части)
// %s - доменное имя после '@' от адреса электронной почты, указанного на экране входа в систему
// Например, %n = mail.domain.tld, %t = domain.tld
$config['default_host'] = 'mail.domain.tld';
// Хост SMTP-сервера (для отправки почты).
// Введите имя хоста с префиксом ssl://, чтобы использовать неявный TLS, или используйте
// префикс tls:// для использования STARTTLS.
// Поддерживаемые замещающие переменные:
// %h - имя хоста IMAP пользователя
// %n - имя хоста ($_SERVER['SERVER_NAME'])
// %t - имя хоста без первой части
// %d - домен (http имя хоста $_SERVER['HTTP_HOST'] без первой части)
// %z - домен IMAP (имя хоста IMAP без первой части)
// Например, %n = mail.domain.tld, %t = domain.tld
// Чтобы указать разные SMTP-серверы для разных хостов IMAP, укажите массив
// хоста IMAP (без префикса или порта) и SMTP-сервера, например. ['imap.example.com' => 'smtp.example.net']
$config['smtp_server'] = 'tls://mail.domain.tld';
// SMTP-порт. Используйте 25 для открытого текста, 465 для неявного TLS или 587 для STARTTLS (по умолчанию).
$config['smtp_port'] = 587;
// Имя пользователя SMTP (если требуется), если вы используете %u в качестве имени пользователя Roundcube
// будет использовать текущее имя пользователя для входа
$config['smtp_user'] = '';
// Пароль SMTP (если требуется), если вы используете %p в качестве пароля Roundcube
// будет использовать пароль текущего пользователя для входа в систему
$config['smtp_pass'] = '%p';
// укажите URL-адрес, по которому пользователь может получить поддержку для этой установки Roundcube
// ПОЖАЛУЙСТА, НЕ ДЕЛАЙТЕ ЗДЕСЬ ССЫЛКУ НА ВЕБ-САЙТ ROUNDCUBE.NET!
$config['support_url'] = '';
// Назовите свою службу. Это отображается на экране входа в систему и в заголовке окна.
$config['product_name'] = 'Веб-почта';
// Этот ключ используется для шифрования пароля пользователя imap, который хранится
// в записи сеанса. Для метода шифрования по умолчанию он должен быть
// длина ровно 24 символа.
// ВАШ КЛЮЧ ДОЛЖЕН БЫТЬ ОТЛИЧАЕТСЯ ОТ ПРИМЕРНОГО ЗНАЧЕНИЯ ДЛЯ БЕЗОПАСНОСТИ
$config['des_key'] = 'rcmail-random_key_here';
// Список активных плагинов (в каталоге plugins/)
$config['плагины'] = [
'архив',
'архив скачать',
];
//название скина: папка со скинами/
$config['skin'] = 'эластичный';
$config['imap_conn_options'] = массив(
'ssl' => массив ('verify_peer' => истина, 'verfify_peer_name' => ложь),
'tls' => массив ('verify_peer' => истина, 'verfify_peer_name' => ложь),
);
$config['default_host'] = 'ssl://mail.domain.tld';
$config['default_port'] = '993';
$config['smtp_server'] = 'tls://mail.domain.tld';
$config['smtp_port'] = '587';
$config['smtp_debug'] = истина;
В настоящее время я могу получать электронные письма в roundcube на портах 143 и 993, но я могу отправлять только с порта 25. Вот ошибка, которую я получаю, когда пытаюсь отправить электронное письмо с 587:
Ошибка SMTP (554): не удалось добавить получателя «[email protected]» (5.7.1 <[email protected]>: адрес получателя отклонен: доступ запрещен).
Вот что показывает журнал roundcube/smtp.log:
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Подключение к tls://mail.hlebarkite.bg:587...
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Recv: 220 mail.domain.ltd ESMTP Postfix
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Отправить: EHLO webmail.domain.ltd
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Recv: 250-mail.domain.ltd
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Recv: 250-PIPELINING
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Recv: 250-SIZE 10240000
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250-VRFY
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250-ETRN
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250-STARTTLS
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Recv: 250-ENHANCEDSTATUSCODES
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Получено: 250-8BITMIME
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получен: 250-DSN
[10 марта 2022 г., 00:08:05 +0200]: <gqnft6kr> Получено: 250-SMTPUTF8
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250 РАЗБИВКА
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Отправить: ПОЧТА ОТ: <[email protected]>
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250 2.1.0 Хорошо
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Отправить: RCPT TO:<[email protected]>
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Recv: 554 5.7.1 <[email protected]>: адрес получателя отклонен: доступ запрещен
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Отправить: RSET
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 250 2.0.0 Хорошо
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Отправить: ВЫЙТИ
[10 марта 2022 00:08:05 +0200]: <gqnft6kr> Получено: 221 2.0.0 Пока
Вот что показывает logs/error.log:
[10 марта 2022 г. 00:08:05 +0200]: <gqnft6kr> Ошибка SMTP: не удалось добавить получателя «[email protected]». 5.7.1 <[email protected]>: адрес получателя отклонен: доступ запрещен (код: 554) в /home/webmail/program/lib/Roundcube/rcube.php в строке 1774 (POST /?_task=mail&_unlock=loading1646863684782&_framed= 1&_action=отправить)
Если я попытаюсь отправить электронное письмо следующим образом:
echo "тестовое тело сообщения" | почта -с "тест" [email protected]
Я получаю следующее в /var/log/mail.log
10 марта 00:12:11 lamp postfix/submission/smtpd[1126]: подключиться от неизвестного[xx.xx.xx.xx — это IP-адрес сервера]
10 марта 00:12:11 лампа postfix/submission/smtpd[1126]: предупреждение: SASL: Ошибка подключения к частному/авторизации: нет такого файла или каталога
10 марта 00:12:11 лампа postfix/submission/smtpd[1126]: фатально: нет механизмов аутентификации SASL
10 марта 00:12:12 лампа postfix/master[1300]: предупреждение: процесс /usr/lib/postfix/sbin/smtpd pid 1126 статус выхода 1
10 марта 00:12:12 лампа postfix/master[1300]: предупреждение: /usr/lib/postfix/sbin/smtpd: неверный запуск команды -- регулирование
10 марта 00:12:12 лампа postfix/smtp[1125]: C520F1300420: to=<[email protected]>, relay=mail.domain.ltd[xx.xxx.xx.xx ip сервера]:587, delay= 1.1, delays=0.09/0.01/1/0, dsn=4.4.2, status=deferred (потеряно соединение с mail.domain.ltd[xx.xx.xx.xx IP-адрес сервера] при выполнении рукопожатия EHLO)
Если я пытаюсь отправить электронное письмо из почтового клиента, я вижу эту ошибку:
Сообщается об ошибке: «Ошибка команды HELO: ошибка при получении данных: сброс соединения партнером».
Вот как выглядит postconf -n:
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_sender_restrictions
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_client_restrictions
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_helo_restrictions
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_sender_restrictions
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_client_restrictions
postconf: предупреждение: /etc/postfix/master.cf: неопределенный параметр: mua_helo_restrictions
alias_database = хэш:/и т.д./псевдонимы
alias_maps = хеш:/и т.д./псевдонимы
append_dot_mydomain = нет
биф = нет
уровень_совместимости = 2
inet_protocols = все
почтовый ящик_размер_лимит = 0
mydestination = localhost.$mydomain, localhost, $myhostname
мой домен = mail.domain.ltd
myhostname = mail.domain.ltd
мои сети = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
mynetworks_style = подсеть
readme_directory = нет
получатель_разделитель = +
relayhost = [mail.domain.ltd]:587
smtp_sasl_auth_enable = да
smtp_sasl_password_maps = статический:имя пользователя:пароль
smtp_sasl_security_options = неанонимный
smtp_tls_security_level = может
smtp_tls_session_cache_database = btree:${каталог_данных}/smtp_scache
smtp_use_tls = да
smtpd_recipient_restrictions = Permit_Sasl_аутентифицированный Permit_myNetworks reject_unauth_destination
smtpd_sasl_path = частный/авторизация
smtpd_sasl_security_options =
smtpd_sasl_type = голубятня
smtpd_tls_CAfile = /var/lib/dehydrated/certs/mail.domain.ltd/fullchain.pem
smtpd_tls_cert_file = /var/lib/dehydrated/certs/mail.domain.ltd/cert.pem
smtpd_tls_key_file = /var/lib/dehydrated/certs/mail.domain.ltd/privkey.pem
smtpd_tls_security_level = может
smtpd_tls_session_cache_database = btree:${каталог_данных}/smtpd_scache
smtpd_use_tls = да
virtual_alias_maps = хеш:/etc/postfix/виртуальный
Вот как выглядит файл /etc/postfix/main.cf:
# Смотрите /usr/share/postfix/main.cf.dist для более полной версии с комментариями
# Специально для Debian: указание имени файла приведет к первому
# строка этого файла, которая будет использоваться в качестве имени. Дебиан по умолчанию
# это /etc/mailname.
#myorigin = /etc/mailname
биф = нет
# добавление .domain - это работа MUA.
append_dot_mydomain = нет
# Раскомментируйте следующую строку, чтобы сгенерировать предупреждение об "отложенной почте"
#delay_warning_time = 4 часа
readme_directory = нет
# См. http://www.postfix.org/COMPATIBILITY_README.html -- по умолчанию 2 на
# свежие установки.
уровень_совместимости = 2
# TLS-параметры
smtpd_tls_cert_file = /var/lib/dehydrated/certs/mail.domain.ltd/cert.pem
smtpd_tls_key_file = /var/lib/dehydrated/certs/mail.domain.ltd/privkey.pem
smtpd_use_tls=да
smtpd_tls_session_cache_database = btree:${каталог_данных}/smtpd_scache
smtp_tls_session_cache_database = btree:${каталог_данных}/smtp_scache
smtp_tls_security_level = может
# См. /usr/share/doc/postfix/TLS_README.gz в пакете postfix-doc для
# информация о включении SSL в smtp-клиенте.
#smtpd_relay_restrictions = Permit_myNetworks Permit_Sasl_Authenticated defer_unauth_destination Permit_inet_interfaces
myhostname = mail.domain.ltd
alias_maps = хеш:/и т.д./псевдонимы
alias_database = хэш:/и т.д./псевдонимы
#mydestination = $myhostname, mail.domain.ltd, localdomain, localhost, localhost.localdomain, localhost
# тестовое задание
mydestination = localhost.$mydomain, localhost, $myhostname
мои сети = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
почтовый ящик_размер_лимит = 0
получатель_разделитель = +
inet_protocols = все
virtual_alias_maps = хеш:/etc/postfix/виртуальный
smtp_use_tls = да
smtpd_tls_CAfile = /var/lib/dehydrated/certs/mail.domain.ltd/fullchain.pem
#smtpd_recipient_restrictions = Permit_MyNetworks Permit_inet_Interfaces Permit_Sasl_Authenticated
smtpd_recipient_restrictions = Permit_Sasl_аутентифицированный Permit_myNetworks reject_unauth_destination
smtpd_tls_security_level = может
mynetworks_style = подсеть
#мойдомен = локальный домен
# тестовое задание
мой домен = mail.domain.ltd
smtpd_sasl_security_options =
# тестовое задание
relayhost = [mail.domain.ltd]:587
smtp_sasl_auth_enable = да
smtp_sasl_password_maps = статический:имя пользователя:пароль
smtp_sasl_security_options = неанонимный
smtpd_sasl_path = частный/авторизация
smtpd_sasl_type = голубятня
Вот как выглядит файл /etc/postfix/master.cf:
#
# Конфигурационный файл главного процесса Postfix. Для получения подробной информации о формате
# файла, см. справочную страницу master(5) (команда: "man 5 master" или
# он-лайн: http://www.postfix.org/master.5.html).
#
# Не забудьте выполнить "постфиксную перезагрузку" после редактирования этого файла.
#
# ================================================ ==========================
# тип сервиса private unpriv chroot wakeup maxproc command + args
# (да) (да) (нет) (никогда) (100)
# ================================================ ==========================
smtp инет n - y - - smtpd
smtp inet n - y - 1 постскрин
smtpd pass - - y - - smtpd
#dnsblog unix - - y - 0 dnsblog
tlsproxy unix - - y - 0 tlsproxy
подача инет н - у - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=может
-o smtpd_sasl_auth_enable=да
-o smtpd_tls_auth_only=да
-o smtpd_reject_unlisted_recipient=нет
-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,отклонить
-o milter_macro_daemon_name = ПРОИСХОЖДЕНИЕ
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=да
-o smtpd_sasl_auth_enable=да
-o smtpd_reject_unlisted_recipient=нет
-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,отклонить
-o milter_macro_daemon_name = ПРОИСХОЖДЕНИЕ
#628 инет п-у--qmqpd
пикап unix n - y 60 1 пикап
очистка unix n - y - 0 очистка
qmgr unix n - n 300 1 qmgr
#qmgr unix n - n 300 1 oqmgr
tlsmgr unix--y 1000? 1 тлсмгр
переписать unix--y--тривиально-переписать
отказ unix - - y - 0 отказ
отложить unix - - y - 0 отказов
трассировка unix - - y - 0 отказов
проверить unix - - y - 1 проверить
прошить unix -ы 1000? 0 флеш
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
реле unix--y--smtp
-o syslog_name=postfix/$service_name
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - y - - showq
ошибка unix--y--ошибка
повторите попытку unix--y--ошибка
отбросить unix--y--отбросить
локальный unix - n n - - локальный
виртуальный unix - n n - - виртуальный
lmtp unix--y--lmtp
наковальня unix - - y - 1 наковальня
архив unix - - y - 1 архив
postlog unix-dgram n - n - 1 postlogd
#
# ================================================ ====================
# Интерфейсы к программному обеспечению, отличному от Postfix. Обязательно изучите инструкцию
# страниц программного обеспечения, отличного от Postfix, чтобы узнать, какие параметры ему нужны.
#
# Многие из следующих сервисов используют доставку Postfix pipe(8)
# агент. См. справочную страницу pipe(8) для получения информации о ${recipient}
# и другие параметры конверта сообщения.
# ================================================ ====================
#
# почтовая рассылка. Подробности смотрите в файле Postfix MAILDROP_README.
# Также укажите в main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - канал
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ================================================ ====================
#
# Последние версии Cyrus могут использовать существующую запись "lmtp" master.cf.
#
# Указываем в cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Укажите в main.cf одно или несколько из следующего:
# mailbox_transport = lmtp:inet:localhost
# виртуальный_транспорт = lmtp:inet:localhost
#
# ================================================ ====================
#
# Cyrus 2.1.5 (Амос Гуо)
# Также указать в main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - труба
# user=cyrus argv=/cyrus/bin/deliver -e -r ${отправитель} -m ${расширение} ${пользователь}
#
# ================================================ ====================
# Старый пример доставки через 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 - - канал
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Другие внешние способы доставки.
#
ifmail unix - n n - - канал
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - канал
флаги=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
бэкенд-подсистема масштабирования unix — n n — 2 канала
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
почтальон unix - n n - - труба
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${пользователь}
Любая помощь будет принята с благодарностью.