2016年2月20日土曜日

[CentOS6] 多段のsshポート転送を使って踏み台経由でWEBサーバにアクセスする


ファイヤーウォールなどに阻まれて、直接、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なども可能になります。