質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

1回答

2989閲覧

Nginx側で秘密鍵を保持し、SFTP通信をリバースプロキシしたい

s_stdy

総合スコア12

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

1クリップ

投稿2019/08/20 02:57

前提・実現したいこと

WinSCP(ClientPC) ---> Nginx(Proxy-SV) ---> OpenSSH(SFTP-SV)

上記のような流れで、WinSCP側では秘密鍵を使用せずに、Nginx側で保持している秘密鍵を使用して鍵認証でSFTP通信を実現したいと考えおります。

そもそもになってしまうのですが、以上のような動作を実現することは可能なのでしょうか?
また、可能な場合、不足している設定や情報をご教授いただけますと助かります。
よろしくお願いいたします。

発生している問題・エラーメッセージ

Nginxに秘密鍵を持たせ、WinSCPには持たせずに通信を行うと、
WinSCP側では「接続が拒否されました」、
OpenSSHの /var/log/secure では以下のようなエラーが出ております。

Bad protocol version identification '\026\003\001\001\034\001' from xxx.xxx.xxx.xxx port xxxxx

該当のソースコード

nginx.conf

worker_processes auto; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } stream { # access_logはSFTPでは使用できないのでerror_logを使用 error_log /var/log/nginx/stream.log info; upstream sftpsv { server 192.168.1.1:22; } server { listen 7777; proxy_pass sftpsv; # proxy_ssl_server_name on; # proxy_pass 192.168.1.1:22; #proxy_protocol on; #proxy_ssl_session_reuse off; proxy_ssl on; #proxy_ssl_server_name on; #proxy_ssl_name 202.214.75.21; proxy_ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; proxy_ssl_ciphers HIGH:!aNULL:!MD5; #proxy_ssl_certificate /root/keys/server.crt; proxy_ssl_certificate_key /root/keys/id_rsa; proxy_ssl_password_file /root/keys/secret; } }

OpenSSH側のsshd.conf(コメント行は省いております)

HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV LogLevel DEBUG # Authentication: PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication no UsePAM yes X11Forwarding yes # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server Port 22 PermitRootLogin yes PasswordAuthentication no UseDNS no

試したこと

  • 現状、WinSCP側に秘密鍵を持たせてProxy-SVに対してSFTP通信を行うと、SFTP-SVに通信できるのは確認できております。

  • nginx.confのstream{ server{ } }内にて以下を追加

proxy_ssl on; proxy_ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; proxy_ssl_ciphers HIGH:!aNULL:!MD5; proxy_ssl_certificate_key /root/keys/id_rsa; proxy_ssl_password_file /root/keys/secret;

補足情報(FW/ツールのバージョンなど)

クライアント:Windows10

プロキシサーバ:CentOS 7、nginx 1.15

SFTPサーバ:CentOS 7,OpenSSH 7.4

参考サイト:

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SSH(SFTP) はそれ自体が暗号化の仕組みを持ち、hogehoge over TLS ではないので、Nginx で TCP パケットをそのまま中継することはできますが、TLS 接続を終端してどうこうすることはできないのではないでしょうか。

投稿2019/08/20 13:04

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_stdy

2019/08/21 01:03

ご回答いただきありがとうございます! なるほどです。。。では私の記載した内容を実現するのは無理そうですね。 すみません、1点ご存知であればご教授頂きたいのですが、 nginx.confに「proxy_ssl on;」の記載を追加すると以下のようなエラーが出力されます。 もしご存知であればお教えいただきたいです。 ``` [error] 27874#27874: *5 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream ```
TaichiYanagiya

2019/08/21 01:12

Nginx がプロキシ先に TLS で接続しようとしたが、接続できなかったということでしょう。 プロキシ先が SSH/SFTP なのであれば、プロトコルが違うので、ログを解析しても無意味だと思います。
s_stdy

2019/08/21 04:55

ご回答ありがとうございます! 別の手段を考えてみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問