wakame-vdc 開発苦労談

55
オープンソースクラウド基盤 Wakame-vdc開発苦労話 2011/02/07() @hansode

Upload: masahito-yoshida

Post on 15-Jan-2015

2.572 views

Category:

Documents


4 download

DESCRIPTION

第47回 GRACE セミナー(2011年2月7日開催)

TRANSCRIPT

Page 1: Wakame-vdc 開発苦労談

オープンソースクラウド基盤”Wakame-vdc”開発苦労話

2011/02/07(月)

@hansode

Page 2: Wakame-vdc 開発苦労談

自己紹介

Page 3: Wakame-vdc 開発苦労談

■自己紹介

•吉田将士 / Masahito Yoshida

•株式会社あくしゅ http://axsh.jp/•担当: サーバインフラ系•時々: プログラミング(Ruby, Perl, PHP, Bourne Shell)

•Twitter: @hansode•Blog: http://blog.hansode.org/

•ここ最近はOpenStackやPuppetの検証記録

•趣味: 筋トレ、ボルダリング(インドアクライミング)⇒最終目標は、片手懸垂。現在、両手で25回程度。

Page 4: Wakame-vdc 開発苦労談

“Wakame-vdc”における開発担当

Page 5: Wakame-vdc 開発苦労談

『Security Groups』ファイヤーウォール機能

Page 6: Wakame-vdc 開発苦労談

今回は、『Security Groups』

開発実装のお話です。

Page 7: Wakame-vdc 開発苦労談

■『Security Groups』の機能

•AWS(Amazon Web Service)の「Security Groups」相当•許可ベースのファイヤーウォール

•接続元IPアドレス•対象項目(tcp,udp,icmp / ポート番号)

「例: 192.0.2.10 から tcp/22 への接続を許可」

192.0.2.10 tcp/22

Page 8: Wakame-vdc 開発苦労談

『Security Groups』を実装するにあたり、使用した技術。

Page 9: Wakame-vdc 開発苦労談

2つあります

Page 10: Wakame-vdc 開発苦労談

1. ebtables2. iptables

Page 11: Wakame-vdc 開発苦労談

ここで、会場のみなさんに質問です。

Page 12: Wakame-vdc 開発苦労談

【Q.1】ebtablesをご存じの方?【Q.2】iptablesをご存じの方?

Page 13: Wakame-vdc 開発苦労談

■開発着手前のスキル情報・・・

•AWS利用経験は2年• Wakame-fuel開発で使用• Security Groupの設定経験あり• tcp/22とtcp/80を許可する程度の運用経験

•iptablesとebtables、名前を知っていた程度•実際に運用した経験は無い・・・

Page 14: Wakame-vdc 開発苦労談

ここからが開発苦労談のはじまりです・・・

Page 15: Wakame-vdc 開発苦労談

もしも(eb|ip)tablesを知らないエンジニアが『Security Groups』を1ヶ月半で実装したなら

2011/02/07(月)

@hansode

Page 16: Wakame-vdc 開発苦労談

この後、基礎を分かっていれば、何てこと無い箇所でハマり続けます!

Page 17: Wakame-vdc 開発苦労談

『Security Groups』機能実装へ向けて、改めて機能確認。

Page 18: Wakame-vdc 開発苦労談

■『Security Groups』の機能

1. 同一セキュリティグループ内のパケットのみ見える2. tcpdumpやtshark等を実行しても、他グループのパケットは見えない

3. 例え自分のインスタンスであっても、他グループのパケットは見えてはいけない

•AWS(Amazon Web Service)の「Security Groups」相当•許可ベースのファイヤーウォール

•接続元IPアドレス•対象項目(tcp,udp,icmp・ポート番号)

Amazon EC2内から見ると

Page 19: Wakame-vdc 開発苦労談

「Security Groups」を実装すべく、iptablesでフィルタしてみました。

Page 20: Wakame-vdc 開発苦労談

■ iptables

iptables is the userspace command line program used to configure the Linux 2.4.x and 2.6.x IPv4 packet filtering ruleset. It is targeted towards system administrators. Since Network Address Translation is also configured from the packet filter ruleset, iptables is used for this, too. The iptables package also includes ip6tables. ip6tables is used for configuring the IPv6 packet filter.

http://www.netfilter.org/projects/iptables/

IPv4 packet filtering ruleset.

Page 21: Wakame-vdc 開発苦労談

iptablesによるフィルタ後、tcpdumpで

パケットキャプチャしてみると、、

Page 22: Wakame-vdc 開発苦労談

近隣ノードのパケットが見えている・・!

Page 23: Wakame-vdc 開発苦労談

どうやら、見えているの正体は『arpパケット』だ。

Page 24: Wakame-vdc 開発苦労談

どうもiptablesでは、arpパケットの制御までは行えない。

Page 25: Wakame-vdc 開発苦労談

