Я просто следил этот учебник настроить почтовый сервер postfix с dovecot и mysql в качестве бэкэнда для виртуальных пользователей.
Теперь у меня заработало большинство частей, я могу подключиться к POP3 (S) и IMAP (S).
С помощью
echo TEST-MAIL | mail myaccount@hotmail.com
работает нормально, когда я вхожу в свою учетную запись hotmail, он показывает электронную почту.
Он также работает в обратном направлении, поэтому моя запись MX для example.com наконец, был распространен, поэтому я могу получать электронные письма, отправленные с myaccount@hotmail.com к myvirtualuser@example.com и просматривать их в Thunderbird, используя STARTTLS через IMAP.
Проведу дополнительное исследование после того, как я получил сообщение об ошибке "5.7.1: отказано в доступе к реле"при попытке отправить письмо на myaccount@hotmail.com используя Thunderbird, вход в систему myvirtualuser@example.com, Я выяснил, что мой сервер действует как «открытый почтовый ретранслятор», что, конечно, плохо.
Подробнее о необязательных частях учебника, таких как этот комментарий и другой турориал, Я решил также выполнить эти шаги, чтобы иметь возможность отправлять письма через myvirtualuser@example.com через Mozilla Thunderbird, не получая сообщения об ошибке "5.7.1: отказано в доступе к реле"больше (поскольку обычные почтовые серверы отклоняют открытые ретранслируемые электронные письма).
Но теперь я столкнулся с ошибкой, пытаясь заставить postfix работать с SMTPS, в /var/log/mail.log это читает
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: cannot get RSA private key from file /etc/ssl/certs/postfix.pem: disabling TLS support
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: ANY PRIVATE KEY:
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib:ssl_rsa.c:669:
Эта ошибка регистрируется сразу после того, как я пытаюсь отправить письмо с моего недавно установленного почтового сервера, используя SMTP SSL / TLS через порт 465 в Thunderbird. Затем Thunderbird сообщает мне, что истекло время ожидания.
У Google есть несколько результатов по этой проблеме, но я не смог заставить его работать ни с одним из них. Я бы связал некоторые из них здесь, но как новый пользователь мне разрешено использовать только две гиперссылки.
Мой /etc/postfix/master.cf выглядит как
smtp inet n - - - - smtpd
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
и Nmap говорит мне
PORT STATE SERVICE
[...]
465/tcp open smtps
[...]
мой /etc/postfix/main.cf выглядит как
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
#smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem #default postfix generated
#smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key #default postfix generated
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smptd_tls_key_file = /etc/ssl/private/postfix.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smptd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
mailbox_command = /usr/lib/dovecot/deliver
Файлы * .pem были созданы, как описано в руководстве выше, с использованием
Postfix
To create a certificate to be used by Postfix use:
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem
Do not forget to set the permissions on the private key so that no unauthorized people can read it:
chmod o= /etc/ssl/private/postfix.pem
You will have to tell Postfix where to find your certificate and private key because by default it will look for a dummy certificate file called "ssl-cert-snakeoil":
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
Думаю, мне не нужно включать /etc/dovecot/dovecot.conf здесь как логин через imaps и pop3s нормально работает согласно логов. Единственная проблема - заставить postfix правильно использовать самогенерируемые самозаверяющие сертификаты.
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ: Я просто попробовал этот другой учебник при создании самозаверяющего сертификата для постфикса, все еще возникает та же ошибка. Я действительно не знаю, что еще проверить.
Я также проверил библиотеки SSL, но вроде все в порядке:
root@domain:~# ldd /usr/sbin/postfix
linux-vdso.so.1 => (0x00007fff91b25000)
libpostfix-global.so.1 => /usr/lib/libpostfix-global.so.1 (0x00007f6f8313d000)
libpostfix-util.so.1 => /usr/lib/libpostfix-util.so.1 (0x00007f6f82f07000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00007f6f82cb1000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00007f6f82910000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00007f6f826f7000)
libdb-4.8.so => /usr/lib/libdb-4.8.so (0x00007f6f8237c000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00007f6f82164000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00007f6f81f4e000)
libc.so.6 => /lib/libc.so.6 (0x00007f6f81beb000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f6f819e7000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f6f817d0000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f6f815b3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6f83581000)
После следующих Ансгар Вихерс инструкции, наконец, работают.
postconf -n
содержит строки как следует. Проверка сертификата / ключа через openssl показала, что оба файла действительны.
Так что это действительно была проблема с разрешениями! Не знал, что преобразование файлов /etc/ssl/*/postfix.pem в postfix: postfix недостаточно, чтобы postfix прочитал файлы.
Содержание main.cf
не обязательно представляет вашу активную конфигурацию Postfix. Проверьте вывод postconf -n
для следующих двух параметров:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Если $mynetworks
ограничен localhost и $smtpd_recipient_restrictions
показывает permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
что касается первых трех ограничений, то вы не открытое реле.
Подтвердите это /etc/ssl/private/postfix.pem
содержит действительный ключ и /etc/ssl/certs/postfix.pem
содержит действующий сертификат:
openssl rsa -in /etc/ssl/private/postfix.pem -check -noout
openssl x509 -in /etc/ssl/certs/postfix.pem -text -noout
Вам также необходимо проверить, может ли Postfix получить доступ к файлу. На моем сервере разрешения на /etc/ssl/private
являются
drwx--x--- 2 root ssl-cert 4096 Aug 03 01:55 private/
Таким образом просто chown
Использование ключевого файла не принесет вам никакой пользы, потому что права доступа к каталогу не позволяют Postfix получить доступ к любому файлу в нем.
Попробуйте упростить настройку. Поместите сертификат и ключ в один файл:
cat /etc/ssl/*/postfix.pem > /etc/postfix/server.pem
chmod 640 /etc/postfix/server.pem
chown postfix:postfix /etc/postfix/server.pem
и измени свой main.cf
как это:
smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
Перезапустите Postfix и посмотрите, может ли сервер получить доступ к ключу.
В этих инструкциях есть chmod o= /etc/ssl/private/postfix.pem
но ничего не сказать о том, какой пользователь владеет файлом.
На моих коробках smtpd
процесс работает как postfix
пользователь. Убедитесь, что postfix
пользователь может получить доступ /etc/ssl/private/postfix.pem
. Или, возможно, просто chown postfix:postfix /etc/ssl/private/postfix.pem
.
Другая очевидная проблема заключается именно в том, что говорится в сообщении об ошибке: в этом файле нет действующего ключа RSA. Посмотреть в /etc/ssl/private/postfix.pem
и убедитесь, что он содержит хотя бы что-то похожее на ключ RSA. Не вставляйте это в свой вопрос.
На самом деле я только что заметил, что сообщение об ошибке предназначено для /etc/ssl/certs/postfix.pem
не /etc/ssl/private/postfix.pem
. Проверьте право собственности, разрешения и содержание /etc/ssl/certs/postfix.pem
также.
Это сообщение об ошибке немного сбивает с толку. Это говорит cannot get RSA private key from file /etc/ssl/certs/postfix.pem
но закрытый ключ должен быть в /etc/ssl/private/postfix.pem
. У меня недостаточно опыта работы с Postfix с использованием TLS, чтобы знать, является ли это ошибкой Postfix или ошибкой в вашей конфигурации.
Сертификат должен соответствовать ключу, в моем случае не имел ничего общего с разрешениями
создать самоподписанный сертификат и ключ https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/
Надеюсь это поможет
убедитесь, что на ключе нет ключевой фразы. Вы можете удалить его с помощью
openssl rsa -in key.pem -out newkey.pem
если они вместе используют
openssl rsa -in mycert.pem -out newcert.pem
openssl x509 -in mycert.pem >>newcert.pem
Парольная фраза выдаст предупреждение в журналах о том, что он не смог получить закрытый ключ RSAA, что, в свою очередь, отключает поддержку TLS. Надеюсь, это кому-то поможет!