35
Copyright©2014 NTT corp. All Rights Reserved. OpenFlowソフトウェアスイッチ Lagopusで遊ぶ(仮) 2015/08/08 NTT未来ねっと研究所 日比 智也

Lagopusで試すFirewall

Embed Size (px)

Citation preview

Page 1: Lagopusで試すFirewall

Copyright©2014 NTT corp. All Rights Reserved.

OpenFlowソフトウェアスイッチ

Lagopusで遊ぶ(仮)

2015/08/08

NTT未来ねっと研究所

日比 智也

Page 2: Lagopusで試すFirewall

1 Copyright©2014 NTT corp. All Rights Reserved.

ところで

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

@stereocatさん, Tremaday #4

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

Page 3: Lagopusで試すFirewall

2 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

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

Page 4: Lagopusで試すFirewall

3 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

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

Page 5: Lagopusで試すFirewall

4 Copyright©2014 NTT corp. All Rights Reserved.

@stereocatさんのスライドです

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

Page 6: Lagopusで試すFirewall

5 Copyright©2014 NTT corp. All Rights Reserved.

ところで,,,,

実装はOpenFlow1.0ベース

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

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

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

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

Page 7: Lagopusで試すFirewall

6 Copyright©2014 NTT corp. All Rights Reserved.

ところで,,,,

実装はOpenFlow1.0ベース

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

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

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

Page 8: Lagopusで試すFirewall

Copyright©2014 NTT corp. All Rights Reserved.

Lagopusで試すFirewall

OpenFlow1.3で実現する

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

Page 9: Lagopusで試すFirewall

Copyright©2014 NTT corp. All Rights Reserved.

Lagopusで試すFirewall

OpenFlow1.3で実現する

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

ココが違う

Page 10: Lagopusで試すFirewall

9 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

TCP/UDPポートどうする?

実装どうする?

Page 11: Lagopusで試すFirewall

10 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

TCP/UDPポートどうする?

実装どうする?

Page 12: Lagopusで試すFirewall

11 Copyright©2014 NTT corp. All Rights Reserved.

Rangeの表記どうする?

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

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

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

再起アルゴリズムで

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

Page 13: Lagopusで試すFirewall

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のルールに分割

Page 14: Lagopusで試すFirewall

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のルールに分割

Page 15: Lagopusで試すFirewall

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

****

Page 16: Lagopusで試すFirewall

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***

Page 17: Lagopusで試すFirewall

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***

Page 18: Lagopusで試すFirewall

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**

Page 19: Lagopusで試すFirewall

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*

Page 20: Lagopusで試すFirewall

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***}で表されるルールの集合でちょうどカバー出来る.

Page 21: Lagopusで試すFirewall

20 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

Bitmask表記に変換できる!

TCP/UDPポートどうする?

実装どうする?

Page 22: Lagopusで試すFirewall

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

Page 23: Lagopusで試すFirewall

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 ...

Page 24: Lagopusで試すFirewall

23 Copyright©2014 NTT corp. All Rights Reserved.

それでもLagopusなら....

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

私の戦闘力は 100万です.

Page 25: Lagopusで試すFirewall

24 Copyright©2014 NTT corp. All Rights Reserved.

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

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

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

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

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

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

コントローラ

スイッチ

データプレーン

コントロールプレーン

Page 26: Lagopusで試すFirewall

25 Copyright©2014 NTT corp. All Rights Reserved.

Agenda

Rangeの表記どうする?

Bitmask表記に変換できる!

TCP/UDPポートどうする?

Metadataにコピーする!

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

実装どうする?

Page 27: Lagopusで試すFirewall

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 (他のアプリケーション)

Page 28: Lagopusで試すFirewall

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

Page 29: Lagopusで試すFirewall

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} ] }

Page 30: Lagopusで試すFirewall

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"} }

Page 31: Lagopusで試すFirewall

30 Copyright©2014 NTT corp. All Rights Reserved.

単体利用できます.

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

priorityをちゃんと考えれば.

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

テーブル設計の競合注意

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

Page 32: Lagopusで試すFirewall

31 Copyright©2014 NTT corp. All Rights Reserved.

デモ

ルール追加だけです><

Page 33: Lagopusで試すFirewall

32 Copyright©2014 NTT corp. All Rights Reserved.

まとめ

Lagopusで試すFWを実現

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

Page 34: Lagopusで試すFirewall

33 Copyright©2014 NTT corp. All Rights Reserved.

注意

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

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

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

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

Page 35: Lagopusで試すFirewall

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.