Help us understand the problem. What is going on with this article?

これは魔法か?! インバウンドポートを全閉したAWSのサーバに接続する方法

More than 1 year has passed since last update.

はじめに

AWSのサーバに(AWSに限らずですが)インターネット経由で接続する場合、接続したいアプリケーションが待ち受けているポートに対するアクセスを許可する必要があります。Webサーバであれば80番、sshで乗り込みたければ22番といった具合です。
当然これらはインターネットに対して公開されていますので、意図しない人からもアクセスされる可能性があります。(ので、普通は送信元で絞ったり、アプリケーションで認証を要求したりします。)

では、全くポートを開かずに、魔法のように接続できるとしたらどうでしょう?!

remote.itを使うと

それができます。
remote.itがどんなサービスかというのは、こちらの@u___skさんの記事で紹介されていますので、併せてご覧ください。

インターネット世界の「どこでもドア」 remote.it

1. まずは普通にAWSのサーバを用意する

AWSでサーバを用意する

ubuntuサーバを用意して、apache 2 をインストールしました。(この辺の手順はQiitaに優れた記事がたくさんあると思いますので割愛します。)
また、このサーバのパブリックIP(グローバルIP)が 13.115.29.34 であることが分かります。
スクリーンショット 2019-07-25 18.33.52.png

セキュリティグループでポートを開ける

Webサーバなので80番を開けました。sshの22番もいったんそのままです。 Hello world!
スクリーンショット 2019-07-25 19.08.56.png

Webサーバにアクセスしてみる

先ほど確認した 13.115.29.34 にアクセスでき、apacheのデフォルトページが表示されました。(当たり前)
スクリーンショット 2019-07-25 18.41.48.png

2. remote.itアカウントを作る

ubuntuサーバへremote.itをインストールする前にremote.itアカウントを作る必要があります。
remote.itのWebサイトにアクセスし、「Sign up」からアカウントを登録してください。

remote.it - Virtual Private Internet

アカウントを作成し、サインインすると以下のようになります。
スクリーンショット 2019-07-25 18.53.20.png

3. remote.itをインストールする

ubuntuサーバにsshなどで接続し、以下のコマンドを順に実行してremote.itのパッケージを取得してインストールします。

$ curl -LkO https://raw.githubusercontent.com/remoteit/installer/master/scripts/auto-install.sh
$ chmod +x ./auto-install.sh
$ sudo ./auto-install.sh

4.ubuntuサーバをremote.itのデバイスとして登録する

remote.itを使って接続できるように、ubuntuサーバと接続したいサービス(アプリケーション)を登録します。

以下のコマンドで登録スクリプトを実行します。

$ sudo connectd_installer

"1" を選んで、先ほど登録したremote.itアカウントでサインインします。

********************* Sign In Menu *********************

     1) Sign in to your existing remote.it account    
     2) Request a code for a new remote.it account    
     3) Enter a verification code received in e-mail  
     4) Exit                                          

********************************************************

Choose a menu selection (1 - 4):
1

サインインに成功すると、このubuntuサーバをremote.itに登録するための名前の入力を求められます。
任意の名前を入力します。

Enter a name for your device (e.g. my_Pi_001).

The Device Name identifies your device in the remote.it portal.
Your services will be grouped under the Device Name.

Only letters, numbers, underscore, space and dash are allowed.

test-ubuntu18-web

メインメニューが表示されます。
続けて接続するサービス(アプリケーション)を登録しますので、1 を選びます。

=========================  Installed remote.it Services  ======================
 Service Name       | Protocol   | LAN Address        | Port | Application     
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
 Device Name: test-ubuntu18-web  Platform: x86_64-ubuntu16.04
 Hardware ID: 06:4d:9c:bf:88:98-8qm9ukuR3vZEiCyPeso2

============================ Main Menu ============================

    1) Attach/reinstall a remote.it Service to an application      
    2) Attach/reinstall a remote.it Service to a LAN application   
    3) Remove a remote.it Service from an application              
    4) Remove all remote.it Services, then exit                    
    5) Exit                                                        

===================================================================
    'application' is any TCP service (e.g. SSH, VNC, HTTP, etc.)   
    running on this device.  'LAN application' is a TCP service    
    running on another device on this LAN.                         
===================================================================
Choose a menu selection (1 - 5):
1

登録できるアプリケーションのメニューが表示されます。
Webサービスを登録するので 2 を選びます。(10を選べばTCPのアプリケーションを何でも登録できます。)

*********** Protocol Selection Menu ***********

     1) SSH on port 22                       
     2) Web (HTTP) on port 80                
     3) Secure Web (HTTPS) on port 443       
     4) VNC on port 5900                     
     5) nxWitness on port 7001               
     6) Samba (SMB) on port 445              
     7) Remote Desktop (RDP) on port 3389    
     8) NextCloud on port 443                
     9) OpenVPN on port 1194                 
     10) Custom (TCP)                        
     11) Return to previous menu             

***********************************************

 You can change the port value during install  

***********************************************

Choose a menu selection (1 - 11):
2

デフォルトのポート番号(80番)かどうかを確認されますので y を入力します。(変更している場合は n を選ぶことで任意のポート番号を入力できます。)

