昨日設定したfailbanとの連携。ufw.aggressive。
結論から言うと「あまりにも閾値が低すぎて自分自身がロックアウトを喰らう」結果になりました。
何が起きたのか?
自分のIPからのアクセスが全てのサービスにつながらなくなった。
これはSSH接続はのみならずWeb閲覧でも弾かれるを意味します。
取り急ぎ、「確実にignoreipされている」場所からアクセスし、
sudo fail2ban-client status ufw
をしたところ、ものの見事にアクセスしていたIPアドレスが含まれています。
そのため、
sudo fail2ban-client set ufw unbaip IPアドレス
として条件を解除。
そんな中で見つけた挙動。Redminetneは比較的単純な通信が発生するため、
[ufw]
enabled = true
filter = ufw-aggressive
action = iptables-allports
logpath = /var/log/ufw.log
maxretry = 1
bantime = -1
# ignoreipには、自分自身のローカルホストと、巻き添えを防ぎたい大手検索エンジン(Googlebotなど)のIP帯を指定します
では、大量のretryが発生し、fail2banはご丁寧に「こいつは大量アクセスを繰り返している」としてban。更に、当然ながら、iptables-allportsが含まれているため、自分自身が締め出しを食らったという次第。
対処
「閾値の緩和」に尽きます。「人間の通常の作業は問題ないがbotが引っかかる」を目安に修正しました。この時の注意点は 対象サイトに過度にアクセスしないことに尽きます。iptablesと手を組んでいる以上、無効の怒りを買わないよう、接続はSSHのみにとどめます。
修正ファイル /etc/fail2ban/jail.local
[ufw]
enabled = true
filter = ufw-aggressive
action = iptables-allports
logpath = /var/log/ufw.log
# ↓ 1 から 30 〜 50 程度に大幅緩和(ボットは防げて人間は誤検知しない絶妙なライン)
maxretry = 50
# ↓ 10分〜15分(600〜900秒)の間に規定回数叩いたらアウトにする
findtime = 900
bantime = -1
# ignoreipは、自分が今アクセスしているIPを真っ先に入れます
ignoreip = 127.0.0.0/8 ::1
設定後、
sudo fail2ban-client reload
を実行して設定完了。
設定終わって
- Growi
- Nextcloud
を操作して通常通りの作業が行えることを確認。
まとめ
今回、慌てずに作業できていたのが「どこからアクセスすれば安全か」を知っていたこと。
「頑固で融通が利かない門番」
を意図通りに動かすためには、門番が動く条件をきちっと動かす必要があるというお話でした。