mod_cti安全加强
# 功能介绍
FreeSWITCH暴露在公网最大的风险就是被盗打,所以我们这次针对sofia配置和分机配置的安全性,做个一次升级:
- sofia安全性:
internal
强制要求勾选auth-calls
。external
的apply-inbound-acl
参数不允许为空。external
的呼叫路由
参数不允许选择internal
或者default
。
- 分机安全性:
- 分机密码需要足够复杂。
# 升级mod_cti版本
mod_cti新增防盗打功能,只有将mod_cti升级到最新的版本,才支持该功能。
执行 mod_cti 升级命令:
sudo curl -s http://down.ddrj.com/upgrade.sh | sudo bash -s mod_cti
升级完成后,重启freeswitch程序。
查看版本命令:
fs_cli -x "cti status"
执行命令:
fs_cli -x "sofia status"
,查看sofia_profile加载情况。如果有部分sofia_profile没有加载出来,跳转到sofia安全性加强
,找出解决方法;如果全部的sofia_profile加载出来了,可以跳过sofia安全性加强
。
# sofia安全性加强
以
internal
开头的sip配置,例:internal1
、internal2
等。强制要求勾选auth_calls
参数。如果未按要求配置,前台启动freeswitch时,启动日志中出现报错:
2024-12-03 15:37:35.491271 0.00% [ERR] cti_gui.c:406 sofia_profile:internal auth-calls not true refuse load
1解决方法:CCAdmin-web->呼叫中心->sip设置 页面中,将所有以
internal
开头的sip配置,勾选上auth_calls
参数。然后重新启动freeswitch程序。
external
sip配置强制要求设置apply-inbound-acl
参数,不能为空。如果未按要求配置,前台启动freeswitch时,启动日志中出现报错:
2024-12-03 15:41:00.266846 0.00% [ERR] cti_gui.c:416 sofia_profile:external apply-inbound-acl is empty refuse load
1解决方法:CCAdmin-web->呼叫中心->sip设置 页面中,找到
external
sip配置中的apply-inbound-acl
参数,设置inbound
。然后重新启动freeswitch程序。
external
sip配置中,呼叫路由
参数不允许选择internal
或者default
。如果未按要求配置,前台启动freeswitch时,启动日志中出现报错:
2024-12-03 15:37:35.491279 0.00% [ERR] cti_gui.c:422 sofia_profile:external context:internal refuse load 或者 2024-12-03 15:37:35.491279 0.00% [ERR] cti_gui.c:422 sofia_profile:external context:default refuse load
1
2
3解决方法:CCAdmin-web->呼叫中心->sip设置 页面中,找到
external
sip配置中的呼叫路由
参数,选择external
。然后重新启动freeswitch程序。
# 分机安全性增强
# cti.json配置
mod_cti 版本升级完成后,默认生效以下配置,无需配置:
"password_minimum":6, //默认密码最小6位 "password_strength": 3, //0:没要求 1:必须包含数字、小写字母、大写字母、特殊符号中的1种以上,2:必须包含2种以上 3(默认值):必须包含3种以上,4:必须4种都包含。 /*注册失败后cti封堵策略*/ "register_failure":[ { "findtime":60, //分析最近多少秒的失败记录 "maxretry":3, //鉴权最大失败次数,超过就封堵这个IP或者账户 "banmode":1, //封堵方式 0: 根据IP封堵,1:分机和IP都一样才封堵,可以避免只要一个分机错了密码,就直接把这个IP封堵了。 "bantime":180 //封堵时间单位秒,默认180秒 } ],
1
2
3
4
5
6
7
8
9
10
11
12如果想要修改配置,则需要将配置添加到cti.json配置文件的指定位置,然后再进行修改。配置添加位置如图所示:
# 分机注册失败日志
分机注册失败,freeswitch控制台中会输出日志,注册失败的场景不同,日志也会不同。以下是不同场景分机注册失败输出的日志:
- 分机密码复杂度未达到指定要求的日志:
2024-12-03 16:58:03.871785 99.37% [WARNING] cti_gui.c:1032 sip_auth user:1001 password is too simple
- 分机密码长度未达到指定要求的日志:
2024-12-03 16:58:03.871785 99.37% [WARNING] cti_gui.c:1032 sip_auth user:1001 password is too short
- 分机注册时密码输入错误的日志:
2024-12-03 16:53:16.312291 99.23% [NOTICE] cti_fail2ban.c:445 write to fail2ban:ip[192.168.31.242] user[1001] at[2024-12-03T16:53:16.312291+0800] Registration failed
succeed!
2
# 相关命令
# 查看账号封杀记录
freeswitch控制台执行命令:cti show baninfo
输出结果展示:
-ERR no reply
register_failure_config:
findtime:60 maxretry:3 banmode:1 bantime:180
register_failure_history:
2024-12-03 14:14:54 192.168.31.16 1002
2024-12-03 14:15:26 192.168.31.16 1002
2024-12-03 14:15:58 192.168.31.16 1002
2024-12-03 14:16:30 192.168.31.16 1002
2024-12-03 14:17:02 192.168.31.16 1002
2024-12-03 14:17:34 192.168.31.16 1002
2024-12-03 14:18:06 192.168.31.16 1002
2024-12-03 14:18:38 192.168.31.16 1002
2024-12-03 14:19:10 192.168.31.16 1002
2024-12-03 14:19:42 192.168.31.16 1002
2024-12-03 14:20:14 192.168.31.16 1002
2024-12-03 15:10:57 192.168.31.242 1001
2024-12-03 15:11:00 192.168.31.242 1001
2024-12-03 15:11:01 192.168.31.242 1001
2024-12-03 15:11:03 192.168.31.242 1001
register_failure_bandata:
192.168.31.242 expires:
1001 expires:2024-12-03 15:13:03
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 解封账号命令
例:从以上的输出结果展示可以看出,封杀账号是1001,账号注册ip为
192.168.31.242
。想要解封账号1001,在freeswitch控制台执行命令:
cti unban 192.168.31.242 1001
例:如果
192.168.31.242
这个IP下,封杀了多个账号,一个一个解封太麻烦。想要解封这个IP下的所有账号,在freeswitch控制台执行命令:
cti unban 192.168.31.242