為 Named 建立 Fail2ban 規則

為 Named 建立 Fail2ban 規則

當我試圖為 Fail2ban 創建一條規則時,我似乎已經錯過了很長一段時間,因為我對過去感到非常緊張,我也願意將其提交給世界:-)

做了什麼?

  1. 已經在fail2ban/filter/named-antispam.conf下方建立了一個文件

  2. 用內容創建它
    #cat filter.d/named-antispam.conf
    [Definition]
    prefregex = ([a-zA-Z][a-zA-Z][a-zA-Z])\s([0-9]|[0-9][0-9])\s([0-9][0-9]):([0-9][0-9]:[0-9][0-9])
    failregex = ^rate limit drop all response to <HOST>$

和監獄.conf

#Disabled for Writing this Articel
[named-antispam]
enabled = false
filter = named-antispam
logpath  = /var/log/named/rate.log
bantime      = 2628000
maxretry     = 30
findtime     = 60
  1. 檢查如果我啟用它並將其設置為調試,fail2ban 會發生什麼?

2021-01-26 11:25:19,461 fail2ban.filterpyinotify[14180]: DEBUG   Event queue size: 16
2021-01-26 11:25:19,462 fail2ban.filterpyinotify[14180]: DEBUG   <_RawEvent cookie=0 mask=0x2 name='' wd=2 >

如果我禁用該規則,我可以設置調試而不會出現該錯誤 - 所以在我看來,我遇到了某種我無法弄清楚的錯誤,這就是我在這裡詢問的原因。在結尾 - 是的,我的日誌中有很多條目,但fail2ban並不關心

答案1

您基本上沒有提供問題是什麼,而且既沒有提供您想要在過濾器中捕獲的消息的日誌摘錄,也沒有嘗試使用fail2ban-regex -v過濾器找到什麼。

我猜這則訊息看起來像:

Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24

然後這裡有兩件事需要注意 - 首先 IP 位於客戶端之後(這裡192.0.2.100),最後它有一個子網路(IP/CIDR 表示法,此處192.0.2.0/24)。

如果您想禁止子網路(如果您的fail2ban和選擇的banaction完全能夠禁止子網路),您可以根據您的版本使用:

要嘛這個(如果你的fail2ban支援<SUBNET>):

failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>

或這個:

failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)

您也可以禁止 IP 而不是子網,然後使用以下其中之一:

failregex = ^\s*\S+\s+named(?:\[\d+\])?: client <ADDR>[^:]*: rate limit drop all response

您也可以使用 檢查它fail2ban-regex,例如:

msg='Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24'
fail2ban-regex "$msg" '^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>'
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed

或使用日誌檔案測試過濾器:

fail2ban-regex /var/log/named/rate.log named-antispam

至於你的prefregexfailregex- 他們只是不正確。 prefregex 和 failureregex 都不能包含時間戳相符的部分datepattern(請閱讀我們的操作方法維基百科或者手動的, 它包含了: 注意:failregex將應用於prefregex處理後訊息的剩餘部分(如果指定),這又在處理後發生datepattern(其中時間戳字串與最佳模式匹配,從訊息中刪除)。

也是prefregex有道理的,如果你需要一些預過濾,例如你有多個failregex(並且這樣的正則表達式將應用於行的整個部分,或者如果指定的話,應用於包含在<F-CONTENT>和之間的部分匹配RE。如果沒有預先過濾</F-CONTENT>預期的,prefregex就沒有什麼意義。

無論如何,如果您出於某種原因需要它,它看起來像這樣:

prefregex = ^\s*\S+\s+named(?:\[\d+\])?: <F-CONTENT>.+</F-CONTENT>$ 

failregex = ^[^:]+: rate limit drop all response to <SUBNET>
#failregex = ^[^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
#failregex = ^client <ADDR>[^:]*: rate limit drop all response

相關內容