ファイヤーウォールなどに阻まれて、直接、WEBサイトにアクセスできない場合でも、SSH接続が可能であれば、SSHポート転送を利用して、ファイヤーウォール越しにブラウザでWEBサイトにアクセスできる場合があります。
SSHポート転送は、ローカルコンピュータの特定のポートに送られてきたデータを、SSHの通信経路を用いてリモートコンピュータの特定ポートに送信する事です。
今回は、下図にような環境で、「WindowsPC」から「WEBサーバ」にアクセスしてブラウザでページを表示してみます。
- WindowsPC: 192.168.1.2
- 踏み台サーバ: 192.168.56.11
- WEBサーバ: 10.0.2.5
この環境では、「WEBサーバ」は localhost からのアクセスしか許可せず、「WindowsPC」と「WEBサーバ」のサブネットを異なるものにして、「WindowsPC」から「WEBサーバ」への直接の疎通を不可能にしています。
「WindowsPC」から「WEBサーバ」にアクセスするには、「踏み台」を経由する必要があります。
通常だと、外部から「WEBサーバ」にアクセスすることは不可能ですが、SSH接続が可能だと、ポート転送を利用して、外部からブラウザでWEBページを表示できるようになります。
以下のようにSSHポート転送を繰り返して(WindowsPC ⇒ 踏み台 ⇒ WEBサーバ)、「WindowsPC」から直接、「WEBサーバ」にアクセスできるようにします。
SSH接続元 | 転送元のポート | SSH接続先 | 転送先のポート |
---|---|---|---|
踏み台 | 10080 | WEBサーバ | 127.0.0.1:80 |
WindowsPC | 10080 | 踏み台 | 127.0.0.1:10080 |
WEBサーバの準備
まず、テスト用に「WEBサーバ」を用意します。
Apacheの httpd.ocnf を以下のようにして、localhost からの接続のみ受け付けるようにします。
通常なら、外部からページを表示できません。
# # Controls who can get stuff from this server. # Order allow,deny Allow from localhost </Directory>
「踏み台」から「WEBサーバ」にポート転送でアクセスする
「WindowsPC」でPuTTYを開いて「踏み台」にSSHログインします。
「踏み台」にログインしたら、以下のようにポート転送を設定して、「WEBサーバ」にSSHログインします。
[root@node01 ~]# ssh -g -L 10080:127.0.0.1:80 centos@10.0.2.5
ログインしたら、この PuTTYのターミナルを、開いたまま置いておくと、このターミナルの SSH接続を通して、ポート転送が行われます。
これで、「踏み台」の 10080 ポートが、「WEBサーバ」の 80 ポートに転送されるようになったので、「踏み台」からWEBページを見ることができます。
新しくPuTTYを開いて、「踏み台」にSSHログインし、以下のように curl コマンドでアクセスすると、「WEBサーバ」のページを表示します。
[root@node01 ~]# curl http://127.0.0.1:10080/index.html <html> <head> <title>Test Page</title> </head> <body> <h1>Test Page</h1> </body> </html>
「WindowsPC」から「踏み台」にポート転送でアクセスする
上記で「WEBサーバ」にSSHログインしたターミナルは残しておきます。
この状態で、「WindowsPC」から「踏み台」の10080ポートに接続できれば、「WindowsPC」から「WEBサーバ」にアクセスできます。
使用するURL は http://192.168.56.11:10080/ です。
しかし、今回は、「WindowsPC」から「踏み台」にアクセスできるのが SSHポート(22)だけなので、下図のように多段のSSHポート転送で「WEBサーバ」にアクセスします。
まず、PuTTY で 「踏み台」にSSHログインします。
PuTTYのメニューで[設定の変更]を選択し、[接続] > [SSH] > [トンネル] で下図の画面が表示されます。
下図のように入力して、[追加]ボタンをクリックすると、ポート転送が設定できます。
[適用]ボタンをクリックすれば、ポート転送が有効になります。
これで、「WindowsPC」から「WEBサーバ」に直接アクセスできるようになります。
ブラウザを開いて、http://127.0.0.1:10080 にアクセスすると、下図のように「WEBサーバ」のページが表示できるようになります。
同じような方法で、踏み台経由のSCPやFTPなども可能になります。