4
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Proxy経由でEC2にSSHポートフォワードでRDPした話

Last updated at Posted at 2019-02-26

##はじめに
社内からだとProxyがきつくてssh(Secure Shell)やRDP(RemoteDisktop)が出来ないなんてことがあります。
RDPポートを空けてしまうとセキュリティ的にもリスクが高くなりますので、
AWS上の閉ざされたネットワーク内のサーバにアクセスする方法を実践してみました。

##やりたいこと
Untitled Diagram-ページ9 (3).png

こっから繋いで・・・こう!!

sshで踏み台サーバに接続を行ない、sshポートフォワードで、ローカルで任意のポートを指定することで、
private(外部に接続していない)サーバへRDPで接続を行ないます。

私の環境だとポートが'80'と'443'しか空いていません。HTTPHTTPSだけですね。
sshのポートを変更することで対応していますが、Proxyによっては中身をちゃんと見てブロックしている場合もあります。

##構成図
Untitled Diagram-ページ9 (1).png

ざっくりですがAWS側の構成はこんな感じですね。

BastionServer(踏み台サーバ)にはEIPを付与し、sshポートを'22' ⇒ '443'に変更しています。
NAT経由でpriveteサブネットに対してRDPポート(3389)をルーティングして下さい。
※構成については調べたら直ぐわかりますので割愛します。

##設定方法
###【1】.接続方法
今回は出来る男をアピールするためにOpnenSSHで接続します。

勿論、TeraTarmPuttyといったツールでも可能です。むしろそちらのほうが楽です。
私が使用しているPCがwindows7ですので、GitBashのインストール時に梱包されていたOpnenSSHを利用します。

Windows10だとPowershellに標準でインストールされていますので、Powershellで問題ありません。
念のためインストールされているか確認しておきます。

$ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.2m  2 Nov 2017

認証方式は秘密鍵方式にします。特に理由はありません。
予めBastionServerでssh-keygenを利用して秘密鍵(privateKey.pem)を作成してあります。

###【2】.ssh接続
ツールから設定する場合はProxyを指定する箇所がありますので簡単ですが、
直接繋ぐ場合はProxyCommandで指定する必要があります。

オプションの-iで事前に作成した秘密鍵を設定します。

-oで設定パラメータとなるproxyCommandを書き込みます。
今回は純粋なproxyとして使用するので、connect -Hで設定を行ないます。

最後はuser@globalIP -p 443 でsshのポートを指定しつつBastionServerのユーザとIPを指定します。
※ 通常のsshなら'22'となります。

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' ec2-user@66.66.66.66 -p 443
Last login: Mon Feb 25 09:43:02 2019 from aaa.xxx.yyy.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-10 ~]$

問題なくssh接続することが出来ました。

###【3】.sshポートフォワードでRDP接続
次はsshポートフォワードを利用して、RDP接続を行ないます。
先ほどの接続文字に、-Lのオプションをつけるだけなので簡単です。

-L (ローカルで使用するポート):(目的サーバのアドレス):(目的サーバで待ち受けてるポート番号)

・ローカルで使用するポート:13389(何でもいいです。)
・目的サーバのアドレス:10.0.2.10(グローバルではないので注意)
・目的サーバで待ち受けてるポート番号:3389(RDPデフォルトポート)

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' -L 13389:10.0.2.10:3389 ec2-user@66.66.66.66 -p 443
Last login: Tue Feb 26 09:02:48 2019 from aaa.xxx.yyy.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-2-10 ~]$

表示は通常のssh接続と変わりません。

sshを接続したままリモートディスクトップを開き、
localhost、または127.0.0.1と先ほど設定したポートを指定します。

image.png

入力したら「接続」ボタンを押下。

image.png

ログインパスワードの入力ウィンドウが表示されたら接続成功です!

4
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?