とある工大生の死活日記

とある工大生の死活日記です

ICTSC8の問題解説 [ストーム制御とVSRX]

ICTSC8の問題解説

ICTSC8から1週間以上が経ちました。皆さんお元気ですか?

今回のブログでは自分が作成した問題の解説と反省をしていきたいと思います。2問作成したので1問ずつ解説します。

 

伝統の国 第一のトラブル

旅の途中、酒場に訪れた。
        
        ドワーフ「お客さん、見ない顔だね。どこから来たんだい?」
        
        エイト「私は始まりの国のはずれよ。この人たちは私が異世界から呼んできたの」
        ドワーフ「ほーう。ここに壊れたスイッチがあって修理する当てを探しているんだが……。まぁおまえらじゃあ解決できないだろうな、ほら帰ってくれ」
        
        そう言い残すとドワーフは、店の奥に消えていった。
        
        エイト「キー! 悔しい。あんたたち絶対直してみせなさい!! 解決して見返してやりましょう」

 

     ## 注意事項
        - 2960B を再起動してはいけない。

        ## 達成すべき事項
        - 7 番ポートをリンクアップをさせ、原因を特定する
        - パスワードを `broken_port?` に変更する。

 という問題です。まずどういう物理トポロジー図であったかというと以下のようになっています。

 

f:id:katu7414:20170905142136j:plain

 2960BのFE0/7でトラブルが発生しました。

トラブルの内容を簡単に説明すると脆弱なパスワード(cisco)を設定していたが、突破されて7番ポートに変えられてしまったという感じです。では解説します。

 

コアの技術

ストーム制御

ストーム制御は、物理NICの不良、ネットワーク構成のミス、DoS攻撃などにより発生するトラフィックストームの影響を制限して制御できる技術です。ストーム制御では、ポートからスイッチングバスを通過するトラフィックをモニターして、パケットがユニキャスト、マルチキャスト、ブロードキャストなのか判別します。次に、スイッチは1秒間に受信した特定のタイプのパケット数をカウントして、事前に定義されたストーム制御レベルのしきい値と、その測定結果を比較します。以下のいずれかを測定方法に使用。

この技術を用いてある程度のパケットが通ればshutdownになるように設定しました。

では具体的なconfigを見てみましょう。

 

ena
  terminal history size 0
  conf t
   
  hostname 2960-B
   
  !KAT
  enable sec cisco
  vtp mode tran
   
  !KAT
  vlan 143
  int fa0/7
  switch access vlan 143
   
  storm-control unicast level 0.0
  storm-control action shutdown
  exit
   
  !internet
  vlan 199
  int range fa0/13 - 24
  switch access vlan 199
  exit
  int fa0/15
  switchport access vlan 199
   
  !892J
  vlan 199
  int range fa0/8
  switch access vlan 199
  exit
  int fa0/8
  switch access vlan 199
  exit
  exit
   
  write memo
   
   
  conf t
  int fa0/7
  no storm-control unicast level 0.0
  no storm-control action shutdown
  exit
  exit

 

 赤文字になっているところが今回のポイントになっているところです。ストーム制御が原因だとすぐにわからないようにnoでコマンドを消しています。またactionをshutdownに変えているのでポートが上がらないようになっています。ポイントとしてはそれぐらいでしょうか?何か質問があれば対応します。

そしてこの問題にはもう一つポイントがあります。それがパスワードを変更することです。`broken_port?`に変更するという指示です。通常ciscoでは `?` を

うつと現在うてるコマンドの候補が出てきます。これを無効化しないとパスワードが設定出来ません。無効化する方法は Ctrl + V です。

解説は以上です。次に講評です。

講評

結果としましては、15チーム中14チームが基準点突破でした。基本的にはパスワードを変更したということ(?を無効化する記述が書かれていること)とポート7が上がっていれば基準点としていました。皆さんがちゃんと解いてくれたみたいでよかったです。

 

荒廃の国 第三のトラブル

トラフィックの問題を解決し、無事に服屋にたどり着くことができた。
        
        エイト「さっそく服を買うわよ……ってお店が開いてないじゃない!」
        
        店の前で大声を出したせいか、中からやつれた顔のエルフが出てきた。
        
        エルフ「すいません。最近盗賊に魔法陣を乗っ取られて、お店のシステムが動かなくなったんです。今は盗賊の対策の真っ最中で、これが終わるまでお店は開けられません。魔法陣を安全に設定したいんですけど……」
        
        エイト「かわいそうに! 私たちが何とかしてあげましょう。安全にsshができればいいのかしらね?」

 

     ## 注意事項
        - ブラウザはfirefoxを推奨する。
        - 指定のURLにアクセスしてクエストを解かなければいけない。

        ## その他
        サーバにデフォルトゲートウェイを設定する際には192.168.16.254/24を使用すること

        ## 達成するべき事項 
        - 管理者ポートとそれ以外のポートの2つへsshができる。
        - どのようにしてsshを可能にしたのか詳細に記載する。

 juniperの問題です。今回vsrxとお借りすることができたため出題することができるようになりました。問題解説を見る前に以下の資料に目を通すことをお勧めします。

www.slideshare.net

コアの技術

Flow-based forwardingモード
packet-based forwardingモード

以上のモード切り替えをするという問題でした。具体的なコマンドは以下の通りです。Flow-based forwardingモードでは、vsrxは元々ファイアウォールのためpingの疎通性の確保が難しいモードです。なのでvsrxをルーターとして扱うためにモードをpacket-based forwardingモードに変えるという問題です。正解するためにはfxp0という管理者ポートとそれ以外のどこかのポートからsshできれば完了です。

