/
カテゴリー

近年、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 を選択

まとめ

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

 /

ICTSC2019 の一次予選に参加してくださった皆さん、お疲れ様でした。一次予選で出題した問題の解説記事をテーマ別にまとめました。これらのテーマの問題は、二次予選、本選でも出題される予定ですので解説記事を参考に対策していただければと思います。

コンテナ

コンテナが作れない

監視できない!

ウェブ

APIが飛ばないんですけど…

メール

メールは届いてるけど…

トンネリング

OpenVPNが急に繋がらなくなった!

パケットフィルタ

郷に入っては郷に従え

SSHできなくなっちゃった

ルーティング

接続が不安定になっちゃった

外に出れません・・。

IPv6

VyOSの設定が吹き飛んだ!

データベース

ストアドプロシージャってやつでなんとかして!!!!

 /
カテゴリー
 /

ICTSC2019の二次予選にご参加いただいた皆さん、本当にお疲れ様でした。

本選に出場が決定した皆さま、おめでとうございます!本選でお会いすることを楽しみにしています。
また、残念ながら本選出場ラインに到達できなかった皆さまはぜひ経験をバネとし、次回以降のICTSCにご応募いただければと思います。

今回出題した全8問の問題文、及び問題解説を公開します。
過去の問題を解いた上で学習し、ぜひ今後の研鑽にご利用いただければと思います。

コンテナ

君k8s得意って言っていたよね?

ウェブ

すごく匿名ダイヤリー

トンネリング

トンネル (選択問題)

パケットフィルタ

つながらなくなりました!

ルーティング

ルーティング (選択問題)

IPv6

Welcome to Nginxのページを表示したい!

データベース

MySQLの復旧をお願いします!!

MySQLに繋がりません!

 /

Q1

IPsec パラメータ「IPsecプロトコル」「暗号化」「認証」「Diffie-Hellman グループ」の4つを1番セキュアな組み合わせになるよう選択ください。

IPsecプロトコル

  • A: AH
  • B: ESP

暗号化

  • C: DES
  • D: 3DES
  • E: AES

認証

  • F: MD5
  • G: SHA

Diffie-Hellman グループ

  • H: 1
  • I: 2
  • J: 5

問題解説

「IPsecプロトコル」

AHは「Authentication Header」の略であり、認証機能を持っています。ESPは「Encapsulated Security Payload」の略であり、ペイロード部に対して暗号化を行うことができます。よって暗号化が行われるESPの「B」が正答となります。

「暗号化」

「電子政府における調達のために参照すべき暗号のリスト」*1より共通鍵暗号を抜粋

分類暗号技術
64 ビットブロック暗号該当なし
128 ビットブロック暗号AES , Camellia
ストリーム暗号KCipher-2

よって選択肢内にある「E」が正答となります。

「認証」

「暗号の危殆化に関する調査 報告書」*2の報告書に

ハッシュ関数においては、MD5 が既に危殆化している状態であると専門家の間では認識されおり、数分程度の探索でコリジョンが発見できるとの報告がなされている。

等の記載からSHAの「G」が正答となります。

「Diffie-Hellman グループ」

グループID鍵長
1768 ビット
21024 ビット
51536 ビット

上の表より共有鍵が最長となる5の「J」が正答となります。

Q2

正しいMTUの計算を選択ください。なお環境として「NGN_PPPoE」「L2TPv3」「IPsec ( プロトコルESP、暗号AES256、認証SHA-1 ) 」を使用しているものとします。

  • A: 1366
  • B: 1296
  • C: 1336
  • D: 1454

問題解説

PPPoE MTU1454
IP header (IPsec)20
SPI4
Sequence Number4
初期化ベクトル (AES 256)16
ESP 認証データ (SHA 1)12
=小計1398
=1398 以下で最大の 16 の倍数1392
Padding 長1
プロトコル (次ヘッダ)1
=小計1390
IP header (L2TPv3)20
UDP (L2TPv3)8
L2TPv312
Ethernet14
=L2TPv3 MTU1336

上の表より1336byteの「c」が正答となります。

Q3

