[OpenSER-Users-ES] Problemas de Auithentication

Iñaki Baz Castillo ibc at aliax.net
Mon Jan 14 19:39:38 CET 2008


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




More information about the Users-es mailing list