proxytunnelおよびnginxを使用したHTTPS over SSH


15

私はnginxを使用してhttps接続経由でsshをセットアップしようとしています。私は実際の例を見つけていないので、どんな助けも感謝します!

~$ cat .ssh/config
Host example.net
  Hostname example.net
  ProtocolKeepAlives 30
  DynamicForward 8118
  ProxyCommand /usr/bin/proxytunnel -p ssh.example.net:443 -d localhost:22 -E -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"

~$ ssh user@example.net
Local proxy ssh.example.net resolves to 115.xxx.xxx.xxx
Connected to ssh.example.net:443 (local proxy)

Tunneling to localhost:22 (destination)
Communication with local proxy:
 -> CONNECT localhost:22 HTTP/1.0
 -> Proxy-Connection: Keep-Alive
 -> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
 <- <html>
 <- <head><title>400 Bad Request</title></head>
 <- <body bgcolor="white">
 <- <center><h1>400 Bad Request</h1></center>
 <- <hr><center>nginx/1.0.5</center>
 <- </body>
 <- </html>
analyze_HTTP: readline failed: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host

サーバー上のNginx構成。

~$ cat /etc/nginx/sites-enabled/ssh 
upstream tunnel {
    server localhost:22;
}
server {
    listen 443;
    server_name ssh.example.net;

    location / {
            proxy_pass http://tunnel;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect off;
    }

    ssl on;
    ssl_certificate /etc/ssl/certs/server.cer;
    ssl_certificate_key /etc/ssl/private/server.key;
}

~$ tail /var/log/nginx/access.log
203.xxx.xxx.xxx - - [08/Feb/2012:15:17:39 +1100] "CONNECT localhost:22 HTTP/1.0" 400 173 "-" "-"

回答:


10

Nginxはフォワードプロキシリクエスト(HTTP CONNECTメソッド)をサポートしていないため、Nginxから「Bad request」レスポンスを取得します。ProxytunnelはNginxに接続できますが、そこから停止します。AFAIF Nginxの作者は、フォワードプロキシリクエストをサポートする予定はありません。HTTPの提供に特化したいからです。Apacheには他のすべてのモジュールがあり、これらのエキゾチックな機能を自由に使用できます。

sslhを見ると、ポート443の着信トラフィックをNginx(127.0.0.1:443でリスニング)、SSH、またはOpenVPNに多重化できます。Nginxがリッスンしている場所と重複するsslhため、パブリックIPアドレスでリッスンするようにしてください。0.0.0.0127.0.0.1:433

別のオプションはSquidを使用することですが、私はそこに経験がありません。


0

このような設定を見たことはありません。nginxは着信接続をHTTPとして扱い、HTTPでアップストリームと通信できると期待しているため、動作するかどうか疑問です。なぜnginxを介してプロキシしたいのですか?


2
それが可能でなければならない- proxytunnelは、 HTTP(S)プロキシを介してトンネルSSHセッションに使用され、ここで設定され、この使用してApacheを設定する
Thermionix

Apacheはそこで実際のHTTPプロキシとして動作しているように見えますが、nginxがサポートしているとは思いません(リバースプロキシのみ)。
mgorven

0

これは古い質問ですが、実際にはまだです:-)

他の人が述べたように、Nginxで利用可能なHTTP CONNECTメソッドがないため、この設定はほとんど利用できません。

注:Apache Webサーバーはこのセットアップをサポートしています。

しかし、Nginxにはsslhなしのソリューションがあります。HTTPCONNECTを実装するカスタムNginxモジュールの形式であると思います:https : //github.com/chobits/ngx_http_proxy_connect_module

これを使用することで、ssh構成でProxyCommandのみを適切に使用できるようになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.