文章目录
- 1. 问题背景
- 2. 防范处理
- 2.1 IP 封禁
- 2.2 OpenSIPS 处理
- 2.2.1 REGISTER 请求
- 2.2.2 INVITE 请求
1. 问题背景
OpenSIPS 作为 SIP 注册服务器,通常需要放在公网供公司各地的员工使用,但是这样就会产生外部扫描问题。一般来说外部扫描量不会很大,但是一旦有恶意攻击,裸奔的 OpenSIPS 很容易被击溃,因此一定的防范是必要的。实际上放在公网的 OpenSIPS 网络拓扑一般如下图所示,扫描问题的处理主要有两个方面:
- 异常流量在防火墙的拦截
- 流量抵达时 OpenSIPS 的处理
2. 防范处理
2.1 IP 封禁
这种方式需要公司的运维或者安全相关部门配合,在 OpenSIPS 侧识别到特定的 IP 较长时间持续性发送请求,则可认为是在进行扫描行为,这种情况下联系网络安全部门在防火墙配置上拒绝该 IP 的网络请求即可
2.2 OpenSIPS 处理
2.2.1 REGISTER 请求
OpenSIPS 作为 SIP 注册网关,通常需要接受来自各地的注册请求,但是对于合法用户而言被告知的注册地址通常会是一个域名,而非法用户扫描得到的注册地址则是直接解析出来的 IP,可以依据这个差异进行相关处理
- 配置 OpenSIPS 监听域名
这个可以在 OpenSIPS 的脚本里添加相关配置监听外网域名,如下所示socket=udp:172.10.18.17:5060 as opensips.com:5060
- 非域名注册请求的处理
在 OpenSIPS 的脚本添加路由处理逻辑,如果收到 REGISTER 请求而 R-URI 里的 domain 不是外网域名,则直接将请求 drop 掉即可,如下所示if (is_method("REGISTER") && $od != "opensips.com") { drop(); }
2.2.2 INVITE 请求
在外呼系统
中,OpenSIPS 作为 SIP 代理服务器正常来说只会收到来自内网 SIP 服务器(如 FreeSWITCH)的 INVITE 请求, 所以可据此进行限制处理
- 配置内网额外端口供 SIP 服务器呼叫使用
可以在 OpenSIPS 的脚本里添加相关配置额外监听内网端口,如下所示socket=udp:172.10.18.17:5070
- 非内网端口呼叫请求的处理
在 OpenSIPS 的脚本添加路由处理逻辑,如果收到 INVITE 请求而 R-URI 里的端口不是指定端口,则直接将请求 drop 掉即可,如下所if (is_method("INVITE") && $op != "5070") { drop(); }
在
呼入场景
中,外部用户通过公网呼叫到 OpenSIPS 通常要经过线路商对接步骤,也就是用户必须呼叫线路商提供的号码才能打进来,所以这个场景只要在防火墙上为相应线路商的服务器加白即可防范外部扫描