« 小虎初カット | メイン | 釣りバカ日誌 »

2006年06月07日

BruteForceBlocker on FreeBSD-5.4

BruteForceBlockerはBruteForce攻撃(ユーザ名とパスワードを辞書とかを使って片っ端から入力して侵入を試みる攻撃)によるSSHログインを防ぐために,一定回数以上ログインに失敗した接続元のIPアドレスを,パケットフィルタによって拒絶するようにするツール.
これを使うことによって,一定回数以上パスワードを間違えたり,存在しないユーザへのログインを試みたりした接続元からはSSH接続ができなくなる(つまり,それ以降,ユーザ名やパスワードを試せなくなる).
また,どこかのサーバで一度拒絶されるとその情報が本家のサイトに送られ,集計,配布される.したがって,以前に他のサイトで拒絶されたIPアドレスからの攻撃は,自サイトで一定回数の失敗が検知されなくても拒絶することができる.

現在,BruteForceBlockerをPortsからインストールすると,初期設定はFreeBSD-6用になっています(というか使用しているOpenSSHのバージョンに依存します.FreeBSD-5.4ではOpenSSH-3.8を使っているのでBruteForceBlockerの修正が必要になります.FreeBSD-6ではOpenSSH-4を使っているようなのでその必要は無いみたいです).なので,FreeBSD-5.4用に多少の修正が必要でした.
その点も踏まえて,以下に設定方法を紹介します.

とりあえず,Portsからインストール

# cd /usr/ports/security/bruteforceblocker/
# make all; make install; make clean

つぎにパケットフィルタ(pf)の設定ファイルを修正します.我が家では既にファイアーウォールが設置してあったので,これまでサーバ上ではパケットフィルタを使用していませんでした.
なのでデフォルトのファイルを基に以下のように作成してみました.あまり理解していないのでつっこみ大歓迎です.ファイアーウォール無しの環境だったらこの設定は危険だと思います(たぶん).
すでに設定ファイルがある場合には最後の2行を適切な位置に追加して下さい.
つまりここでの設定はBruteForceBlockerで拒絶IPアドレスに設定された接続元からのSSH接続はパケットフィルタで拒絶しましょう,という意味です.

ext_if="rl0"
set loginterface $ext_if
set block-policy return
scrub in all
pass all
table persist file "/var/db/ssh-bruteforce"
block in log quick proto tcp from to any port ssh

変更できたら,OS起動時にパケットフィルタが有効になるように/etc/rc.confに以下の行を追加します.

pf_enable="YES"
pflog_enable="YES"

これで再起動時にパケットフィルタが有効になるはずです.
今は,手動でパケットフィルタを再起動させましょう.

# /etc/rc.d/pf restart
# /etc/rc.d/pflog restart

次に,SSH接続の失敗が検出された時にそれをBruteForceBlockerに伝えるための設定です./etc/syslog.confに以下の行を追加します.追加する場所は,既に"auth.info;authpriv.info"の行があると思うので,その下辺りで良いでしょう.

auth.info;authpriv.info | exec /usr/local/sbin/bruteforceblocker

そして,syslogのオプションに-cを加えるために/etc/rc.confに以下の行を追加.

syslogd_flags="-sc"

次にBruteForceBlockerの修正.BruteForceBlockerの本体(/usr/local/sbin/bruteforceblocker)はperlスクリプトなので,その一部(2行分)を変更します.

if (/.*Failed password.*from ($work->{ipv4}|$work->{ipv6}|$work->{fqdn}) port.*/i ||
/.*Invalid user.*from ($work->{ipv4}|$work->{ipv6}|$work->{fqdn})$/i ||

を以下のように変更

if (/.*Failed unknown for illegal user.*from ($work->{ipv4}|$work->{ipv6}|$work->{fqdn}) port.*/i ||
/.*Illegal user.*from ($work->{ipv4}|$work->{ipv6}|$work->{fqdn})$/i ||

また,設定ファイル(/usr/local/etc/bruteforceblocker.conf)を希望に合うように修正して下さい.その後,syslogを再起動.

# /etc/rc.d/syslogd restart

以上で設定作業は終了です.
この状態でSSHへの接続が失敗するとsyslogが/var/log/auth.logに

Jun 6 03:25:35 machine sshd[10000]: Illegal user guest from 134.96.7.9

などと出力します.こういったログインの失敗が一定回数続くとBruteForceBlockerが攻撃だと判断し,接続元を拒絶リストに追加します.すると同じログに

Jun 6 03:25:47 machine BruteForceBlocker[10002]: blocking 134.96.7.9/32 in pf table bruteforce.

と出力され,拒絶リストに追加された事がわかります.
設定ファイルで拒絶されないIPを設定することもできるので,何があっても拒絶されては困るIPがあれば登録したら良いと思います.
また,BruteForceBlockerの動作テストをしたために拒絶されてしまったIPなどを拒絶リストから除去するには,/var/db/ssh-bruteforceからそのIPを消し,パケットフィルタを再起動させれば大丈夫です.

自宅サーバなどを運営されている方は積極的にBruteForceBlockerを導入して頂けたらなぁ,っと思います.無意味な通信で貴重な通信路が圧迫されるのはもったいないですし,悪さをしている人達に少しでも対抗したいですからね.

以下参考にしたページ
http://earth.ht.sfc.keio.ac.jp/wiki/index.php?tech%2Fserver%2Fbruteforceblocker
http://paina.jp/tdiary/200602.html
http://lists.freebsd.org/pipermail/freebsd-questions/2005-October/100859.html
http://mimori.org/~h/tdiary/20060424.html

投稿者 yamada : 2006年06月07日 09:35

トラックバック

このエントリーのトラックバックURL:
http://blog2.arazio.net/mt-tb.cgi/42

コメント

コメントしてください




保存しますか?