
當我試圖為 Fail2ban 創建一條規則時,我似乎已經錯過了很長一段時間,因為我對過去感到非常緊張,我也願意將其提交給世界:-)
做了什麼?
- 已經在fail2ban/filter/named-antispam.conf下方建立了一個文件
- 用內容創建它
#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
- 檢查如果我啟用它並將其設置為調試,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
至於你的prefregex
和failregex
- 他們只是不正確。 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