以下是針對FreeSWITCH配置IP封禁(防暴力破解)的完整方案,結合Fail2Ban與系統級防護策略:
一、Fail2Ban核心配置(推薦方案)
??啟用FreeSWITCH鑒權日志??
修改SIP Profile(
conf/sip_profiles/internal.xml
),添加參數:<param name="log-auth-failures" value="true"/>
或在XSwitch網頁端:
高級
→?SIP
→ 添加log-auth-failures=true
重啟服務:
fs_cli -x "reloadxml"
。
? ? ?
安裝Fail2Ban??
# Ubuntu/Debian sudo apt install fail2ban # CentOS sudo yum install epel-release # CentOS sudo yum install fail2ban
??配置Jail規則??
創建?
/etc/fail2ban/jail.d/freeswitch.conf
:[freeswitch] enabled = true port = 5060,5061,5080 # SIP端口(按需修改) filter = freeswitch logpath = /usr/local/freeswitch/log/freeswitch.log # 日志路徑校對 maxretry = 5 # 5次失敗觸發封禁 bantime = 1d # 封禁1天 findtime = 10m # 10分鐘內統計 action = %(banaction)s[name=%(__name__)s-tcp, protocol="tcp"] %(banaction)s[name=%(__name__)s-udp, protocol="udp"]
??關鍵??:端口需對齊FreeSWITCH的
。internal_sip_port
/external_sip_port
(vars.xml
中定義)??調整日志過濾規則??
修改?
/etc/fail2ban/filter.d/freeswitch.conf
,適配FreeSWITCH ≥1.10的日志格式(含CPU占用率字段):failregex = ^%(_pref_line)s \d+\.?\d+%% \[WARNING\] sofia_reg\.c:\d+ SIP auth (failure|challenge) .* from ip <HOST>$ ^%(_pref_line)s \d+\.?\d+%% \[WARNING\] sofia_reg\.c:\d+ Can't find user .* from <HOST>$
??驗證正則有效性??:
fail2ban-regex /path/to/freeswitch.log /etc/fail2ban/filter.d/freeswitch.conf --print-all-matched
需輸出匹配的IP日志行
??重啟Fail2Ban生效??
sudo systemctl restart fail2ban sudo fail2ban-client status freeswitch # 查看封禁狀態
二、網絡層加固(Fail2Ban補充)
防火墻端口最小化開放??
# 僅開放必要端口(如SIP/TLS/RTP) sudo ufw allow proto tcp from <信任IP> to any port 5060,5061,5080 sudo ufw allow proto udp from <信任IP> to any port 10000:20000 # RTP端口范圍 sudo ufw enable
??分離內外網SIP Profile??
在
vars.xml
中顯式聲明IP,避免auto
綁定導致公網暴露:<!-- 內網Profile --> <X-PRE-PROCESS cmd="set" data="internal_sip_ip=192.168.1.100"/><!-- 公網Profile --> <X-PRE-PROCESS cmd="set" data="external_sip_ip=203.0.113.10"/>
并在
。sip_profiles/
中分拆配置
三、Fail2Ban高級管理命令
??命令?? | ??作用?? |
---|---|
| 手動解封IP |
| 手動封禁IP |
| 實時監控封禁記錄 |
🔧 四、常見問題排查
??Fail2Ban未生效?? → 檢查:
FreeSWITCH日志是否輸出
SIP auth failure
(無記錄則檢查log-auth-failures
)Fail2Ban正則是否匹配日志格式(用
fail2ban-regex
調試)防火墻是否被Fail2Ban調用(如UFW/iptables需允許Fail2Ban操作)
??內網設備誤封?? → 在
jail.d/freeswitch.conf
添加:ignoreip = 192.168.0.0/16 10.0.0.0/8
?