2026年8月10日 星期一

使用 fail2ban 防禦惡意程式攻擊 (FreeBSD)

 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


沒有留言:

張貼留言