配置Kamailio边缘代理仅允许FQDN注册,阻止IP注册请求
问题分析与解决方向
你的配置无效的核心原因是错误提取了Contact头的校验字段:$hdr(Contact:user)获取的是Contact URI里的用户名部分(比如sip:user@example.com里的user),但你需要校验的是URI中的域名/主机部分(即example.com)。同时当前配置未区分请求类型,会对所有SIP请求生效,而你只需要限制REGISTER注册请求即可。
正确配置思路
- 仅针对REGISTER请求执行域名校验逻辑
- 提取Contact URI的主机部分进行校验,若为IP地址则拒绝
- 校验通过后将所有请求转发至PBX
修正后的路由配置
route { # 仅对REGISTER请求执行限制逻辑 if (is_method("REGISTER")) { # 提取Contact头的主机部分,判断是否为IP地址 if (is_ipaddr("$ct.host")) { sl_send_reply("403", "Forbidden: Only FQDN registration allowed"); exit; } } # 所有请求转发至PBX t_relay(); }
关键说明
$ct.host:Kamailio内置变量,直接获取Contact URI中的主机部分(域名或IP)is_ipaddr():内置函数,判断传入值是否为合法IP地址(支持IPv4/IPv6)- 仅对REGISTER请求做限制,避免影响通话、INVITE等其他SIP业务流程
内容的提问来源于stack exchange,提问作者Mohammad Sarshar
相关产品推荐
相关产品推荐

