以下是针对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高级管理命令
命令 | 作用 |
---|---|
fail2ban-client unbanip <IP> |
手动解封IP |
fail2ban-client set freeswitch banip <IP> |
手动封禁IP |
tail -f /var/log/fail2ban.log |
实时监控封禁记录 |
🔧 四、常见问题排查
-
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