以下是针对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