delete security
set security forwarding-options family mpls mode packet-based
set security forwarding-options family inet6 mode packet-based
commit
exit
request system reboot
確認するコマンド
show security flow status

1つだけ言わないといけないことがあります。この解答方法はベストアンサーではありません。(大人の方からもできるけどベストアンサーではないよねって言われました。)

これに関しては完全に自分の勉強不足でした。申し訳ないです。

問題解説

具体的にしなければならないことは主に2つです。

  1. インターフェースにアドレスの設定とsshを許可するコマンドをうつ。
  2. モードを変えてリブートする。

以上です。

以下はvsrxを構築していく具体的なコマンドです。問題を解くにあたって必要はないがよく使いそうなコマンドも同時に載せています。

今回はopenstack上にvsrxが乗っている状況になっています。openstackでvsrxをちゃんと使用するためにはいくつかポイントがあります。

モードの移行
cli (junosのコマンド打てるモードへ)
conf (cisco のconf tと同類)

  • pingの疎通性の確保
    コマンド 
    conf
    set interfaces fxp0 unit 0 family inet address 10.0.0.13/24
    set system root-authentication plain-text-password
    set routing-options static route 0.0.0.0/0 next-hop 10.0.0.254
    commit
    exit
    ping 8.8.8.8
    (注意 commitは必ずうつ。コマンドの有効化)
    address 10.0.0.13のところは該当するアドレスで(openstackのやつ)

アドレスはopenstackで使用していたものなので気にしないでください。

上記のコマンドでは管理者ポートにアドレスを付与し、rootでログインするときにパスワードを付与するもので付与しなければcommitするときに注意を受けるのでご注意ください。またstaticでサーバーまでルーティングしています。rootのパスワード設定はこちらでしていたので問題を解くにあたって行う必要はなかったです。

次にsshの許可の設定と新しいユーザーの作成

set system login user katu class super-user
set system login user katu authentication plain-text-password
set system services ssh sshの有効化のコマンド
set system services ssh root-login allow

これでkatuというユーザーを作り、またsshの許可をしています。

次にvsrxをルーターとして使用するためのコマンド
delete security
set security forwarding-options family mpls mode packet-based
set security forwarding-options family inet6 mode packet-based
commit
exit
request system reboot
確認するコマンド
show security flow status

ホスト名の設定
set system host-name vSRX-1

管理者ポート以外のポートからsshする方法

set interfaces ge-0/0/0 unit 0 family inet address 10.0.0.13/24

だいたいこんな感じです。問題講評をしたいところでしたが、解答数が0だったので代わりに構築中に起きた様々なトラブルについて書きます。

 

構築中のトラブル

まずopenstackの上にvsrxをのせることになったのですがopenstackもvsrxも触ったことがなかったので、1からの構築になりました。

f:id:katu7414:20170906191213p:plain

インスタンス作成をすると上の画像のような感じになりました。

カーネルパニックが起きている状態です。理由としましてはメモリを4GB未満でインスタンス作成をしていたからです。必ず4GB以上でやりましょう。

次にsshで疎通できるようにしようと思いました。しかしvsrxでどう設定してもできませんでした。状態としてはpingは通るがsshできないという感じです。これは別の運営委員の方が原因を特定してくれました。

SSHの接続は確立してたけど鍵交換のところで止まっていたので,おそらく原因はMTU
vSRXのFloating IPに 1500byteでpingうつと落ちる.1472byteが限界
VXLANのオーバーヘッド分だと思うんだけど,MTUを調整しないといけない

という返事をいただきました。というわけでMTUを調整しようと思い管理者ポートのMTUを1450にしようとしましたが管理者ポートはMTUを変えることはできないので他のポートからsshしようとして2つのFlow-based forwardingモードpacket-based forwardingモードを知りました。そしてge-0/0/0からsshできるようにして無事に出来ました。よって検証環境では管理者ポートではsshできずに他のポートからしかsshできないという謎の環境が出来上がりました。

次にopenstackがvsrxの新しく作成したポートを認識しないという問題が発生しました。結果から言えばおそらくですが原因はopenstackのポートフィルターが働いていたのが原因です。これらを考慮して次のような手順で構築しました。

  • openstackのインスタンスを建てる
  • インターフェースは2つ以上必ず追加する。
  • 2つ目は外部に疎通性があるようにする(sshするため)
  • Floating IPの付与
  • インスタンス起動
  • ge-0/0/0にアドレスを追加
  • 外部への疎通性の確認
  • sshの許可のコマンド
  • ge-0/0/0 のmtuを1450にする
  • sshできる
    注意点 この手順通りでなければならない。また1つ目のインターフェースは管理インターフェースfxp0に付与されるので必ず2つめのインターフェースに疎通性の確保できるアドレスを付与すること。そしてopenstack側にNICを追加を認識させたいときはインスタンスを停止させてから起動させる。

vsrxにはアドレスを付与する順序があるらしくこの手順でなければできませんでした。

このあたりで時間がなくなり、検証は終了しました。この構築過程を問題にしようと思い今回のような問題になりました。

感想

今回出題出来なかったですがciscoとvsrxでIPsecを貼る問題を出そうとあがいていたのですが時間がなく出題できませんでした。マルチベンダー問題を期待していた方申し訳ないです。

全体の感想です。今回ネットワーク系の問題の数が少ないと感じた方がいたと思います。その点に関しては申し訳ないです。運営委員にネットワーク系の問題を作成する人が減っており、問題数が減ってしまいました。

問題の質問やもっといい解答を知っているという方は自分のツイッターまでご連絡いただけるとありがたいです。

twitter.com

また10/7にネットワーク系の問題を中心に問題解説をするLT大会を開催します。よければご参加ください。

connpass.com

以上です。ありがとうございました。