방금 이 튜토리얼 을 따라 가상 사용자를위한 백엔드로 dovecot 및 mysql을 사용하는 postfix 메일 서버를 설정했습니다.
이제 대부분의 부분이 작동하고 POP3 (S) 및 IMAP (S)에 연결할 수 있습니다.
사용
echo TEST-MAIL | mail myaccount@hotmail.com
핫메일 계정에 로그인하면 이메일이 표시됩니다.
또한 반대로 작동합니다. example.com에 대한 MX 항목이 최종적으로 전파되었으므로 myaccount@hotmail.com 에서 myvirtualuser@example.com으로 전송 된 전자 메일을 수신 하고 IMAP을 통해 STARTTLS를 사용하여 Thunderbird에서 볼 수 있습니다.
Thunderbird가 myvirtualuser@example.com 에 로그인되어있는 상태 에서 myaccount@hotmail.com으로 메일을 보내려고 할 때 ” 5.7.1 : 릴레이 액세스가 거부되었습니다 ” 라는 오류 메시지가 나타난 후 조금 더 조사한 결과 서버가 작동하는 것으로 나타났습니다. “오픈 메일 릴레이”로서, 물론 이것은 나쁜 것입니다.
이 의견 과 다른 turorial 과 같이 튜토리얼의 선택적 부분을 더 파고 들어 , 나는이 단계를 완료 하고 Mozilla Thunderbird 를 통해 myvirtualuser@example.com을 통해 메일을 보낼 수 있고 ” 5.7.1 오류 메시지가 표시되지 않습니다. : 릴레이 액세스가 거부되었습니다 ( “일반 메일 서버는 열려있는 릴레이 된 전자 메일을 거부하므로).
하지만 이제는 /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는 시간 초과가 발생했음을 알려줍니다.
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
로그에 따라 imaps 및 pop3s를 통한 로그인 이 제대로 작동하므로 /etc/dovecot/dovecot.conf를 여기 에 포함시킬 필요가 없습니다 . 문제는 postfix가 자체 생성 된 자체 서명 인증서를 올바르게 사용하도록하는 것입니다.
어떤 도움을 주셔서 감사합니다!
편집 :
방금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)
다음 후 안스 Wiechers의 지침을 자사의 마지막 작업입니다.
postconf -n
라인을 포함해야합니다. openssl을 통한 인증서 / 키 검사에서 두 파일이 모두 유효한 것으로 나타났습니다.
따라서 실제로 권한 문제였습니다! postfix : postfix에 /etc/ssl/*/postfix.pem 파일을 chown하는 것이 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
로컬 호스트 및 제한됩니다 $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
. 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 지원을 비활성화합니다. 이것이 누군가를 돕기를 바랍니다!