bruteblock – 非公式IPv6パッチ

キエフ発のbruteblockはSSHのbrute-force攻撃対策で参照されることが多いようですが、標準入力を読んでipfwのテーブルに追加(bruteblock)してくれ、テーブルから決められた時間経過後に削除(bruteblockd)してくれるというシンプルな作りのおかげで使い道は無限大、自分次第あなた次第、SMTP-AUTH, IMAP4へのあくなき挑戦や、公開していないポートへのアクセスなど、好きなトリガーを設定するだけです。

Apache HTTPDのCustomLog directiveはpiped logを出力できますし、SSHでの利用例のようにsyslogdもパイプに出力できるのでsyslogを吐くプログラムならば何でもbruteblockを利用できることになります。

大変ありがたく便利に使わさせてもらっています。どのルールで発動したかを知りたいのと、IPv6対応、max_count=1でも発動させたいとうわけで手を入れようとしたところ、なぜかSourceForgeのtrunkではやろうとしていたmax_count=1ができていて、よく見ると昔自分がパッチを送ったようでした。不思議な感覚でメールをあさってみると確かに7年前にパッチを送っていました。

というわけでそれとは別に下記のような機能を足してみました。sf.net上のbruteblockはチケットの発行ができないので本家にはまたまたメールで送りましたが、御多忙なのか長いこと音沙汰なしなのでBitbucketで晒しておきます。

当然ながらパッチ部分も本体と同じBSDライセンスです。

0.0.5から比較するとこの非公式パッチで以下の機能が増えます

  • IPv6の入力でも動作するようになります。
    • [2001:db8::]のようなカッコつきのままでもOKです。コロン(:)でポートを追記していてIPv6ではアドレスを[]などくくってログ出力するようなプログラムでpcreを単純にできるような場合を想定しています。
    • IPv4アドレスを挿入するときに、ついでに6to4アドレスも追加できるようにしました。(bruteblockの設定ファイルにてip4inserts6to4 = yesで指定します)
    • IPv6アドレスがv4mappedや6to4アドレスの場合にはIPv4アドレスも挿入するようにしました。
  • テーブルに挿入するアドレスのアドレス長を指定できるようにしました。(bruteblockの設定ファイルにてip4prefixlen, ip6prefixlenで指定します)
  • 発動したルールをsyslog出力するようにしました。bruteblock: Added:10.1.2.0/24, ipfw table:895 ([bruteblock0.conf]:regexp2:10.1.2.3),2002:a01:0203::/40 のように、追加したアドレス、テーブル番号、設定ファイル名、マッチした条件名、マッチしたアドレス、ついでに追加したアドレスを出力します)
  • max_count=1で、1回の条件該当でも発動します。その場合within_timeに実質的な意味は無くなります。
  • bruteblockdによって削除される前に同じIPアドレスでの追加条件が成立した場合にメモリリークが発生していたものを修正しました。
  • 2038年問題の時間をまたいでも正しく動作するように修正しました。bruteblockはipfwの32ビットのオプションフィールドを利用しているので64ビットOSでも問題が起きます。22年後までにはこのフィールドは少なくともIPv6アドレスと同じ長さの128ビットになっていると思いますが一応。そもそもipfwはあるんか、とか。

まだbruteblock使っている人いるかな…

コメントを残す

メールアドレスが公開されることはありません。