ダイナミックポートフォワーディング(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.com
に user
としてパスワード認証でログインするとします。 以下のように、ホストへの接続に成功した場合はパスワードを問われるので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
設定 > ネットワーク > 詳細 > プロキシ
を開くと以下の図のようになります。
そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。
SOCKSプロキシ
にチェックをつけるSOCKSプロキシサーバ
に127.0.0.1
と$PROXY_PORT
を入力
Linux
アプリケーションによって異なります。どうしてもわからない場合はFirefoxをインストールし、以下の方法で接続してください。
Firefox
オプション > ネットワーク設定 > 接続設定
を開くと以下の図のようになります。
そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。
手動でプロキシを設定する
を選択SOCKS ホスト
に127.0.0.1
を入力SOCKS ホスト
と同じ行のポート
に$PROXY_PORT
を入力SOCKS v5
を選択
まとめ
以上の方法で、問題環境へはアクセスできるはずです。みなさん、頑張ってください。