私は このチュートリアル に従って、仮想ユーザーのバックエンドとしてdovecotとmysqlを使用してPostfixメールサーバーを設定しました。
これでほとんどの部分が機能し、POP3(S)とIMAP(S)に接続できます。
使用する
echo TEST-MAIL | mail [email protected]
私のhotmailアカウントにログインすると、メールが表示されます。
それも逆に機能するため、example.comのMXエントリが最終的に伝達されたため、[email protected]から-に送信された電子メールを受信できます[email protected]そして、IMAP経由のSTARTTLSを使用してThunderbirdで表示します。
エラーメッセージ "5.7.1:Relay access denied"にメールを送信しようとすると[email protected]にログインしてThunderbirdを使用する[email protected]、私は自分のサーバーが「オープンメールリレー」として機能していることを理解しました。これはもちろん、悪いことです。
このコメント や 他のturorial のようなチュートリアルのオプション部分をさらに掘り下げて、私は経由でメールを送信できるように、これらの手順も完了することにしました。 [email protected] Mozilla Thunderbirdを通じて、エラーメッセージ "5.7.1:Relay access denied"が表示されなくなりました(一般的なメールサーバーがオープンリレーされたメールを拒否するため)。
しかし、私は/ var/log/mail.logで、SMTPSでpostfixを機能させようとしてエラーに遭遇しました。
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:
Thunderbirdのポート465経由でSMTP SSL/TLSを使用して、新しくインストールしたメールサーバーからメールを送信しようとした直後に、このエラーがログに記録されます。 Thunderbirdは、タイムアウトが発生したことを通知します。
グーグルはその問題に関していくつかの結果を持っていますが、私はそれらのどれでもそれを機能させることができませんでした。ここではそれらのいくつかをリンクしますが、新しいユーザーとして2つのハイパーリンクしか使用できません。
私の/ 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
ログによればimapsとpop3sを介したログインは正常に機能するため、ここに/ etc/dovecot/dovecot.confを含める必要はないと思います。唯一の問題は、postfixが自己生成の自己署名証明書を適切に使用することです。
助けてくれてありがとう!
EDIT:試してみました この別のチュートリアル 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)
Ansgar Wiechersの指示に従って、最終的に機能します。
postconf -n
には必要な行が含まれていました。 opensslによる証明書/キーのチェックで、両方のファイルが有効であることが示されました。
したがって、それは実際に権限の問題でした! /etc/ssl/*/postfix.pemファイルをpostfix:postfixに変更しても、postfixがファイルを読み取るには不十分であることを知りませんでした。
main.cf
の内容は、必ずしもアクティブなPostfix構成を表しているとは限りません。 postconf -n
の出力で、次の2つのパラメータを確認します。
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
が最初の3つの制限として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/
したがって、ディレクトリの権限によりPostfixがその中のファイルにアクセスできないため、キーファイルを単純にchown
ingしても効果はありません。
設定を簡略化してみてください。証明書とキーを1つのファイルに入れます。
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
とすることもできます。
もう1つの明らかな問題は、エラーメッセージの内容です。そのファイルには有効な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
にある必要があります。 TLSを使用したPostfixの経験が足りないので、これがバグの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サポートを無効にします。これが誰かを助けることを願っています!