fail2banでブルートフォース攻撃対策

提供: Akionux-wiki
Share/Save/Bookmark
移動: 案内検索

概要

サーバを運営していると、SSHへのブルートフォース(総当たり)攻撃が頻繁にしかけられていることがログで確認できる。 公開鍵認証を使っていれば攻撃が成功する恐れは少ないが、それよりもむしろ攻撃でネットワークに負荷がかかっているようで、なんとかしたい。

そこで、fail2banでログファイルを観察してパスワード認証の失敗が多いIPのアクセスを禁止する。

環境

ディストリビューション
Slackware Linux 14.2 (x86_64)
fail2banパッケージ
fail2ban-0.9.7-x86_64-1_SBo

インストール

SlackBuildsのnetwork/fail2banからインストールした。

設定

man 5 jail.conf

を読んだり、MANUAL 0 8 - Fail2banを参考にする。

/etc/fail2ban/以下に設定ファイルがあり、4種の設定ファイルがある:

fail2ban.conf
ログ設定など、fail2banのグローバル設定
filter.d/*.conf
filter(認証失敗を検出する方法)の設定
action.d/*.conf
action(アクセス禁止するコマンド等)の設定
jail.conf
filterとactionの対応(jail)の定義

filterについてはsshdを始めとしてウェブサーバ(apache, nginx)、メールサーバ(exim, qmail, postfix, dovecot)、データベース(mysqld, mongodb)などが用意されていて、actionについては詳しくは見ていないがiptablesによるファイアウォール設定を始めとして用意されている。

とりあえずsshdに対して取り締りたいので、jailに関する設定をする。

jail設定

最も基本になるjail設定ファイルのjail.confは直接編集せず、jail.localか、jail.d/以下に.confファイルを作って設定をオーバーライドする。

具体的には、次の順序で設定ファイルが読み込まれる。

  1. jail.conf
  2. jail.d/*.conf (in alphabetical order)
  3. jail.local
  4. jail.d/*.local (in alphabetical order).

デフォルトでは全てのjailは無効なので、必要なものを個別に有効にする。 例えば、sshdに対する監視を有効にするには、jail.d/01_enable.conf

[sshd]
enabled = true

という内容で作成する。

jail設定ファイルの書き方

[INCLUDES]では、他の設定ファイルをincludeする設定をするが、beforeで指定したファイルは事前に読みこみ、afterで指定した設定ファイルは後で読み込まれ、設定をオーバーライドする。

例えば、SlackBuildsのfail2banパッケージでは、jail.confでSlackwareの各ログファイルのパスを指定するpaths-slackware.confを読み込むようにしてある。

[INCLUDES]

#before = paths-distro.conf
before = paths-slackware.conf

paths-slackware.confpaths-slackware.confをオーバーライドしている。paths-slackware.confでは、

[INCLUDES]

before = paths-common.conf

after  = paths-overrides.local

paths-common.confを読み込んだ後paths-overrides.localでオーバーライドするようになっている。

[DEFAULT]でグローバル設定をする。

その他[*]の項目で、対応するフィルタ設定/etc/fail2ban/filter.d/*.confが読み込まれる。 例えば、[sshd]の項目は/etc/fail2ban/filter.d/sshd.confの設定でフィルタされるsshdに関する設定である。

  • bantime

bantimeは何秒間アクセスを禁止するか。

bantime  = 600
  • findtime

findtimeで指定された時間(秒)の間に次のmaxentryで指定される回数の認証失敗が起きるとアクセス禁止する。

findtime = 600
  • maxentry

maxentryで指定した回数をfindtimeで指定した時間内に認証失敗するとアクセス禁止にする。

maxentry = 5
  • enabled

trueで有効、falseで無効。デフォルトは無効。

  • action

action.d/*.confにあるactionの選択。デフォルトはiptables-multiport。

ログファイルのパスの指定

paths-common.confpaths-slackware.confのいずれにもsshdのログファイルのパスsshd_logが特に指定されていないので、paths-overrides.localを次のような内容で作る

[DEFAULT]
sshd_log = /var/log/messages

これでsshdに対して監視されることになる。

action設定の修正

ここではaction設定は詳細には触れないが、fail2banを実行するとiptablesを見つけられないというエラーが出たので、action.d/iptables-common.confの最後にあるiptablesの実際のコマンドを絶対パスで指定するよう編集した

iptables = /usr/sbin/iptables <lockingopt>

設定の確認

設定の確認を行なうには、

fail2ban-client -d

を実行する。実行すると、有効になっているjailの設定を格納したPythonのリストのダンプが出力されるようだ。

References