以下是在Ubuntu系统上安装和配置Kamailio并启用TLS的完整步骤:
1. 添加Kamailio仓库并更新系统
sudo apt-get update
sudo apt-get install -y gnupg2
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.kamailio.org/kamailiodebkey.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kamailio.gpg
echo "deb [signed-by=/etc/apt/keyrings/kamailio.gpg] https://deb.kamailio.org/kamailio55 $(lsb_release -cs) release" | sudo tee /etc/apt/sources.list.d/kamailio.list
sudo apt-get update
2. 安装Kamailio及依赖
sudo apt-get install -y kamailio kamailio-tls-modules kamailio-presence-modules kamailio-extra-modules kamailio-mysql-modules
可以重新安装所有依赖:
sudo apt-get install --reinstall kamailio-tls-modules
3. 生成TLS证书(示例使用自签名证书)
sudo mkdir -p /etc/kamailio/certs
sudo openssl req -new -x509 -days 3650 -nodes \
-out /etc/kamailio/certs/kamailio.crt \
-keyout /etc/kamailio/certs/kamailio.key \
-subj "/CN=$(hostname -f)"
sudo chown -R kamailio:kamailio /etc/kamailio/certs
确保权限
sudo chmod 600 /etc/kamailio/certs/kamailio.key
sudo chmod 644 /etc/kamailio/certs/kamailio.crt
TLS 配置通常需要两部分:服务器的私钥(private key)和服务器的公钥证书(server certificate)。私钥用于加密通信,公钥证书用于向客户端证明服务器的身份。用户提供的目录中有 kamailio.key
和 kamailio.crt
,这两个文件的命名符合常见的证书文件命名。
需要写入 tls.cfg
的文件:
-
private_key: 这是Kamailio的私钥文件,通常是以
.key
结尾的文件。在你的文件列表中,kamailio.key
是私钥文件。 -
certificate: 这是Kamailio的公钥证书文件,通常是以
.crt
或.pem
结尾的文件。在你的文件列表中,kamailio.crt
是公钥证书文件。
4. 配置Kamailio(/etc/kamailio/kamailio.cfg)
#!KAMAILIO
# 全局参数设置
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
# 模块加载
mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/"
loadmodule "tls.so"
loadmodule "tm.so"
loadmodule "sl.so"
loadmodule "pv.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
# TLS配置
modparam("tls", "certificate", "/etc/kamailio/certs/kamailio.crt")
modparam("tls", "private_key", "/etc/kamailio/certs/kamailio.key")
modparam("tls", "tls_method", "TLSv1.2+")
modparam("tls", "verify_certificate", 0)
# 监听端口配置
listen=tls:YOUR_SERVER_IP:5061
listen=tcp:YOUR_SERVER_IP:5060
# 路由配置
request_route {
# 基本SIP消息处理
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (is_method("INVITE")) {
t_relay();
exit;
}
sl_send_reply("404","Not Found");
}
确保关键模块(如 sl
、tm
)在 tls
模块之前加载,模块依赖顺序错误会导致崩溃。
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "tls.so"
5. 验证配置文件
sudo kamailio -c
6. 配置系统服务
sudo systemctl enable kamailio
sudo systemctl restart kamailio
7. 防火墙配置
sudo ufw allow 5060/tcp
sudo ufw allow 5061/tcp
sudo ufw allow 5060/udp
sudo ufw reload
8. 验证运行状态
sudo systemctl status kamailio
ss -tulpn | grep kamailio
9. 测试TLS连接
使用Wireshark或sipsak测试:
sipsak -vvv -s sip:user@your_domain.com -T -a --tls --tls-verify=no
关键注意事项:
-
将YOUR_SERVER_IP替换为实际服务器IP地址
-
生产环境应使用正式CA签发的证书
-
根据实际需求调整路由逻辑
-
TLS验证参数(verify_certificate)应根据安全需求配置
-
建议启用防火墙并限制访问IP范围
故障排查:
-
查看日志:
tail -f /var/log/syslog | grep kamailio
-
测试证书权限:
sudo -u kamailio ls /etc/kamailio/certs
-
检查端口监听:
netstat -tulpn | grep 5061
-
详细调试模式:
sudo kamailio -DD -E -e
完整配置可能需要根据具体业务需求调整路由逻辑、添加用户认证、数据库集成等高级功能。建议参考官方文档进行深度配置:https://www.kamailio.org/wiki/
查看状态:sudo systemctl status kamailio