Chicos,
Como es normal, no quiero que nadie llame si estar registrado... tengo lo siguiente en mi conf:
if (uri==myself) { if (method=="REGISTER") {
if (!www_authorize("sip.midom.com", "subscriber")) { www_challenge("sip.midom.com", "0"); exit; };
if (isflagset(5)) { setbflag(6); # if you want OPTIONS natpings uncomment next # setflag(7); }; save("location"); exit; };
if (method=="INVITE") { if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; }else{ if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING INCOMING CALL AS IT COMES FROM $si ************\n"); } }
if (uri=~"^sip:001"){ route(4); } . . .
pero ahora tengo problemas de DECLINED con muchos clientes cuando hacen llamadas... qué hay de malo arriba??
Un saludo
David
El Lunes, 14 de Enero de 2008, David Villasmil escribió:
Chicos,
Como es normal, no quiero que nadie llame si estar registrado...
No, no es normal. Asumo que lo que quieres decir es:
"Como es normal, no quiero que nadie llame sin autenticarse".
Recuerdo que en SIP estar registrado nada tiene que ver con ser un usuario subscrito (o sea, que tienes cuenta de usuario y password).
tengo lo siguiente en mi conf:
if (method=="INVITE") { if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; }else{ if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING
INCOMING CALL AS IT COMES FROM $si ************\n"); } } El problema es cuando una llamada viene de GW1/GW2... que les da DECLINED
El script es incorrecto, supongamos una llamada desde el GW1 o GW2:
- Primero haces: if (!proxy_authorize("sip.midom.com","subscriber")) Es decir, que si el llamante no presenta credenciales se le ofrezca un "407 Proxy Autehntication Required", o sea, eso se traduce en: proxy_challenge("sip.midom..com","0"); La condición anterior se cumple (el GW1 no incluía credenciales en el INVITE) por lo que el proxy envía el 407 al GW1.
- El GW1 recibe el 407 requeriendo que se autentique (cosa que no puede hacer, ni tampoco queremos que haga, aquí está el error).
- Ese "else" NO se cumplirá nunca puesto que el GW1 NUNCA se podrá autenticar (en cuyo caso el "if" daría falso y se ejecutaría el "else").
- El único caso en el que se ejecutaría el "else" es cuando llama cualquier otro usuario que sí se autentica, lo cuál no es evidentemente lo que quieres.
El autenticar por IP se debe hacer ANTES del "proxy_authorize()". Es decir, sólo pedir autenticación si la IP no es la del GW1/GW2.
Además, mira el módulo "trusted" que tiene funciones apropiadas para autenticación por IP.
Saludos.
Gracias por responder (como siempre, tú! jeje)
Entiendo, entonces debería ser algo así:
if (method=="INVITE") { if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING INCOMING CALL AS IT COMES FROM $si ************\n"); }else{ if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; } }
te parece correcto??
un saludo
David
2008/1/14 Iñaki Baz Castillo ibc@aliax.net:
El Lunes, 14 de Enero de 2008, David Villasmil escribió:
Chicos,
Como es normal, no quiero que nadie llame si estar registrado...
No, no es normal. Asumo que lo que quieres decir es:
"Como es normal, no quiero que nadie llame sin autenticarse".
Recuerdo que en SIP estar registrado nada tiene que ver con ser un usuario subscrito (o sea, que tienes cuenta de usuario y password).
tengo lo siguiente en mi conf:
if (method=="INVITE") { if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; }else{ if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING
INCOMING CALL AS IT COMES FROM $si ************\n"); } } El problema es cuando una llamada viene de GW1/GW2... que les da DECLINED
El script es incorrecto, supongamos una llamada desde el GW1 o GW2:
- Primero haces: if (!proxy_authorize("sip.midom.com","subscriber"))
Es decir, que si el llamante no presenta credenciales se le ofrezca un "407 Proxy Autehntication Required", o sea, eso se traduce en: proxy_challenge("sip.midom..com","0"); La condición anterior se cumple (el GW1 no incluía credenciales en el INVITE) por lo que el proxy envía el 407 al GW1.
- El GW1 recibe el 407 requeriendo que se autentique (cosa que no puede
hacer, ni tampoco queremos que haga, aquí está el error).
- Ese "else" NO se cumplirá nunca puesto que el GW1 NUNCA se podrá
autenticar (en cuyo caso el "if" daría falso y se ejecutaría el "else").
- El único caso en el que se ejecutaría el "else" es cuando llama
cualquier otro usuario que sí se autentica, lo cuál no es evidentemente lo que quieres.
El autenticar por IP se debe hacer ANTES del "proxy_authorize()". Es decir, sólo pedir autenticación si la IP no es la del GW1/GW2.
Además, mira el módulo "trusted" que tiene funciones apropiadas para autenticación por IP.
Saludos.
-- Iñaki Baz Castillo
Users-es mailing list Users-es@lists.openser.org http://lists.openser.org/cgi-bin/mailman/listinfo/users-es
El Lunes, 14 de Enero de 2008, David Villasmil escribió:
Gracias por responder (como siempre, tú! jeje)
Entiendo, entonces debería ser algo así:
if (method=="INVITE") { if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING INCOMING CALL AS IT COMES FROM $si ************\n"); }else{ if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; } }
te parece correcto??
Eso es ;)
Lo único, si el número de gateways que autenticas por IP (o bien añades otras máquinas que tb quieras autenticar por IP) en ese caso tal vez el "if" te quede muy choricero. En ese caso usa la función "trusted()" del módulo "permissions" (creo que antes había dicho que el módulo se llama "trusted", craso error).
Saludos.
Lo voy a mirar
2008/1/14 Iñaki Baz Castillo ibc@aliax.net:
El Lunes, 14 de Enero de 2008, David Villasmil escribió:
Gracias por responder (como siempre, tú! jeje)
Entiendo, entonces debería ser algo así:
if (method=="INVITE") { if($si=="GW1"||$si=="GW2"){ xlog("L_NOTICE", "\n************** ALLOWING INCOMING CALL AS
IT
COMES FROM $si ************\n"); }else{ if (!proxy_authorize("sip.midom.com","subscriber")) { proxy_challenge("sip.midom..com","0"); exit; } }
te parece correcto??
Eso es ;)
Lo único, si el número de gateways que autenticas por IP (o bien añades otras máquinas que tb quieras autenticar por IP) en ese caso tal vez el "if" te quede muy choricero. En ese caso usa la función "trusted()" del módulo "permissions" (creo que antes había dicho que el módulo se llama "trusted", craso error).
Saludos.
-- Iñaki Baz Castillo
Users-es mailing list Users-es@lists.openser.org http://lists.openser.org/cgi-bin/mailman/listinfo/users-es
sr-users-es@lists.kamailio.org