インターネットVPNを実現する技術であり、楕円曲線DHを用いて鍵交換を行い、Linux Kernelのメインラインにマージされることが決定したものは以下のうちどれか。

  • A: IPSec
  • B: OpenVPN
  • C: WireGuard
  • D: VXLAN

問題解説

正答はC: WireGuardです。

IPSec, OpenVPNは共に楕円曲線DHを用いて鍵交換を行いますが、Linuxのメインカーネルにマージされておらず、利用する場合にはカーネルモジュールに追加するなどの追加作業が必要となります。

VXLANはL2ネットワークを延伸するためのプロトコルであり、DH鍵交換を行いません。

Q4

4G/LTEパケット交換網において、ユーザプレーンとコントロールプレーンで利用されるトンネリングプロトコルの組み合わせとして正しいものは次のうちどれか。

  • A: ユーザプレーン: GTPv0-U コントロールプレーン: GTPv1-C
  • B: ユーザプレーン: GTPv0-U コントロールプレーン: GTPv2-C
  • C: ユーザプレーン: GTPv1-U コントロールプレーン: GTPv1-C
  • D: ユーザプレーン: GTPv1-U コントロールプレーン: GTPv2-C

問題解説

正答はD: ユーザプレーン: GTPv1-U コントロールプレーン: GTPv2-Cです。

GTPv0-UとGTPv1-Cはそれぞれ3G時代に利用されていたユーザプレーンとコントロールプレーンのプロトコルであり、4G/LTE時代に利用されていたものとは別のプロトコルです。

ユーザプレーンとコントロールプレーンそれぞれが正しく4G/LTE時代に利用されているDが正解となります。

 /

問題文

先輩がMySQLサーバを立てて、新しく運用を開始したらしい。

そのサーバを利用するため、rootパスワードを教えて貰ったため、今までどおりのログインコマンドを試してみた。

$ mysql -uroot -p -h 192.168.0.100

だが、なぜかログインエラーが出てしまい先輩のサーバにアクセスできない。先輩はサーバ上で正しく動いているらしいので、トラブルシューティングのためにそのサーバへのアクセス権限をもらった。

クライアントサーバから上記のコマンドを実行し、rootユーザがログインできるように変更を加え、下記の内容を報告してほしい。

  • ログインできるようになるためどのような作業を行ったのか
  • なぜログインが行えなかったのか

問題サーバー

クライアント

  • IPアドレス: 192.168.0.101
  • ユーザー: admin
  • パスワード: USerPw@19

サーバ

  • IPアドレス: 192.168.0.100
  • ユーザー: admin
  • パスワード: USerPw@19
  • DBユーザー: root
  • DBパスワード: root

問題解説

本問題ではMySQL 8系から導入された認証形式であるcaching_sha2_passwordが古いMySQLクライアントでは対応していないために発生しているエラーでした。

クライアントサーバから実際にログインしてみようとコマンドを実行すると以下のようなエラーが出ていたかと思います。

$ mysql -uroot -p -h 192.168.0.100
Enter password:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

このエラーメッセージからなんらかの認証回りでエラーが起きており、回答に気づくシナリオでした。

実際にMySQLサーバの起動しているホストにログインするとMySQL 8系のパッケージがインストールされており、クライアント側のサーバではMySQL 5.7.21のパッケージがインストールされていました。

具体的な回答としては以下のものを想定していました。

  • クライアント側のサーバにインストールされているMySQLクライアントのバージョンをcaching_sha2_passwordに対応したものをインストールする
    • 5.7系であれば5.7.23以上、8系であればどのバージョンでも対応しています
  • rootユーザのログインに用いる認証形式を古い形式に変更する
    • mysql_native_passwordに変更する事で古いMySQLクライアントでもログインすることが可能になります

ちなみに、問題文の中で「先輩がMySQLサーバを立てて運用を開始した」という文面がありましたが、実際にMySQLサーバ側からmysqlコマンドを用いると特にエラーが出力されないままログインに成功します。
MySQLサーバ側にはMuSQL 8系のパッケージがインストールされており、MySQLクライアントも8系のものがインストールされているためcaching_sha2_passwordに対応しておりログインが可能であった、というシナリオでした。

この問題を通して新しいMySQL認証プラグインであるcaching_sha2_passwordについて知っていただければ幸いです。