ダイナミックポートフォワーディング(SOCKSプロキシ)の方法

近年、ICTSCでは大会をオンラインで開催することが増えてきています。その際、必要となるのがSSH接続とダイナミックポートフォワーディング(SOCKSプロキシ)です。本稿ではそれらの方法をご紹介します。

SSHとダイナミックポートフォワーディング

SSHはリモートのサーバに接続し、シェルを実行できるサービスです。Linuxなどで標準的に利用されており、サーバを運用する上でも必須となる技術です。

ダイナミックポートフォワーディングはSSHサーバを介して通信を行える機能です。例えば、SSHサーバにダイナミックポートフォワーディングを行い、SOCKSプロキシに対応しているアプリケーションで接続することで、SSHサーバからのみ接続ができるサーバに接続することができます。

ICTSCにおいては、参加者のミスオペレーションや故意に脆弱に作っている問題環境があるため、問題環境をグローバル環境に晒さないようにしています。そのため、参加者には、グローバルIPを設定してあるサーバにSSH接続してもらい、必要に応じてダイナミックポートフォワーディングしてもらうことで、問題環境に接続してもらう形が多くなっています。

SSH接続の方法

Windows 10 / Mac OS X / Linux の環境のおいて共通のコマンドで接続できます。Windows 10の場合はコマンドプロンプト、もしくはPowerShellを起動したうえで、コマンドを実行してください。Mac OS X / Linux の場合はターミナルを起動し、コマンドを実行してください。

パスワード認証の場合

ssh $USER_NAME@$HOST

$USER_NAME にはログインユーザーの名前を、$HOST には接続したいホストのドメイン名、もしくはIPアドレスを入力します。接続後のパスワードを求められるので、入力してください。

公開鍵認証の場合

公開鍵認証方式でsshを行う場合は、手元にある秘密鍵ファイルを指定して接続します。

ssh $USER_NAME@$HOST -i $KEY

$USER_NAME にはログインユーザーの名前を、$HOST には接続したいホストのドメイン名、もしくはIPアドレスを、$KEYには秘密鍵ファイルのパスを入力してください。

例として、 test.example.comuser としてパスワード認証でログインするとします。 以下のように、ホストへの接続に成功した場合はパスワードを問われるのでuser のパスワードを入力します。初めてホストに接続する際には、初めてホストに接続していることを確認されるので yes と入力します。

$ ssh user@test.example.com
The authenticity of host 'test.example.com (***.***.***.***)' can't be established.
ECDSA key fingerprint is SHA256:***************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test.example.com' (ECDSA) to the list of known hosts.
user@test.example.com's password:

正常にログインできた場合、自由に操作できるシェルが立ち上がっているはずです。問題を解くには開いたシェルから更に問題のVMにSSH接続する必要があるでしょう。

Windows 10 以前の環境には ssh コマンドがインストールされていないため、自分でインストールする必要があります。[こちら](https://github.com/PowerShell/Win32-OpenSSH/releases) からダウンロードし、インストールしてください。

ダイナミックポートフォワーディングの方法

ダイナミックポートフォワーディングを行うには、通常のSSH接続に加えてオプションを追加します。具体的には以下のとおりです。

ssh -D $PROXY_PORT $USER_NAME@$HOST

$PROXY_PORTにはダイナミックポートフォワーディングをするポートを指定します。SOCKSプロキシに対応しているアプリケーションは、ここで指定したポートでデータを送受信することで、SSHサーバを介して目的のサーバに接続することができます。

SOCKSプロキシの使い方

Windows 10

設定 > ネットワークとインターネット > プロキシ を開くと以下の図のようになります。

そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。

  • プロキシサーバーを使う をオン
  • アドレスsocks://127.0.0.1 を入力
  • ポート$PROXY_PORT で設定した値を入力

Mac OS X

設定 > ネットワーク > 詳細 > プロキシ を開くと以下の図のようになります。

file

そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。

  • SOCKSプロキシ にチェックをつける
  • SOCKSプロキシサーバ127.0.0.1$PROXY_PORT を入力

Linux

アプリケーションによって異なります。どうしてもわからない場合はFirefoxをインストールし、以下の方法で接続してください。

Firefox

オプション > ネットワーク設定 > 接続設定 を開くと以下の図のようになります。

file

そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。

  • 手動でプロキシを設定する を選択
  • SOCKS ホスト127.0.0.1 を入力
  • SOCKS ホスト と同じ行の ポート$PROXY_PORT を入力
  • SOCKS v5 を選択

まとめ

以上の方法で、問題環境へはアクセスできるはずです。みなさん、頑張ってください。