FTPは暗号化されていないため、デフォルトでは安全ではないことを私は知っています。 FTPのこの安全でない動作を回避するために、ProFTPDでTLS暗号化を設定したいと思います。ここのこのチュートリアルに従って: https://www.howtoforge.com/tutorial/install-proftpd-with-tls-on-ubuntu-16-04/ ProFTPDのtls構成は次のようになります。 :
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSCipherSuite AES128+EECDH:AES128+EDH
TLSOptions NoCertRequest AllowClientRenegotiations
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
RequireValidShell no
</IfModule>
これらのディレクティブの多くは自明ですが、ディレクティブ「TLSVerifyClient」が何を意味するのかはまだわかりません。
ProFTPDのマニュアルによると:
オフの場合、モジュールは証明書を受け入れてSSL/TLSセッションを確立しますが、証明書を検証しません。
オンの場合、モジュールはクライアントの証明書を検証し、さらに、サーバーが証明書を要求したときにクライアントが証明書を提示しない限り、すべてのSSLハンドシェイクの試行に失敗します。
しかし、証明書はサーバー自体からのものだと思ったのに、なぜサーバーはクライアントからの証明書要求を受け入れる必要があるのでしょうか。
そして私の2番目の質問、TLSoptionディレクティブの「nocertrequest」オプションの意味は何ですか?
ProFTPDマニュアルに準拠して、このオプションの機能は次のとおりです。
一部のFTPクライアントは、サーバーの証明書要求を処理するときにバグがあることがわかっています。このオプションにより、サーバーはSSLハンドシュ中にそのような要求を含めないようになります
ここでも同じ質問ですが、サーバー自体にTLS証明書があるのに、なぜサーバーがクライアントに証明書要求を送信するのでしょうか。
TLSVerifyClient
ディレクティブは、クライアントの認証に関するものです(i.e. "clientauth"または "mutual auth");これは、mod_tls
がクライアントに証明書を要求するかどうか、およびそのクライアントが提供する証明書mustが有効か(TLSVerifyClient on
)、そうでないか(TLSVerifyClient optional
)を決定するために使用されます。一部のサイトでは、アクセス制御にクライアント提供の証明書を使用したいと考えています。たとえば、サーバーによって信頼されているCAからの証明書を提示するクライアントのみが許可されます。
mod_tls
の元の実装には、常にクライアントの証明書の要求、regardlessTLSVerifyClient
設定が含まれます。したがって、そのクライアント証明書要求を無効にするための「NoCertRequest」TLSOption
がありました。ただし、現在、NoCertRequest TLSOption
は非推奨になり、TLSVerifyClient
設定のみを使用するようになりました。 Bug#421 を参照してください。
お役に立てれば!
より安全なプロトコルについては、SFTP(proftpdがサポート)の使用を検討してください。 SFTPはSSH上で実行されるため、完全に暗号化されています。 この関連する質問 が役立つかもしれません。 SFTPを使用するようにproftpdを設定する に関するこのチュートリアルも役立つ場合があります。