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

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

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

  1. ​启用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_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 <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补充)

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

    复制代码
    # 仅开放必要端口(如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
  2. ​分离内外网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未生效​​ → 检查:

    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