fail2banとは
fail2banは大雑把に言うと
- ログを監視して連続ログインを試みたりログイン失敗が続いたりするものを検知
- ファイアウォールを調整して接続元からの不正アタックを遮断する
というもの。
ずいぶん昔の記事になりますが、旧マシンで使用していたUbuntu14.04の時にインストール・設定を行っていました。
Ubuntu14.04から削除されたDenyhostsに変わりfail2banをインストール
若干変わっているところもあるかもしれないので新しいマシンにインストール・設定を行っていきたいと思います。
fail2banのインストール
ターミナルを起動して以下の通り入力していきます。
# apt update
# apt install fail2ban
これでインストールは終了。あいかわらず簡単です。続いて設定に移ります。
fail2banの設定ファイル
主な設定ファイルは/etc/fail2banディレクトリ以下に配置されており、およそ以下の通り。
- fail2ban.conf:監視するログファイルのパスや警告レベルを定義
- filter.d/*.conf:アクセス違反とみなす動作を定義
- action.d/*.conf:アクセス違反が発生した際の対応を定義
- jail.d/default-debian.conf:起動時に監視対象とするデーモンを定義
- jail.conf:ブロックを発動する条件(アクセス頻度・時間など)を定義
それぞれの設定ファイルを読んでみるとなんとなくではありますが動作がわかるようなわからないような…
なお、設定を追加・変更したいときの注意点として
- アップデート時にjail.confがデフォルトのものに上書きされる場合がある
- jail.conf→jail.localの順に読み込まれるためlocalの設定が上書きで有効となる
ことから「cp jail.conf jail.local」でコピーを作成の上localの方を編集するのが望ましいようです。
fail2banの監視対象
例えばですが、fail2banはインストールした直後からSSHに対するを監視するようjail.d/default-debian.confで定義されています。
ログを見ているとpostfixに対する不正アクセスがメチャクチャ多くて気になるので追記してみます。
# vi /etc/fail2ban/jail.d/default-debian.conf
[sshd]
enabled = true
↓以下を追記
[postfix-sasl]
enabled = true
「:wq」で保存して終了
# systemctl restart fail2ban
最後にfail2banを再起動すると設定が有効化されます。「vi /var/log/fail2ban.log」と入力してログを確認すると
fail2ban.jail [201088]: INFO Jail 'sshd' started
fail2ban.jail [201088]: INFO Jail 'postfix-sasl' started
の2行が確認できます。これで監視が有効化されました。
実際にbanされたIPアドレスの確認と処理
コマンドで
# fail2ban-client status jail名(sshdやpostfix-saslなど)
と入力するとbanが作動した回数や現在ban中のIPアドレスを確認することができます。
例えば自分がログインに失敗して意図せずbanされてしまった時など手動で解除したいときは
# fail2ban-client set jail名 unbanip ***.***.***.***(IPアドレス)
と入力することでbanが解除され接続できるようになります。
各種動作を調整する
デフォルトではjail.confにより
- findtime(=10分)の間で
- maxretry(=5回)分の異常を検知すると
- bantime(=10分)の間接続を拒否する
という動作に設定されています。しかしログを眺めてみると
- 一定の間隔をあけてアクセスしてくる⇒banされないタイミングで攻撃する
- banが解除されたら即不正アタックを再開する⇒ただひたすら鬱陶しい
という現象が確認されますので設定を調整してみます。内容は以下の通り。
- 30分間で3回アクセス失敗したら1時間ban
- 6時間で3回banされたIPは永久に接続拒否
早速設定を行います。
# vi /etc/fail2ban/jail.local
101行目以下の値を修正
bantime = 1h
findtime = 30m
maxretry = 3
815行目の[recideve]以下を修正
bantime=-1(永久に拒否)
findtime=6h
:wqで保存して終了
# vi /etc/fail2ban/jail.d/defaults-debian.conf
以下を追記
[recidive]
enabled = true
:wqで保存して終了
# systemctl restart fail2ban
fail2banを再起動して完了です。
[recidive]ディレクティブはfail2ban.logを監視して、一定の期間内でbanを繰り返すIPに対する動作を定義しています。ここではbantimeに負の数を入力することで永久banが働くことになります。
まとめ
サーバ機を入れ替えてから疎かになっていた?不正アタック対策としてfail2banを導入してみました。内容をざっくりとまとめると
- 各種ログを監視し、設定に該当するIPアドレスを接続拒否する
- banまでの条件は変更が可能
- 繰り返しbanを喰らうようなクソIPは更に重い対処も可能
- メールでの通知も可能(今回はおこなってませんが)
といったところでしょうか。
これでしばらくログを監視しつつ、更なる不正アタックがあれば改めて対処したいと思います。