Fail2banでDoSアタック/DoS攻撃 対策 (2)
 2006.10.16

Fail2banでDoSアタック対策 (1)の続きです.インストールと設定について. 私はCentOS4.xを使ってますので,その前提で書きます. CentOSでは,Redhat用に公開されているRPMが使えます.私はSRPMをダウンロードしてrebuildしました.Fail2banのRPM版
% rpmbuild --rebuild fail2ban-0.6.1-2jik.src.rpm
ドキュメントには,Python2.4以上が必要と書かれていましたが,私はCentOSにインストールされていたRPM版のPython2.3.4で動かしてます.今のところ問題ありません.ソースコードも覗いてみましたが,特に2.3では動かないようなコードも見当たりません. できあがったRPMファイルをインストールすると,/etc/init.d/fail2ban が作成され,次回起動時からfail2banが動くよう設定されます. 設定ファイルが /etc/fail2ban.conf にあるのでこの設定ファイルを編集します. 設定は,グローバルセクションと監視するログ毎のセクションに分かれています. グローバルセクションの設定で重要そうなところは以下の項目です. 以下はfindtime秒間にmaxfailures回のイベントが起きた場合,bantime秒間,アクセス元からのアクセスを遮断するという設定になります.本当はこれらの設定もログ毎のセクションで設定したいところです.
maxfailures = 5
findtime = 600
bantime = 600
Fail2banは元々sshのパスワード総攻撃によるログイン失敗を監視するためのソフトだったらしく,イベントをfailureといってます. 次に,ログ毎のセクションの設定です.Apacheのセクションを例に説明します.
[Apache]
enabled = true
logfile = /var/log/..../access_log
port = http
timeregex = d{2}/S{3}/d{4}:d{2}:d{2}:d{2} S{1}d{4}
timepattern = %%d/%%b/%%Y:%%H:%%M:%%S +0900
failregex  = GET /...
enabledはこのセクションの監視をするか(ture)/しないか(false).logfileはログファイルのパス.portは遮断するポートを指定.timeregexとtimepatternは,ログレコード中で時刻を表している部分のパターンを表す.上記例ではApacheのcombined形式のログの場合.failregexは,イベントに関する正規表現を指定. #私がテストした限りでは,遮断されるのはportで設定したポートだけでなく,全ポートに対するアクセスが遮断されています. 設定後は,/etc/init.d/fail2ban start する.テストは実際にWebサーバにアクセスしてみればできます.ただし,当該サーバにリモートでログインしつつ,同じ端末からテストのためにDoSアタックをかけると,設定が正しい場合あっさりとアクセス遮断されます.別マシンからテストを行うか,テスト時はbantimeを短めに設定しておきましょう.   * * * 新バージョンに関する記事を書きました. 1. fail2ban-0.8.1 – インストール編 2. fail2ban-0.8.1 – 解説編 3. fail2ban-0.8.1 – 設定編 2006/11/7追記: しばらく運用した結果を書きました. 2007/11/1追記: 新バージョンの記事を書いたので,そっちへのリンクを追加
カテゴリー:サーバ管理