测试 Securing Kamailio’s JSON-RPC over HTTP

原文在这里:

https://kaufmania.wordpress.com/2023/09/13/securing-kamailios-json-rpc-over-http/

写的太好了,笔法老练,掌握精准


笔者改了下,kamailio.cfg 全部内容为:

复制代码
#!KAMAILIO

#!defenv RPC_USER
#!defenv RPC_PASS

loadmodule "pv"
loadmodule "ctl"
loadmodule "xlog"
loadmodule "sl"
loadmodule "json"
loadmodule "xhttp"
loadmodule "jsonrpcs"
loadmodule "tcpops"
loadmodule "htable"
loadmodule "auth"
loadmodule "kex"

tcp_accept_no_cl = yes
http_reply_parse = yes

socket_workers = 2
listen = tcp:enp0s3:8081  # 修改成实际网卡
listen = tcp:127.0.0.1:5060
debug = 3
log_stderror = yes
modparam("jsonrpcs", "transport", 0)
modparam("htable", "htable", "rpc_allow=>size=4");

request_route {
    exit;
}

event_route[xhttp:request] {
    route(XHTTP_PORT_CHECK);

    route(XHTTP_RPC_AUTH);

    route(VALIDATE_RPC_METHOD);

    jsonrpc_dispatch();
}

route[XHTTP_PORT_CHECK] {
    if ( $Rp != 8081 ) {
        xcrit("HTTP Request not received on port 8081. reject\n");
        tcp_close_connection();
    }
}

route[XHTTP_RPC_AUTH]{
    if ( $au != $null && $au != $def(RPC_USER) ) {
        xerr("Invalid RPC user : [$au].\n");
        xhttp_reply(
            "403", "Unauthorized", "text/plain", "403 Unauthorized\r\n"
        );
        exit;
    }

    if ( !pv_www_authenticate("$Ri", "$def(RPC_PASS)", "0") ) {
        switch ( $rc ) {
            case -2:
                xerr("Invalid RPC password for user $au\n");
                xhttp_reply(
                    "403", "Unauthorized", "text/plain", "403 Unauthorized\r\n"
                );
                exit;
            case -5:
                xinfo("HTTP request with no crednetials. Send challenge\n");
                www_challenge("$Ri", "0");
                exit;
            default:
                xinfo("Misc. WWW auth failure. $$rc [$rc]\n");
                xhttp_reply(
                    "503", "Server Error", "text/plain", "503 Server Error\r\n"
                );
                exit;
        }
    }

    consume_credentials();
}

route[VALIDATE_RPC_METHOD] {
	json_get_field("$rb", "method", "$avp(rpc_method)");
    $avp(rpc_method) = $(avp(rpc_method){s.unquote});

    if ( $sht(rpc_allow=>$avp(rpc_method)) == 1 ) {
        return;
    }

    xhttp_reply("403", "Not Allowed", "text/plain", "Not Allowed\n");
    exit;
}

event_route[htable:mod-init] {
    $sht(rpc_allow=>stats.fetch)  = 1;
    $sht(rpc_allow=>core.version) = 1;
    $sht(rpc_allow=>mod.stats)    = 1;
}

现在做测试

export RPC_USER=allen

export RPC_PASS=1234

kamailio # 启动 kamailio

curl -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"stats.fetch","id":"1","params":["all"]}' --digest -u allen:1234 http://127.0.0.1:8081 -vvv

输出省略

还是要多动手

相关推荐
xixixi777775 小时前
基于零信任架构的通信
大数据·人工智能·架构·零信任·通信·个人隐私
Deepoch2 天前
Deepoc-M模型:以数学赋能,解锁通信产业“普惠创新”新可能
科技·5g·数学建模·通信·deepoc·deepoc数学大模型
xixixi777773 天前
2026 年 1 月 30 日 AI + 通信 + 安全前沿信息集成
算法·安全·ai·大模型·安全威胁分析·信息与通信·通信
xixixi777773 天前
无网通信——不依赖传统集中式蜂窝网络(如4G/5G基站)或互联网基础设施(如光纤、路由器) 的通信方式
网络·路由器·数据安全·通信·卫星通信·无网通信
liulilittle6 天前
ISIF-COP香港服务器,启用OPENPPP2 VMUX全双工
运维·服务器·网络·信息与通信·通信
byte轻骑兵9 天前
HFP协议核心AT指令速查表
信息与通信·蓝牙·通信·hfp·通话
RXXW_Dor10 天前
安全配置未受保护A01637报警处理方法(西门子S200驱动器UMAC详细配置)
plc·通信·博途s200
carcarrot10 天前
.Net中SignalR的使用、以及结合BackgroundService的实现类实现“实时推送功能”
websocket·rpc·sse·通信·signalr·longpolling
无名38712 天前
Kamailio 处理呼叫但碰到的错误为 no connect set and no active connection
通信
TTGGGFF12 天前
深度解析 CAN 总线:从底层物理层到 SocketCAN 编程实战
通信·can总线