> 技术文档 > FreeSWITCH配置文件解析(10) 配置IP封禁(防暴力破解)

FreeSWITCH配置文件解析(10) 配置IP封禁(防暴力破解)

以下是针对FreeSWITCH配置IP封禁(防暴力破解)的完整方案,结合Fail2Ban与系统级防护策略:

一、Fail2Ban核心配置(推荐方案)

  1. ​启用FreeSWITCH鉴权日志

    • 修改SIP Profile(conf/sip_profiles/internal.xml),添加参数:

    • 或在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_portvars.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 $ ^%(_pref_line)s \\d+\\.?\\d+%% \\[WARNING\\] sofia_reg\\.c:\\d+ Can\'t find user .* from $

    ​验证正则有效性​​:

    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补充)

  1. 防火墙端口最小化开放​

    # 仅开放必要端口(如SIP/TLS/RTP) sudo ufw allow proto tcp from  to any port 5060,5061,5080 sudo ufw allow proto udp from  to any port 10000:20000 # RTP端口范围 sudo ufw enable
  2. ​分离内外网SIP Profile​

    vars.xml中显式声明IP,避免auto绑定导致公网暴露:

       

    并在sip_profiles/中分拆配置


三、Fail2Ban高级管理命令

​命令​

​作用​

fail2ban-client unbanip

手动解封IP

fail2ban-client set freeswitch banip

手动封禁IP

tail -f /var/log/fail2ban.log

实时监控封禁记录


🔧 四、常见问题排查

  • ​Fail2Ban未生效​​ → 检查:

    1. FreeSWITCH日志是否输出SIP auth failure(无记录则检查log-auth-failures

    2. Fail2Ban正则是否匹配日志格式(用fail2ban-regex调试)

    3. 防火墙是否被Fail2Ban调用(如UFW/iptables需允许Fail2Ban操作)

  • ​内网设备误封​​ → 在jail.d/freeswitch.conf添加:

    ignoreip = 192.168.0.0/16 10.0.0.0/8