iptables の ipt_recent モジュール

始めに

iptables に ipt_recent というモジュールがあることを1週間くらい前に知ったので、メモがてらブログに残します。

このモジュールを使うとできることは、「ある条件に一致するパケットの Source/Destination IP を記録する」「あるパケットの Source/Destination IP が記録したリストの中に含まれるかを時間や出現回数を元に調べ、その結果によってルールを適用するかどうかを判断する」です。

同じような事をもっと手軽にできる iptables のモジュールとして ipt_limit がありますが、これはあくまでも流量制限しかできないので、 ipt_recent を使うと例えば以下のような、 ipt_limit よりももっと柔軟な事ができますね。

  • 1分間に6回以上 SSH への SYN フラグが立ったパケットを受け取ったら、以後10分間その SourceIP からの接続を拒否する( SSH ブルートフォース対策)
  • 10秒以内に3回以上あるポートへのパケットを受け取ったら、そのパケットの SourceIP に限り SSH への接続を許可する (ポートノッキング)

使い方

iptables -m recent --help を叩けば詳細な使い方が見られますので、そちらをご参照下さい。

終わりに

大変便利ですね!

しかし、あくまでも L3 レベルでの制御なので、例えば認証が一定回数失敗するとなにかルールを適用したい場合など L3 より上のレイヤーの結果を伴う必要がある場合は、 DenyHosts や Fail2ban を使用するなど、用法用量を守って賢く使い分けられるとステキですね。