tweet:2015:1118_01
pf/IPS/WAFと通信制御 雑感
最近、会社の仕事として、うちの会社のお客様限定で安価なWAFサービスを作った。 安価と言っても、一応ちゃんとしたWAFとhttp cache機能をもたせているので、理想的な状態(通信が十分にcacheされており、伝送遅延が少ないことが仮定できる状態)であれば、ピークで約2Gbps程度の通信性能を叩き出すことができた(ただし、検査対象の通信は400Mbps程度)。このシステムは全て仮想環境で組んだのだが、これだけの性能が出せる近年のハードウェアの性能には驚くばかりだ。
- packet filter firewall(以下pf)
- もっとも基本的な検査手法
- 対象はいわゆるIP通信
- 基本的には3層のヘッダ(IP Header)と4層のヘッダ(TCP/UDP/… Header)の情報を以って検査する
- 独立した機器として認識されることが多いが、多くの場合Routerなどのネットワーク機器や、node(サーバーや末端の端末)にも実装されている
- Intrusion Prevention System(以下IPS)
- 通信内容をもとにした検査手法
- 対象は通信内容そのもの
- 様々な通信の内容を検査しなんらかの手法で「攻撃と思われるもの」を検出する。
- 検査手法として有名なものに、攻撃パターン表(signature)を用いるものと、振る舞いから判断するものがある。
- signature型の場合、signatureの精度が重要になる
- 一般に、Rourterのような3層での中継デバイス(Network node)型の実装とSwitchのような2層での中継デバイス(Bridge)型(透過型などとも言う)の実装がある
- Web Application Firewall(以下WAF)
- Web通信(もっと言えばHTTP通信)に限定した、通信内容検査を行う
- 検査手法として有名なものに、攻撃パターン表(signature)を用いるものと、振る舞いから判断するものがある。
- signature型の場合、signatureの精度が重要になる
- 実装としては、HTTP proxyとしての実装と、2層での中継デバイス(Bridge)型(透過型などとも言う)の実装がある
一般に、pf/IPS/WAFは、検査項目の量に応じて転送性能が落ちる・CPUやメモリーを食うわけで、検査対象の通信量は少ないに越したことはない。
従って、検査対象外の通信をいかにして検査しないかが大変重要になる。 例えば、WAFにhttp以外の通信を食わせても仕方がないように、「通信検査対象外」の通信を検査システムに流し込むことは、単純に伝送遅延の増加とマシンリソースの無駄使いが発生するばかりで、いいことが何一つない。
以上から、個人的には、以下のような通信制御を行うのが良いのではないかと思っている。
- Externalとの境界、Network policyの境界に置いたRouterでpfを設定する
- ここでhttp系とそれ以外に通信を分離する
- policy routingはなかなか面倒だが、これは仕方がないと諦める
- 検査すべきhttp系通信はWAFで検査し、httpサーバーに直接転送する
- 検査すべきそれ以外の通信はIPSで検査し、転送する
こんな事は「論理的には」自明なのだが、実装を考えるとなかなか難しい。初段の通信分離がどうしても「面倒」なのだ。なぜなら、
- pf/IPS/WAFのポリシー作成が難しい
- pf/IPS/WAFのデバッグが難しい
- policy routingができるかがわからない
- policy routingの設定が難しい
- policy routingのデバッグが難しい
- この程度の構成にするだけで、障害時の切り分けが格段に大変になる
ここまで考えると、やっぱり少し高くてもオーバースペックな機器を入れて、全部見させる方が楽なのかもしれないとも思い始めてしまうわけで、まだまだネットワーク設計はちょっと踏み込むと罠があるなぁと思う。
tweet/2015/1118_01.txt · 最終更新: 2015/11/18 11:25 by 127.0.0.1