我只是按照这个教程来设置一个带有dovecot和mysql的postfix邮件服务器作为虚拟用户的后端。
现在我得到了大部分工作,我可以连接到POP3(S)和IMAP(S)。
运用
echo TEST-MAIL | mail [email protected]
工作正常,当我login到我的Hotmail帐户,它显示电子邮件。
它也可以反向工作,因此我的example.com的 MX条目最终被传播了,所以我可以接收从[email protected]发送到[email protected]的电子邮件,并使用STARTTLS通过IMAP在Thunderbird中查看它们。
在尝试使用login到[email protected]的 Thunderbird将邮件发送到[email protected]时,我收到错误消息“ 5.7.1:中继访问被拒绝 ”后做了一些调查,我发现我的服务器正在执行作为一个“开放的邮件中继”,这当然是一件坏事。
深入挖掘教程的可选部分, 如此评论和其他内容 ,我决定完成这些步骤,以便能够通过[email protected]通过Mozilla Thunderbird发送邮件,而不会收到错误消息“ 5.7.1 :中继访问被拒绝 “(因为常见的邮件服务器拒绝打开中继的电子邮件)。
但是现在我遇到了一个错误,试图使用SMTPS来处理postfix,在/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通过Thunderbird中的端口465从新安装的邮件服务器发送邮件之后,该错误即被logging下来。 雷鸟然后告诉我超时发生。
谷歌有关于这个问题的一些结果,但我没有得到它与任何这些工作。 我会链接一些在这里,但作为一个新的用户,我只允许使用两个超链接。
我的/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文件是按照上面的教程中所描述的那样创build的
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的login工作正常。 唯一的问题是让postfix正确使用自己生成的自签名证书。
任何帮助感激!
编辑:我只是尝试这个不同的教程生成后缀自签名证书,仍然得到相同的错误。 我真的不知道还有什么要testing的。
我也检查了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)
在遵循Ansgar Wiechers指示后,它终于工作了。
postconf -n包含了它应该的行。 通过openssl的证书/密钥检查确实表明这两个文件都是有效的。
所以这确实是一个权限问题! 不知道把/etc/ssl/*/postfix.pem文件chown到postfix:postfix是不足以让postfix读取文件的。
main.cf的内容不一定代表您的活动Postfixconfiguration。 检查以下两个参数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作为前三个限制,那么您不是开放中继。
validation/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/
因此,简单地input密钥文件不会对你有任何好处,因为目录权限会阻止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 ,并确保它至less包含一些看起来像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或在您的configuration错误。
证书必须与密钥匹配,在我的情况下与权限无关
创build一个自签名的证书和密钥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支持。 希望这可以帮助别人!