Lagopusで試すFirewall

Preview:

Citation preview

Copyright©2014 NTT corp. All Rights Reserved.

OpenFlowソフトウェアスイッチ

Lagopusで遊ぶ(仮)

2015/08/08

NTT未来ねっと研究所

日比 智也

1 Copyright©2014 NTT corp. All Rights Reserved.

ところで

ご覧になったことありますか?

@stereocatさん, Tremaday #4

http://www.slideshare.net/stereocat55/tremafirewall

2 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

http://www.slideshare.net/stereocat55/tremafirewall

3 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

http://www.slideshare.net/stereocat55/tremafirewall

4 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

http://www.slideshare.net/stereocat55/tremafirewall

5 Copyright©2014 NTT corp. All Rights Reserved.

ところで,,,,

実装はOpenFlow1.0ベース

RangeはBitmaskでどう表現するの???

そもそもL4はbitmask掛けれない...

FWをOpenFlowで表現するのは無理?

簡単なテストにしか使えない?

6 Copyright©2014 NTT corp. All Rights Reserved.

ところで,,,,

実装はOpenFlow1.0ベース

RangeはBitmaskでどう表現するの???

そもそもL4はbitmask掛けれない...

それでもLagopusなら,,, Lagopusならなんとかしてくれる,,,

Copyright©2014 NTT corp. All Rights Reserved.

Lagopusで試すFirewall

OpenFlow1.3で実現する

FW運用のテストツール試作

Copyright©2014 NTT corp. All Rights Reserved.

Lagopusで試すFirewall

OpenFlow1.3で実現する

FW運用のテストツール試作

ココが違う

9 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

TCP/UDPポートどうする?

実装どうする?

10 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

TCP/UDPポートどうする?

実装どうする?

11 Copyright©2014 NTT corp. All Rights Reserved.

Rangeの表記どうする?

そもそもTCAMで検索できているはず

TCAMは{0,1,don’t care}で検索

RangeもTCAMで検索しているなら,Lagopusでも検索できるはず.

再起アルゴリズムで

Range -> Bitmask表記のルールに変換

12 Copyright©2014 NTT corp. All Rights Reserved.

例題

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0110 ~ 1111 をbitmaskのルールに分割

13 Copyright©2014 NTT corp. All Rights Reserved.

例題

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0110 ~ 1111 をbitmaskのルールに分割

14 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

1. ****が範囲に含まれるかチェック

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

****

15 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

2. ****の範囲を2つに分割

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

1*** 0***

16 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

3. 1***はRangeに含まれる

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

1*** 0***

17 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

2’. 0***を2つに分割

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

1*** 00** 01**

18 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

2’’. 01**を2つに分割

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

00** 010* 1*** 011*

19 Copyright©2014 NTT corp. All Rights Reserved.

Algorithm 簡単(?)に

2’’. 01**を2つに分割

0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

00** 010* 1*** 011*

0110 ~ 1111 で表されるレンジは,{011*, 1***}で表されるルールの集合でちょうどカバー出来る.

20 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

Bitmask表記に変換できる!

TCP/UDPポートどうする?

実装どうする?

21 Copyright©2014 NTT corp. All Rights Reserved.

Bitmaskが使えないTCP/UDP

OpenFlow1.0からの違いといえば,

Metadata & Multi table

Metadataにコピーすればいいじゃん

しかし,Copy_Fieldは未対応....

Metadata (64bit) L4 src L4 dst

22 Copyright©2014 NTT corp. All Rights Reserved.

Bitmaskが使えないTCP/UDP

書き下せばいいじゃない.

※ルール数が65536 * 2 * 2 = 26万

for i in range(0, 65535): # SRC for ip_proto in [6, 17] : flow = {"table_id":0,"priority":1000, "actions":[{"type":"WRITE_METADATA","metadata":i << 16, "metadata_mask":0x00000000FFFF0000}], "match":{"dl_type":2048,"ip_proto":ip_proto,"tp_src":i}} mod_flow_entry(datapath, flow, ofproto.OFPFC_ADD) # DST ...

23 Copyright©2014 NTT corp. All Rights Reserved.

それでもLagopusなら....

Lagopusならなんとかしてくれる...

私の戦闘力は 100万です.

24 Copyright©2014 NTT corp. All Rights Reserved.

そんなことしなくても...

リアクティブに登録しても実現できる

1. TCP/UDPパケットが来たらPacket-In

2. ポート番号のメタデータコピーのルール追加

未登録のPort番号であれば,Packet-In

Port番号コピーのルール+ Packet-Out

コントローラ

スイッチ

データプレーン

コントロールプレーン

25 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

Bitmask表記に変換できる!

TCP/UDPポートどうする?

Metadataにコピーする!

きっとLagopusならなんとかしてくれる!

実装どうする?

26 Copyright©2014 NTT corp. All Rights Reserved.

実装どうする?

テーブル設計

table 0:

L4 srcポートをmetadataにコピー(32~16bitに)

table 1:

L4 dstポートをmetadataにコピー (16~0bitに)

table 2:

Range -> Bitmask変換したルール群投入

マッチしたら落とす or OUTPUT

or Next table (他のアプリケーション)

27 Copyright©2014 NTT corp. All Rights Reserved.

実装どうする?

Table 0のルール例

{'priority': 1000, 'table_id': 0, 'match': {'dl_type': 2048, 'ip_proto': 6, 'tp_src': 5}, 'actions': [ {'metadata_mask': 4294901760, ‘type': 'WRITE_METADATA', 'metadata': 327680} ] }

0xFFFF0000

UDP/TCP両方で ルール登録

0x00050000

28 Copyright©2014 NTT corp. All Rights Reserved.

実装どうする?

Table 1のルール例

{'priority': 1000, 'table_id': 1, 'match': {'dl_type': 2048, 'ip_proto': 17, 'tp_dst': 8}, 'actions': [ {'metadata_mask': 65535, 'type': 'WRITE_METADATA', 'metadata': 8} ] }

29 Copyright©2014 NTT corp. All Rights Reserved.

実装どうする?

Table 2のルール例

(アドレスに意味はありません)

{"table_id":2,"priority":65535,"cookie":0, "actions":[], "match":{ "dl_type":2048, "ipv4_src":“192.168.1.10/255.255.255.240", "ipv4_dst":“192.168.1.171/255.255.255.240", "ip_proto":17, "metadata":"0x0000000000580050/0x00000000ffffffff"} }

30 Copyright©2014 NTT corp. All Rights Reserved.

単体利用できます.

ルールの追加/削除が動的に出来ます.

priorityをちゃんと考えれば.

他のアプリと組み合わせられます.

テーブル設計の競合注意

iptablesをより速い?(試してない)

31 Copyright©2014 NTT corp. All Rights Reserved.

デモ

ルール追加だけです><

32 Copyright©2014 NTT corp. All Rights Reserved.

まとめ

Lagopusで試すFWを実現

Lagopusならなんとかしてくれるはず

33 Copyright©2014 NTT corp. All Rights Reserved.

注意

現在はルール投入に時間がかかります.

新Lookupだと高速になりそうだが,まだ動作が怪しい..

良い子はコピーフィールドが使えるOpenFlow Switchの利用も考えましょう.

できる子はLagopusにコピーフィールド実装してください.

34 Copyright©2014 NTT corp. All Rights Reserved.

Thank you for your attention

This research is a part of the project for “Research and Development of Network Virtualization Technology” supported by the Ministry of Internal Affairs and Communications.

Recommended