fail2banとは、不正なアクセスがあった場合にアクセスを制限するセキュリティソフトウェアです。ufwは、iptable等よりも簡単に許可されてないポートへのアクセスをブロックするファイアウォールの一種です。この記事では、ufwが防いだIPについても、fail2banでアクセス制限するように設定する方法を記載します。
前提
OSのバージョン
Ubuntu 22.04.1 LTS で作業しています。
ufwとfail2banをインストール・設定
いろいろ日本語の記事があるので省略します。
ufwのログが正しく記録されていることを確認
ufwでブロックしたログ([UFW BLOCK]と書かれている行)の「SRC=」以降に、きちんと外部のIPが記録されている事が必要です。
※ネットワーク内に設置されたサーバの場合は、これがネットワーク内のローカルIP(全部同じIP)になっていることがあって、以下の手順を行うとサーバから締め出されてしまうことがあるので必ず確認してください。
手順(ルート権限で行います)
(1)フィルターファイルを作る
/etc/fail2ban/filter.d/ufw.conf をテキストエディタで開いて、フィルターファイルを作成します。パーミッションは644で。
[INCLUDES]
before = common.conf
[Definition]
failregex = UFW BLOCK.* SRC=<HOST> DST
ignoreregex =
(2)フィルターを有効にして設定する
/etc/fail2ban/jail.local をテキストエディタで開いて、フィルターを有効にします。下記の内容を追記します。
[ufw]
enabled = true
filter = ufw
action = iptables-allports
logpath = /var/log/ufw.log
bantime = -1
findtime = 3d
maxretry = 1
ignoreip = 127.0.0.0/8 ::1設定内容を日本語で書くと以下の通りです。
- filter名は ufw
- 全てのポートをブロック
- logファイルの場所は /var/log/ufw.log (ufwを改造してログを別の場所に保存している場合は適宜変更が必要です。)
- ban(アクセス拒否)する時間: -1 (無限)
- 検索期間は3日間
- アクセス拒否する回数は1回(ufwでブロックされた時点で即座にアクセス拒否でいいと思う)
- ローカルホストからのアクセスは除外(ブロックしない)
※OSやfail2banが古いバージョンの場合は、時間を「3d」などではなく秒数「259200」で書いた方がいいかもしれません。
(3)サービスを再起動します
下記コマンドで fail2ban を再起動します。(場合によっては結構時間かかるかも)
service fail2ban restart確認方法
まずは、ルート権限で service fail2ban status とタイプして、fail2ban の起動状態を確認します。
service fail2ban statusこんな感じで、ErrorとかWarningが無ければOKです。

また、もし /var/log/ufw.log に既にログが入っていたら、 /var/log/fail2ban.log に[ufw]という行が追記されていると思います。

以上で作業は完了です。