The default port for Web (http) is 80.

Would you like to continue with the default port assignment? [y/n] 
y

今度はサービス(アプリケーション)に対して登録する名前を入力します。
例えば、デバイス名-プロトコル名 のように、どのデバイス(サーバ)のどのサービスか分かるようにすると良いと思います。

Enter a name for this remote.it service (e.g. web-Pi). 
This name will be shown in your remote.it Service List.

Only letters, numbers, underscore, space and dash are allowed.

test-ubuntu18-web-http80 

登録が完了してメインメニューに戻ってきました。
メニューの上部に、HTTPOK になっていることが確認できます。

=========================  Installed remote.it Services  ======================
 Service Name       | Protocol   | LAN Address        | Port | Application     
-------------------------------------------------------------------------------
 test-ubuntu18-web-http80 | HTTP       | localhost          | 80   | OK               
-------------------------------------------------------------------------------
 Device Name: test-ubuntu18-web  Platform: x86_64-ubuntu16.04
 Hardware ID: 06:4d:9c:bf:88:98-8qm9ukuR3vZEiCyPeso2

============================ Main Menu ============================

    1) Attach/reinstall a remote.it Service to an application      
    2) Attach/reinstall a remote.it Service to a LAN application   
    3) Remove a remote.it Service from an application              
    4) Remove all remote.it Services, then exit                    
    5) Exit                                                        

===================================================================
    'application' is any TCP service (e.g. SSH, VNC, HTTP, etc.)   
    running on this device.  'LAN application' is a TCP service    
    running on another device on this LAN.                         
===================================================================
Choose a menu selection (1 - 5):

続けて、同じ手順を繰り返して、ssh用のサービス(22番)も登録してみました。SSHOK になったことが分かります。

=========================  Installed remote.it Services  ======================
 Service Name       | Protocol   | LAN Address        | Port | Application     
-------------------------------------------------------------------------------
 test-ubuntu18-web-http80 | HTTP       | localhost          | 80   | OK               
 test-ubuntu18-web-ssh22 | SSH        | localhost          | 22   | OK: sshd             
-------------------------------------------------------------------------------

これで準備は完了です。5 を選んで終了します。

============================ Main Menu ============================

    1) Attach/reinstall a remote.it Service to an application      
    2) Attach/reinstall a remote.it Service to a LAN application   
    3) Remove a remote.it Service from an application              
    4) Remove all remote.it Services, then exit                    
    5) Exit                                                        

===================================================================
    'application' is any TCP service (e.g. SSH, VNC, HTTP, etc.)   
    running on this device.  'LAN application' is a TCP service    
    running on another device on this LAN.                         
===================================================================
Choose a menu selection (1 - 5):
5

5.remote.itを使って接続する

セキュリティグループでポートを全閉じする

AWSのコントロールパネルに戻って、ubuntuサーバのインバウンドポートを全部閉じます。ちょっとドキドキします。
スクリーンショット 2019-07-25 19.09.36.png

閉じました。これで世界から遮断されました。Good-bye world!
スクリーンショット 2019-07-25 18.34.34.png

念のため、ブラウザから 13.115.29.34 へアクセスしますが、タイムアウトします。(当たり前)
スクリーンショット 2019-07-25 19.13.57.png

当然ですが、sshも遮断されました。
スクリーンショット 2019-07-25 19.17.41.png

ぜひ 13.115.29.3 にポートスキャンしてみてください:wave:

でも接続できます。 remote.itならね。

remote.itのWebポータルにサインインすると、デバイスリストに登録したubuntuサーバが表示されています。
スクリーンショット 2019-07-25 19.07.35.png

デバイス名をクリックすると、先ほど登録したhttpとsshのサービス名があります。
HTTPの方をクリックすると・・・
スクリーンショット 2019-07-25 19.18.08.png

Webサービスにつながりました。(どーん!)
スクリーンショット 2019-07-25 19.20.37.png

同じようにSSHをクリックすると、こちらはURLとポート番号が生成されます。
この接続先を使ってターミナルでSSHコマンドを叩くと・・・
スクリーンショット 2019-07-25 19.21.30.png

マジック! SSHにもつながりました。
スクリーンショット 2019-07-25 19.27.49.png

まとめ

ご覧のとおり、remote.itを使うことで非常にセキュアな状態(というかインターネットから全くアクセスできない)でありながら、自分だけはアクセスすることができるという非常に面白い状態を作り出すことができます。
実は、今回紹介した接続方法は、remote.itがクラウドにホストしているサーバ経由で接続しています。この他にも Peer-to-Peer で接続する方法も用意されています。また次の機会に紹介したいと思います。

一度使い方が分かると超便利です。VPNより簡単にセキュアに接続できますので、ぜひ試してみてください!

2019.8.20追記
続きを書きました。

続・インバウンドポートを全閉したAWSのサーバに接続する方法 〜P2P編〜

tkhmhiroc
1978年産。17年働いた某F系SIerを辞め、USのスタートアップにジョイン。コーダーになりたかったセキュリティSE。シャレオツなアイテムが大好物。CISSP、WSDホルダー。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away