次の設定でfail2ban
を設定しました:
bantime = 86400
findtime = 600
maxretry = 2
これは、10分以内に3回ブルートフォースするIPをすべて停止するので、すばらしいです。ただし、30分ごとに試行するIPがあります。これらのIPをキャッチするために、設定を次のように変更しました。
bantime = 86400
findtime = 3600
maxretry = 2
現在は1時間ごとにチェックを行い、20〜30分ごとに試行していたIPの一部をキャッチしています。ただし、現在、私のVPSは、1時間にわたってブルートフォースを高レベルで強制される可能性のあるIPをキャッチしていません。
したがって、findtime = 3600
を設定し、fail2ban
を10分ごとにチェックする方法はありますか?
マイケルハンプトンがいくつかのコメントで述べたように、 reaction time は、fail2ban
がログをチェックする頻度であり、findtime
パラメーターとは関係ありません。 fail2ban
は、毎秒程度新しいログデータを読み取ることが期待されています(コンピューターの負荷によって異なりますが、ほとんどの場合、新しいログデータはまだカーネルバッファーのメモリにあるため、非常に高速です)。
findtime=...
は、ログをチェックする期間を定義します。フィルターは、now - findtime
とnow
の間の日付を持つ入力に対してチェックされます。フィルタがその期間内に一致したログのmaxretry
行以上を検出した場合(ignoreregex
にも一致するものはカウントしない)(now - findtime
からnow
)、次にban
アクションを発行します。
ancient past | past | ban | future
----------------+--*--*-*--*---*-+-------------------+------------->
| | |
| | +--> now + bantime
| +--> now
+--> now - findtime
タイムラインを示すグラフがあります。 ancient pastのログ部分は無視されます。 now - findtime
とnow
の間のログ、pastという名前のセクションが一致するかどうかがチェックされます。一致数(アスタリスクで表される)が>= maxretry
の場合、禁止はnow
で開始されます。禁止はnow + bantime
まで続きます。 IPが禁止された後、同じIPでヒットしても、禁止されたポートでは発生しないことに注意してください。ただし、他のポートでも発生する可能性があります。
したがって、findtime=...
を増やすことで反応時間に影響を与えることはありませんが、対応するフィルターによってIPが禁止される可能性が高くなります。
jail.conf
に刑務所を追加すると、誰が30分ごとに総当たり攻撃を行っているかを確認できます。動作する構成の例は次のとおりです。
[ssh] # first jail: check every 10 minutes
enabled = true
port = ssh
filter = sshd
action = %(action_)s
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
[fail2ban-ssh] # second jail: check every hour
enabled = true
filter = fail2ban-ssh
logpath = /var/log/fail2ban.log
action = iptables-multiport
maxretry = 3
findtime = 3600
bantime = 86400 # ban for a day
ファイルfail2ban-ssh.conf
を作成し、それをfilter.d
に入れて、希望するものに一致させます。次に例を示します。
[Definition]
failregex = fail2ban.actions: WARNING \[ssh\] Unban <Host>