原文链接 http://www.ddrj.com/callcenter/fail2ban.html
运行在公网的FreeSWITCH服务器,每天都会接收到很多恶意的呼叫请求和注册请求,尝试盗打电话。合理的配置可以防止电话给倒打,但是每天大量的攻击,会让FS产生很多日志,降低FreeSWITCH的处理能力,cti模块结合fail2ban可以把恶意IP,使用防火墙封堵掉。
非常重要的,不要开通国际长途。其次对于呼出拨号方案和呼入路由要小心配置。
建议external可以设置成只有指定的IP才可以呼入,设置方法如下
<list name="inbound" default="deny"> <node type="allow" cidr="允许呼入的IP1/32"/> <node type="allow" cidr="允许呼入的IP2/32"/> </list>
cti 模块发现注册失败或者 不规范的SIP报文,或者被叫号码不符合cti.json配置的规范,就写入日志到cti_fail2ban.log,fail2ban通过监视日志把恶意IP加入防火墙,封堵恶意IP。
cti.json 配置被叫号码规范
"fail2ban": {
"filename": "cti_fail2ban.log",
"destination_number_max_len": 12,
"deny_prefix": ["00", "+"],
"allow_prefix": []
}
以下是安装和配置fail2ban的过程。如果不安装fail2ban,只配置cti.json的规则,只能挂断不符合规范的呼叫,不能杜绝攻击,需要安装配置好fail2ban,把非法Ip加入防火墙黑名单。
为了防止开发测试过程误触发屏蔽规则,导致开发机器连接不上服务器,建议把开发电脑的外网IP加入白名单。
yum install fail2ban -y
cd /etc/fail2ban
mv jail.conf jail.conf.local
vi jail.conf
把以下内容写如 jail.conf
[cti]
enabled = true
filter = cti
action = iptables-allports[name=cti, protocol=all]
logpath = /fs/var/log/freeswitch/cti_fail2ban.log
bantime = 86400
maxretry = 5
findtime = 180
ignoreip = 127.0.0.1/8 192.168.0.0/16 10.0.0.0/8 172.16.0.0/16
backend = auto
配置说明:
给/fs/var/log/freeswitch/目录修改安全上下文
chcon -R -t var_log_t /fs/var/log/freeswitch
也可以直接关闭sulinux,如果不修改安全上下文,会导致fail2ban启动失败
vi /etc/fail2ban/filter.d/cti.conf
把以下内容写入 /etc/fail2ban/filter.d/cti.conf
[Definition]
failregex = ^ip[].*
ignoreregex =
systemctl enable fail2ban
systemctl start fail2ban
systemctl status fail2ban
fail2ban-client status cti
fail2ban-client set cti banip IP地址
fail2ban-client set cti unbanip IP地址
fail2ban-client set cti addignoreip IP地址
fail2ban-client set cti delignoreip IP地址
iptables -L -n