別のフィルタを探し始める。

Page 26: Wakame-vdc 開発苦労談

そして、たどり着いたのが

Page 27: Wakame-vdc 開発苦労談

■ ebtables

The ebtables program is a filtering tool for a Linux-based bridging firewall. It enables transparent filtering of network traffic passing through a Linux bridge. The filtering possibilities are limited to link layer filtering and some basic filtering on higher network layers. Advanced logging, MAC DNAT/SNAT and brouter facilities are also included.

http://ebtables.sourceforge.net/

Link layer filtering

Page 28: Wakame-vdc 開発苦労談

iptablesの要領で、ebtablesでフィルタリング

してみると、、

Page 29: Wakame-vdc 開発苦労談

ハマってしまいました・・・

Page 30: Wakame-vdc 開発苦労談

ebtablesでハマったその1

Page 31: Wakame-vdc 開発苦労談

DHCPとブロードキャスト

Page 32: Wakame-vdc 開発苦労談

■DHCPとブロードキャスト

gw

A

DHCP

インスタンスへのIPアドレス割り当てにはDHCPを利用しており、インスタンスがDHCPサーバを探す為に、、

Page 33: Wakame-vdc 開発苦労談

■DHCPとブロードキャスト

gw

A

DHCP

インスタンスへのIPアドレス割り当てにはDHCPを利用しており、インスタンスがDHCPサーバを探

す為に、ブロードキャストへパケットを送信する。

Page 34: Wakame-vdc 開発苦労談

■DHCPとブロードキャスト

gw

A

DHCP

DHCPサーバから応答があり、IPアドレスが割り当てられる。

Page 35: Wakame-vdc 開発苦労談

■DHCPとブロードキャスト

gw

A

DHCP

DHCPサーバとの通信だけでなく、

ブロードキャストとの通信を許可する必要がある。

Page 36: Wakame-vdc 開発苦労談

ebtablesでハマったその2

Page 37: Wakame-vdc 開発苦労談

グループ内インスタンスの所属ネットワーク

Page 38: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

同一ネットワーク内

A B

gw

A・Bが同一セキュリティグループに所属し、同一ネットワークに存在する場合

Page 39: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

gw

A B

AとBが通信出来れば良い

同一ネットワーク内

Page 40: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

A B

gw gw

ネットワークまたぎ

A・Bが同じセキュリティグループに所属し、互いに別ネットワークに存在する場合

Page 41: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

ネットワークまたぎ

AとBが通信出来れば良い・・・?

A B

gw gw

Page 42: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

A

gw

B

gw

相棒インスタンスにではなく、ゲートウェイとの通信許可設定を行う。

ネットワークまたぎ

Page 43: Wakame-vdc 開発苦労談

■グループ内インスタンスの場所

gw

A B A

gw

B

gw

相棒インスタンスの所属するネットワークによって、通信許可対象が変化する。

同一ネットワーク内 ネットワークまたぎ

Page 44: Wakame-vdc 開発苦労談

ebtablesでハマったその3

Page 45: Wakame-vdc 開発苦労談

arpキャッシュ

Page 46: Wakame-vdc 開発苦労談

■arpキャッシュ

gw

A B

A・B間で、許可→拒否→許可。

設定変更を繰り返すと、拒否しているのに通信可能状態が発生。

Page 47: Wakame-vdc 開発苦労談

■arpキャッシュ

gw

A B

arpキャッシュ更新タイミングよ

りも短い場合、拒否設定時でもarp通信出来てしまう状態がある。

arpキャッシュ

arpキャッシュ

Page 48: Wakame-vdc 開発苦労談

■arpキャッシュ

gw

A B

短時間で変更する場合は、インスタンス内のarpテーブルを都度削除する必要がある。

arpキャッシュ

arpキャッシュ

# arp –d <IPアドレス>

Page 49: Wakame-vdc 開発苦労談

■arpキャッシュ

gw

A B

※この短時間内の変更問題は、根本的解決になってないので、今後の課題。

arpキャッシュ

arpキャッシュ

Page 50: Wakame-vdc 開発苦労談

色々ありましたが、1ヶ月半で

「Security Groups」実装完了しました。

Page 51: Wakame-vdc 開発苦労談

■最終的なパケットフロー (ver.10.11)

ARP

IP4 ICMP

TCP

UDP

ACCEPT

DROP

ebtables

iptables

ARP

IP4

Link Layer Network Layer

Page 52: Wakame-vdc 開発苦労談

開発を振り返ってみると

Page 53: Wakame-vdc 開発苦労談

ネットワークの勉強になりました・・・

Page 54: Wakame-vdc 開発苦労談

この苦労話が少しでもみなさんの

役に立てば、幸いです。

Page 55: Wakame-vdc 開発苦労談

ご清聴ありがとうございました

http://twitter.com/hansodehttp://blog.hansode.org/