Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHREL

SoftwareDesignの2007年1月号のセキュリティニュースで知ったのですが、面白そうだったのでちょっと試してみました。

PHREL(Per Host RatE Limiter)はトラフィック監視&アクセス制限を自動的に行うツールで、パケットをキャプチャしつつ、iptablesのチェーンを動的に設定・解除する仕組みのようです。アーキテクチャの説明ページに詳しい図があります。
インストール手順はおなじみのconfigure・make・make installです。

$ tar jxf /export/Download\ Files/phrel-0.9.6.tar.bz2
$ cd phrel-0.9.6/
$ ./configure
$ make
$ su
# make install
#

配布サイトやSDの紙面では、主にDNSSSHへの攻撃回避についての説明がなされていますが、今回はHTTPポート(80)に対してphreldを起動してみました。起動オプションは「-h」で確認できます。オプションの意味ですが、とりあえず「30秒間に5回以上のアクセスがあった場合に10秒間遮断する」というものにしてみました。

# phreld -p 80 -A sum -i 30 -D 10 -T 5:0 -X 127.0.0.1
# ps axww | grep phrel
 8812 pts/4    SNl    0:00 phreld -p 80 -A sum -i 30 -D 10 -T 5:0 -X 127.0.0.1
 8817 pts/4    R+     0:00 grep phrel
# tail -f /var/log/messages
Feb 23 00:49:15 ofnir phreld[8812]: phreld v0.9.6
Feb 23 00:49:15 ofnir phreld[8812]: libpcap version 0.8.3
Feb 23 00:49:15 ofnir phreld[8812]: starting to monitor traffic

ここで、ブラウザからガシガシアクセスすると、messageに

Feb 23 00:49:45 ofnir phreld[8812]: changing threshold for 192.168.0.21 from 0 to 5 (pps 152, rate 0, burst 5, decay 10)
Feb 23 00:49:45 ofnir phreld[8812]: inserting chain 192.168.0.21-5-8812

と出力され、接続がタイムアウトするようになります。iptablesのチェーンを確認してみると、以下のような感じでDROPされていることが分かります。

# iptables -L 192.168.0.21-5-8812
Chain 192.168.0.21-5-8812 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
#

しばらく放置しておくと、

Feb 23 00:50:45 ofnir phreld[8812]: changing threshold for 192.168.0.21 from 5 to 0 (pps 1, rate none, burst 0, decay 0)
Feb 23 00:50:45 ofnir phreld[8812]: deleting chain 192.168.0.21-5-8812

とmessageに表示され、ブラウザからアクセスできるようになります。当然、iptablesのチェーンが削除された結果なんですが。。。

# iptables -L 192.168.0.21-5-8812
iptables: Table does not exist (do you need to insmod?)
#

結構良い感じですね。ちょっと消極的ですが、急激な負荷への対策にもなりそうです。