httpまたはhttpsでsshを使用する方法は?


42

企業ファイアウォールの背後にLinux fedora21クライアントラップトップ(httpおよびhttpsポートは通過できますが、ssh 22は通過できません)があり、自宅のルーターの背後にLinux fedora21サーバーがあります。ホームサーバーのパブリックIPアドレスを指定すると、httpsを使用したブラウジングが機能します(ホームルーターを構成したため)

http / sポート経由でホームサーバーにssh(リモートシェル)することは可能ですか?

というツールを見つけましたcorkscrew。それは役立ちますか?

opensshdそしてhttpd、ホームサーバーで実行します。他に何が設定を必要としますか?


1
sshdを自宅に置いてポート443でリッスンしますが、ホームhttpdでポート443を無効にする必要があります。
タリージン

私はそれができません。git pushにもhttpdが必要です。443でリッスンするhttpdを取得する必要があります。–
MMM

httptunnelを試してください-httptunnel http://www.nocrew.org/software/httptunnel.htmlをインストールするか、質問で述べたように:corkscrew。
タリージン

いずれにせよ、sshdは22をリッスンし、httpdは80/443に、httptunnelまたはcorkscrewはhttpdが受信したトラフィックをsshdに転送しますか?
MMM

はい。サービスのポートを変更する必要はありません。
タリエジン

回答:


42

可能なことは、ファイアウォールが許可するものに依存します。

ファイアウォールがポート443で任意のトラフィックを許可する場合

一部のファイアウォールは簡単な方法でポート443で何でも許可します。その場合、ホームサーバーに到達する最も簡単な方法は、ポート443でSSH接続をリッスンすることです。マシンがインターネットに直接接続されている場合、という行に追加Port 443する/etc/ssh/sshd_configか、/etc/sshd_configそのすぐ下に追加しますPort 22。マシンが着信接続をリダイレクトするルーター/ファイアウォールの背後にある場合、着信接続をポート443にリダイレクトし、サーバーのポート22

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

wan0ルーターのWANインターフェイスはどこにあり、10.1.2.3はホームネットワークのサーバーのIPアドレスです。

ホームサーバーがポート443でHTTPS接続とSSH接続の両方をリッスンできるようにする場合、SSHとHTTPSトラフィックを簡単に区別できます(SSHではサーバーが最初に通信しますが、HTTPとHTTPSではクライアントが通信します)最初)。この設定方法のチュートリアルについては、http ://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.htmlおよびhttp://wrouesnel.github.io/articles/Setting%20up%20sshttp/を参照してください。sshttp設定しWebサーバー(nginx)がこれらのポートで実行されている間にポート80または443でSSHを使用する

CONNECTトンネリングを許可するWebプロキシがある場合

一部のファイアウォールはすべての発信接続をブロックしますが、HTTPCONNECTメソッドがファイアウォールの穴を効果的に貫通できるプロキシを介してWebを閲覧できます。このCONNECT方法は特定のポートに制限される場合があるため、上記のようにポート443でリッスンすることと組み合わせる必要があります。

SSHをプロキシ経由で送信するには、corkscrewなどのツールを使用できます。あなたには~/.ssh/config、追加ProxyCommandあなたのWebプロキシがある場合は、以下のような行をhttp://web-proxy.work.example.com:3128

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

HTTP(S)でのSSHのラッピング

一部のファイアウォールは、ポート443でもSSHトラフィックを許可しません。これらに対処するには、SSHを偽装するか、ファイアウォールが通過させるものにトンネルする必要があります。proxytunnelでこれを行うためのチュートリアルについては、http://dag.wiee.rs/howto/ssh-http-tunneling/を参照してください。


443トリックがそれをやった!私はこれが機能することに驚いた:)-なぜこれがほとんどのファイアウォールでそうであるかのようなシステム管理者の光景?
AK_ 16

@AK_ファイアウォールでTLSとSSHを区別することは可能ですが、追加の構成手順であり、パフォーマンスがより高くなります。発信接続に関しては、何の利点もありません(いずれにせよTLSでトンネリングできるため)。
ジル「SO-悪であるのをやめる」

@ Gilles、HTTPSをブロックし、HTTP CONNECT HTTPSを許可するプロキシサーバーもありますか?
パセリエ

1
@Pacerierそれらの多く。プロキシがHTTPSをブロックするわけではありません—プロキシはプロキシをバイパスする接続をブロックしません—直接接続はブロックされますが、プロキシはポート443へのトラフィックであればCONNECTを許可します。HTTPSをフィルタリングする実際の方法はありません、ルートイントラストインジェクションと証明書の書き換えは非常に悪い考えです。
ジル 'SO-悪である停止'

あなたはまた、プロキシCOMANDに代わりコークスクリューでのnetcat-のOpenBSDを使用できます:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
ポールRougieux


1

あなたは使用することができますsslhを使用すると、同じポート443上のHTTPSサーバとSSHDサーバの両方を実行する場合。

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