web-dev-qa-db-ja.com

fail2banを使用してn回再試行した後の永続的なIPブロック

Fail2banを以下のように構成しました:

  • 3回失敗した後にIPをブロックする
  • 300秒のタイムアウト後にIPを解放する

これは完全に機能し、有効なユーザーがタイムアウト後にログインを再試行する機会を得られるように、この方法を維持したいと考えています。ここで、同じIPが攻撃として検出されてブロックされ、5回ブロック解除された場合、IPを永続的にブロックし、二度とブロック解除しないというルールを実装したいと思います。 fail2banだけでこれを達成できますか、それを行うために独自のスクリプトを記述する必要がありますか?

私はセントースでこれをやっています。

39
BTR Naidu

0.11より前のバージョンでは、これを実現するための デフォルト機能やfail2ban内の設定はありません がありました。しかし、次の0.11リリース以降、禁止期間は 自動計算 であり、新しい違反ごとに指数関数的に増加します。長期的には、多かれ少なかれ永続的なブロックを意味します。

それまでは、おそらく fail2banで独自のログファイルを監視する を設定するのが最善の方法です。これは2段階のプロセスです...

ステップ1

フィルターを作成する必要があるかもしれません[〜#〜] ban [〜#〜]がログファイルにある(fail2banのログファイル)

ステップ2

次のように、刑務所を定義する必要があります...

 [fail2ban] 
 enabled = true 
 filter = fail2ban 
 action = iptables-allports [name = fail2ban] 
 logpath =/path/to /fail2ban.log
# findtime:1日
 findtime = 86400 
#bantime:1年
 bantime = 31536000 

技術的には、それは永続的なブロックではありませんが、1年間のブロックのみです(これも増やすことができます)。

とにかく、あなたの質問のために(これはfail2banだけで達成できますか、それを行うために自分のスクリプトを書く必要がありますか?)...自分のスクリプトを書くことはうまくいくかもしれません。 頻繁に禁止されたIPを抽出するスクリプトを設定し、それらを/etc/hosts.denyがおすすめです。

33
Pothi Kalimuthu

bantime = -1その構成セクションでは、永続的なブロックです。

31
J. Chin

Phil Hagenはこの問題について優れた記事を書いています。 「 fail2banでリピーターを永久に禁止する 」。

彼の提案はPothiと同じですが、段階的なガイドを提供します。

これには以下が含まれます:

  • 刑務所別の禁止リスト(ip.blocklist.ssh、ip.blocklist.xxx)
  • サービスが再起動した場合に自動ロードされるリストをリストします(このメソッドimhoの主な利点)
  • リピーターが従事している場合の電子メール通知。
14
xaa

Chinの答えを拡張すると、これは非常に簡単です。 /etc/fail2ban/jail.localの2つの設定を編集して、好みに合わせます。

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
6
Casey Watson

fail2banはすでに、受刑を禁止する刑務所を持っています。見るなら/etc/fail2ban/jail.conf、見つかります:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Jail.localに追加する方法は?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

あなたができるログレベルをチェックするために:fail2ban-client get loglevel

  • set loglevel MYLEVEL:ロギングレベルをMYLEVELに設定します。レベル:CRITICAL、ERROR、WARNING、NOTICE、INFO、DEBUG
  • 詳細 wikiのコマンド

古いバージョンのfail2banでは、 このバグ を取得できます。

5
A-312

Vimに移動し、/ etc/fail2ban/jail.confを開きます

fail2ban service restartの後に変更するだけです。

# "bantime" is the number of seconds that a Host is banned.
bantime  = ***1296000***

# A Host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a Host get banned.
maxretry = ***3***
0
Tanveer Ahmad