概要
BAN回数に応じてBAN期間を延長するfail2banの bantime.increment
機能と関連オプションについてのメモ。
当該機能を標準設定のまま有効にした場合、BAN条件毎のBAN期間を各条件におけるBAN回数に応じて$2^{n}$倍する。n
は BAN回数-1
で最大$2^{20}$倍。
オプション
jail.local
または jail.conf
の [DEFAULT]
セクションで設定する。
bantime.increment
機能を有効にするかどうか。
-
true
: 有効 -
false
: 無効(標準)
bantime.rndtime
最終的なBAN期間に追加されるランダムな秒数の上限。攻撃者が設定を推測してBANを回避することを抑止するための機能。
- 秒数を指定する
- 後述の「期間の指定方法」も使用可
- 0~100%の間でランダムに追加される
- 標準: 無効
bantime.maxtime
BAN期間の上限。bantime.formula
等によるBAN期間の計算が行われた後、この値を超えているとこの値に丸められ、続いて bantime.rndtime
の処理が行われる。
- 秒数を指定する
- 後述の「期間の指定方法」も使用可
- 標準: 無制限
bantime.factor
bantime.formula
ないし bantime.multipliers
によるBAN期間の計算に使用される値。
- 標準:
1
-
bantime.formula
を使用する場合は式の中で自由に使用できる -
bantime.multipliers
を使用する場合はこの値による乗算が加わる
bantime.formula
BAN期間の計算式をPythonの記法で指定する。
- 標準:
ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
- BAN期間をBAN回数に応じて$2^{n}$倍(
n = BAN回数-1
で最大20)した値とbantimer.factor
の積 -
<<
は左シフト(2進数として末尾に0を追加する)
- BAN期間をBAN回数に応じて$2^{n}$倍(
-
bantime.multipliers
とは排他利用(multipliersが優先される)
式で利用できる値は以下の通り。
-
ban.Time
: BAN条件の標準のBAN期間 -
ban.Count
: BAN回数(初期値は0
っぽい?) -
banFactor
:bantime.factor
の値
数学関数なども使用できるため自由度は高い。jail.conf
のコメントでは math.exp()
を使用して標準設定と同じ値を出力する例が紹介されている。
bantime.multipliers
BAN回数毎の倍率を個別に指定する。
- 任意の個数の倍率(数値)を半角スペースで区切って記述する
- BAN回数が指定した倍率の個数を超える場合は最後に指定した倍率が使用される
-
bantime.factor
で乗算される - 標準: 無効
-
bantime.formula
とは排他利用(formulaより優先される)
# BAN回数に応じて1倍, 2倍, 4倍~と増加し、7回目以降は64倍
bantime.multipliers = 1 2 4 8 16 32 64
# BAN期間が60秒の場合、BAN回数に応じて
# 1分, 5分, 30分, 1時間, 5時間, 12時間, 1日, 2日(以降2日固定)となる
bantime.multipliers = 1 5 30 60 300 720 1440 2880
bantime.overalljails
BAN回数のカウント条件を指定する。
-
false
: 各BAN条件毎にBAN回数をカウントする(標準) -
true
: 全てのBAN条件のBAN回数を合計してカウントする- 異なるBAN期間のBAN設定が混在している場合は意図通りに動作するか注意すること
Tips
期間の指定方法
整数による秒数指定以外に単位での指定と基本的な演算子が使用できる。(恐らく2016年頃以降のバージョンで有効)
例えば以下のような単位指定が使用できる。
- 日:
d
dd
- 週:
w
ww
- 月:
mo
mon
-
m
だと分になる - 30.4375日
-
- 年:
y
yy
- 365.25日
- 秒:
s
ss
- 分:
m
mm
- 時:
h
hh
詳細はソースの MyTime.str2seconds
付近を参照のこと。