サーバーから電子メールを送信しようとしています。私のローカルコンピュータではテストはうまくいきますが、本番Ubuntuサーバーでは電子メールを送信しようとするとWebサーバーが失敗します。
私はGmailをSMTPプロバイダとして使用していますが、問題は本番サーバーがGoogle SMTPサーバーへのアクセスを許可していないようです。
次のコマンドは、マイコンピュータでは正常な接続を確立しますが、サーバーでは失敗します。
$ openssl s_client -crlf -connect smtp.gmail.com:465
connect: Connection refused
connect:errno=111
iptables
ポートが閉じる場合に備えて、さまざまな組み合わせを試してみました。また、無効なファイアウォールを試してみましたufw disable
。どちらも私に成功をもたらすことができませんでした。
修正する:
telnet smtp.gmail.com 465
出力:
Trying 74.125.143.108...
Trying 74.125.143.109...
Trying 2a00:1450:4010:c04::6c...
telnet: Unable to connect to remote host: Network is unreachable
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:465
私にしてください:
connect: Connection refused
connect:errno=111
追加iptables-save
出力:
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*mangle
:PREROUTING ACCEPT [16698:11267219]
:INPUT ACCEPT [16698:11267219]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13015:16282858]
:POSTROUTING ACCEPT [13015:16282858]
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*nat
:PREROUTING ACCEPT [1421:163021]
:INPUT ACCEPT [678:92411]
:OUTPUT ACCEPT [1339:83461]
:POSTROUTING ACCEPT [1339:83461]
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*filter
:INPUT ACCEPT [9933:3116585]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12536:16243622]
-A INPUT -i lo -j ACCEPT
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
答え1
IIRC、openssl s_client -connect localhostはデフォルトでTLSを使用します。
~からhttps://www.openssl.org/docs/apps/s_client.html:
-ssl2、-ssl3、-tls1、-no_ssl2、-no_ssl3、-no_tls1
これらのオプションは、特定のSSLまたはTLSプロトコルを無効にします。デフォルトでは、初期ハンドシェイクに使用される方法はすべてのサーバーと互換性があり、SSL v3、SSL v2、またはTLSを適切に使用できるようにする必要があります。
残念ながら、この技術を処理できず、接続できない古くて故障したサーバーが多用されています。一部のサーバーは-no_tlsオプションを使用してTLSをオフにした場合にのみ機能し、他のサーバーはSSL v2のみをサポートし、-ssl2オプションが必要になる場合があります。
次のいずれかのオプションを使用する必要があります。
答え2
まず、目的地までの基本的な接続を試してみてください。
telnet smtp.gmail.com 587
それでも問題が解決しない場合は、ファイアウォールの問題を検討してください。
TLSが有効であることを確認してください
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587
最初の方法は機能しますが、TLSが失敗した場合はTLSトラフィックを検査できないため、TLSの使用を防ぐ深層検査ファイアウォールを使用している可能性があります。
私にとって、あなたの問題は電子メールの問題ではなく、ファイアウォールの問題のように見えます。
その場合は、所有しているファイアウォールとその構成を説明する必要があります。純粋にiptablesの場合(これまで説明が可能に見える場合)iptables-save
。
編集する
iptables設定が空です。とにかくデフォルトはACCEPTなので、iptablesを安全に無視できるので、1つのルールは関係ありません。
TCP接続(telnet smtp.gmail.com 465)も設定できないため、ルーティングなど他のすべてが大丈夫であると仮定すると、一部のファイアウォールによって完全にブロックされていることを意味します。本番サーバーなので除外しても安全そうです。
したがって、これはポート465でブロックされているので、ネットワークチームと議論するか、外部ファイアウォールを見てください。
上記の例では、ポート587を確認して、そのポートもブロックされていることを確認してください。この場合、関連する設定されたポート25のみを許可する非常に厳しいファイアウォールがある可能性があります。
ユーザーをブロックするすべてのファイアウォールで許可されている発信ポートに465を追加する必要があります。
あなたの環境はわかりませんが、一部の高レベルのセキュリティ環境では、ネットワーク内の暗号化を許可せずにファイアウォールで暗号化を実行します。あなたも同様の状況に直面している可能性があります。