1.安裝程式
pkg install py312-fail2ban
2.設定開啟啟動
sysrc fail2ban_enable="YES" 設定開機自動啟動。
3.修改設定檔
ee /usr/local/etc/fail2ban/jail.local
4.設定檔建議內容
[DEFAULT]
# 1. 填入自己的常用 IP,避免自己被鎖在門外
ignoreip = 127.0.0.1/8 ::1 你的常用IP
# 2. 讓 Fail2ban 透過 FreeBSD 的 ipfw 來執行封鎖
banaction = bsd-ipfw
banaction_allports = bsd-ipfw
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
# 3. 啟用 SSH 防護並對準你的自定義日誌路徑
enabled = true
logpath = /www/log/auth.log
port = 22
failregex = sshd(?:-session)?\[\d+\]:.*(?:Failed password|Invalid user).*from <HOST>
5.設定完畢後重啟
service fail2ban restart
【常用指令】
1.即時查看目前被封鎖了誰
fail2ban-client status sshd
fail2ban-client status apache-scan #這個是自定義來掃appache的
2.手動解除封鎖(Unban)
fail2ban-client set sshd unbanip 欲解封的IP地址
3.手動強制封鎖(Ban)
fail2ban-client set sshd banip 欲封鎖的IP地址
【封鎖掃網頁機器人】
1.建立自定義的 Filter(過濾器)
ee /usr/local/etc/fail2ban/filter.d/apache-scan.local
2.把以下內容貼上並存檔:
[Definition]
# 專門抓取 client IP 後面帶有大量檔案找不到、或企圖用目錄穿越 (..%2e) 進行攻擊的紀錄
failregex = ^\[[^\]]+\] \[[^\]]+\] \[[^\]]+\] \[client <HOST>:\d+\] (?:script '.*' not found or unable to stat|AH10244: invalid URI path)
ignoreregex =
3.在 jail.local 中加入新的封鎖規則
ee /usr/local/etc/fail2ban/jail.local
4.加入以下設定
[apache-scan]
enabled = true
port = http,https
filter = apache-scan
logpath = /您的網站錯誤日誌路徑/httpd-error.log
maxretry = 5
findtime = 5m
bantime = 24h
banaction = bsd-ipfw
5.修改核心檔案 (如果你不想只鎖特定port的話,再改)
ee /usr/local/etc/fail2ban/action.d/bsd-ipfw.conf
找到 ipfw -q add "$num" <blocktype> <block> from table\(<table>\) to me <port>;
改成 ipfw -q add "$num" <blocktype> <block> from table\(<table>\) to me;
把port拿掉 這樣才能設定封鎖全部的port