web-dev-qa-db-ja.com

CentOS6.5のFail2Banは禁止しない

環境:* CentOS 6.5 * Fail2Ban 0.8.14-1 * dateは正しい日付を出力します

動作:Fail2banは正常に起動しますが、不正なSSHログイン試行後にiptablesブロックを作成しません。現時点では、SSHのみに関心があります。このガイドを使用して再インストールを試みました: https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-6

Fail2Banは以前は機能していましたが、システムの更新により機能しなくなったようです。走ったら

Sudo service fail2ban restart

刑務所が停止したことを示すメールと刑務所が開始したことを示す別のメールが届くので、fail2banが実行中で機能しているようです。

/etc/fail2ban/jail.localファイルには次のエントリが含まれています。

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
       sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"]
logpath  = /var/log/secure
maxretry = 5

私のIPアドレスはignoreipdelcarationにリストされていません。標準のbantime600、findtime 600、maxretry3を使用しています。

/ var/log/secureを見ると、失敗した試行がたくさんあります。

Sep 30 00:17:02 nebo unix_chkpwd[3796]: password check failed for user (root)
Sep 30 00:17:02 nebo sshd[3794]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.173.26.189  user=root

iptables -Lはfail2banにチェーンがあると報告しているようです:

Chain fail2ban-SSH (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

私の現在の最良のゲストは、actions.d/sshd.confのsshdのアクションが正規表現を使用してログファイルを調べていることですが、禁止された試行のCentOSログの現在の構文と一致しません。

時間は次のように非同期です: fail2banが失敗をブロックしないのはなぜですか?

Fail2ban-regexを実行して私の理論をテストしましたが、正しい方向に進んでいるようです。

[isdept@nebo action.d]$ Sudo fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf 

Running tests
=============

Use   failregex file : /etc/fail2ban/filter.d/sshd.conf
Use         log file : /var/log/secure


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [22655] MONTH Day Hour:Minute:Second
`-

Lines: 22655 lines, 0 ignored, 0 matched, 22655 missed
Missed line(s): too many to print.  Use --print-all-missed to print all 22655 lines

これを修正するために正規表現パターンを変更する方法が完全にはわかりませんが(これが問題である場合)、CentOSが一般的であるため、簡単な修正が見つからないことに驚いています。追加情報を提供させていただきます。あなたが与えることができるヒントやポインタをありがとう!

安全のために-私は現在、このホストへのパブリックアクセスを無効にしています。

4
SteadH

ええと、私は正規表現のマスター(または初心者)ではありませんが、次のように追加することで、なんとか機能させることができました。

^.*authentication failure;.*rhost=<Host>

フィルタ.d/sshd.confに。これはそれを行い、私は私の最初のホストを首尾よく禁止しました。正規表現の専門家が参加したいのであれば、私は非常に感謝しています。この短い表現に欠けている場合があり、特定の場合には失敗することは間違いありません。

ありがとう!

3
SteadH

@SteadH最初の投稿には、次のようなものがあります。

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
       sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"]
logpath  = /var/log/secure
maxretry = 5

[ssh-iptables]:フィルター名/参照であり、

filter = sshd:/ filter.d(sshd.conf)内の正規表現フィルターを含むファイルです

次に、sshd-iptables.confを編集している最後の投稿は? sshd.confでfail2ban-regexチェックを行いましたか?どのファイルを使用していますか?どちらが存在するか、または両方が存在するか。私は正規表現パターンであなたを助けることができますが、私は私が一致する正しいパターンを見ていることを確認する必要があります。

2
devatnull

私は今日、centos6.5でも同じ問題に取り組んでいます。

私の場合、ディストリビューションファイルの名前はfilters.d/sshd.confであり、書いたフィルター.d/sshd-iptables.confではありません。なぜあなたと私のものが違うのかわからない。しかし、いずれにせよ、私は問題が同じであると信じています。

私のsecure.logからのエントリの例はこれです:

Oct 11 11:11:11 myhostname sshd[12345]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=1.2.3.4

ディストリビューションfilters.d/sshd.confで最も一致するfailregexは次のとおりです。

^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <Host>( via \S+)?\s*$

"from"および "via"文字列と "rhost ="文字列がないため、上記の例とは明らかに一致しません。これを修正するための私の試みを以下に示します。

  • 最初のmod、一致しませんでした:

    ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error); .* rhost=<Host> .*$
    
  • 2番目のmod、一致しませんでした:

    ^%(__prefix_line)[aA]uthentication (?:failure|error); .* rhost=<Host> .*$
    
  • 3番目のmod、一致:

    [aA]uthentication (?:failure|error); .* rhost=<Host> .*$
    

__prefix_line regex部分式は、filters.d/common.confから取得され、既知のLinuxログエントリプレフィックス形式の可能なすべての順列を照合しようとする優れた試みですが、残念ながら、特定のcentos 6.5の状況に合わせて調整する必要があります。私はそれをクラックするかもしれませんが、common.confの正規表現を一目見ただけで頭が痛くなります。 __prefix_lineのないそれほど複雑でない正規表現で十分な場合があります。

1
user247671

@SteadHはあなたのソリューションに基づいて、問題の根本を発見しました。一部の正規表現では、sshdフィルターはすべて行末に一致する「$」(ドル)で終わります(修正が行われなかったことに気づきました)。さて、私はドルとビオラを削除しました!それは働き始めました!この内臓のどこかに誤った構成があり、「$」が機能しない可能性があると思います。いずれにせよ、その修正を試してください。

0
Marc Lindahl