kamailio基于geoip模块,实现地理防范的原理

Kamailio基于geoip模块可以实现,对指定地区的访问权限,比如设备是安装使用在江苏、上海,并且只是在其中一个城市使用,比如只在上海使用,则可以通过模块对来访问的IP进行识别,如果是上海的IP,可以进到下一流程当中,如果非上海的IP则自动丢掉数据,当然这个模块只是整个安全防范当中的一环,你不可能只是基于IP地理这一个步骤。

Geoip模块过虑风险IP地址
Geoip模块过虑风险IP地址

一、核心思路

通过GeoIP2数据库将SIP请求的源IP转换成代码,只允许业务覆盖的城市(白名单)发起请求,其余一律直接回复403禁止。

推荐使用白名单模式(仅放行少数城市),比黑名单更安全且维护成本更低。

二、准备工作

  1. 安装libmaxminddb开发库。
  2. 到MaxMind官网下载GeoLite2-Country或GeoLite2-City的.mmdb数据库文件。
  3. 将文件放到服务器的固定路径,例如:/usr/local/share/GeoIP/GeoLite2-City.mmdb

三、模块配置

加载geoip2模块并指定数据库路径:

loadmodule "geoip2.so"
modparam("geoip2", "path", "/usr/local/share/GeoIP/GeoLite2-City.mmdb")

四、路由脚本示例(白名单模式)

request_route的开头加入以下逻辑:

# 允许的城市代码,多个用竖线分隔
#!define ALLOW_CC "CN,JS"

request_route {
    # 根据源IP查询地理位置
    geoip2_match("$si", "src");

    # 如果国家代码不在白名单里,直接拒绝
    if (!($gip2(src=>cc) =~ "^(" + ALLOW_CC + ")$")) {
        xlog("L_WARN", "Blocked country=$gip2(src=>cc) IP=$si\n");
        send_reply("403", "Forbidden");
        exit;
    }

    # ... 后续正常路由处理 ...
}

解释

  • geoip2_match("$si", "src") 查询源IP,结果存入容器src
  • $gip2(src=>cc) 取出该IP对应的城市代码(如JS)。
  • 白名单设为CN|JS,不符合则返回403并结束请求。

五、注意事项

  • 数据库需每月更新一次(新分配IP会变化)。可设置定时任务下载新文件,并用mv替换旧文件。
  • 被拒绝的请求务必通过xlog记录,以便监控拦截量是否异常。
  • 白名单一定要与自身业务覆盖范围严格一致,不要把不开展业务的城市放进去。
📢 声明:

本站所有文章,如果是技术类文章,均为内部学习交流使用,非专业技术人员,请勿对设备进行任何修改及操作,以免造成设备无法运行,或者损坏,导致设备不可正常使用。建议定期对设备数据进行备份和保存。


📞 我们专注于通信器材销售和各厂家电话交换机的维护,并提供上海地区的调试和安装,可以提供各种电话交换机的主机板、CPU、外线板及分机板,各类连接套件,提供弱电布线;包含网络线、电话线、门禁。

为您推荐

发表回复

联系我们

联系我们

021-54140117

在线咨询: QQ交谈

邮箱: 54140117@163.com

工作时间:周一至周五8:30-17:30,节假日休息。
返回顶部
Call Now Button联系电话