[OpenSER-Users-ES] Re: [Users-es] Mensajes que requieren autenticación
Saúl Ibarra
saghul at gmail.com
Tue Aug 21 13:47:13 CEST 2007
Me respondo a mi mismo, con algunas conclusiones... espero me
corrijáis si me equivoco :P
El 21/08/07, Saúl Ibarra <saghul at gmail.com> escribió:
> Hoola!
>
> En algún hilo se ha comentado el tema de qué mensajes deberían ir
> autenticados o no, pero como no era el tema central, he decidido abrir
> este otro hilo para comentar mi pregunta/cosa:
>
> Según he leido por aqui (creo que lo comentó Iñaki), los mensajes que
> tienen que autenticarse con el proxy_authorize y tal son:
>
> -INVITE
> -REGISTER
> -MESSAGE
> -SUBSCRIBE
> -PUBLISH
> -OPTIONS
>
> Vale, si esta es la lista, entonces yo ahora mismo tengo un
> problemilla de seguridad, así que quería verificar una cosa:
>
> Los INVITE se suelen tratar en u route aparte, así como los REGISTER.
> Aunque todavía no me he metido mucho con ello, PUBLISH y SUBSCRIBE
> también irían aparte, porque están relacionados con la presencia.
>
Todo esto OK.
> Entonces me quedan MESSAGE y OPTIONS. Actualmente he estado probando
> los mensajes sin autenticación y por supuesto iban OK. Ahora he
> añadido este bloque para manejarlos:
>
> # -----------------------------------------------------------------
> # MESSAGE handler
> # -----------------------------------------------------------------
>
> route[8]
> {
> xlog("L_INFO","$Cbx-- Mandando un MESSAGE --$Cxx\n");
>
> ## Es necesario autenticarse
> if (!proxy_authorize("","subscriber")) {
> xlog("L_INFO","$CbxSe necesita autenticacion para el MESSAGE$Cxx\n");
> proxy_challenge("","0");
> exit;
> }
>
> ## Tienen que coincidir el nombre de usuario con el de la cabecera FROM
> else if (!check_from()) {
> xlog("L_INFO","$Crx*** check_from() = NO!! ***$Cxx\n");
> sl_send_reply("403", "Use From=ID");
> exit;
> };
> xlog("L_INFO","$Cbx*** MESSAGE correcto ***$Cxx\n");
> consume_credentials();
>
> # Puede que venga a nosotros pero tengamos definido un alias a fuera.
> lookup("aliases") nos da la nueva URI que puede sea !=myself.
> lookup("aliases");
> if (!is_uri_host_local()) {
> xlog("L_INFO","$CrxNot my URI after the alias lookup$Cxx\n");
> ## A las salientes
> route(4);
> exit;
> };
>
> ## Miramos si existe el destino en nuestra tabla "location".
> if (!lookup("location")) {
> xlog("L_INFO","$Crx404 User Not Found$Cxx\n");
> sl_send_reply("404", "Not Found");
> exit;
> };
>
> ## Si hemos llegado hasta aquí enrutamos el mensaje al destino por la
> ruta por defecto.
> route(1);
> exit;
> }
>
> La pregunta es: podría utilizar este mismo bloque para los OPTIONS?
>
No se como generar un OPTIONS, xD pero por lo que he leido ese bloque
deberia servirme para los MESSAGE, OPTIONS y REFER, ya que pide el
auth y tal.
> Entonces, llegados a este punto (sorry por la chapa) nos quedan por
> tratar CANCEL, BYE, INFO, REFER, UPDATE, y PRACK?
>
> Bien, entonces, asumiendo que tenemos esto en nuestro route principal:
>
> if (!is_uri_host_local()) {
> if (is_from_local()) {
> route(4);
> }
> else {
> sl_send_reply("403", "Forbidden");
> };
> exit;
> }
>
> Si un cuanlquiera nos manda algo pasaremos de ello. Entonces, para los
> CANCEL y los BYE podemos hacer t_relay tranquilamente.
>
No, los BYE solo deberian ocurrir dentro del dialogo, manejados por loose_route.
> Los INFO solo ocurririan en loose_route no?Al igual que los UPDATE?
>
Los INFO también los manejamos con loose_route.
> Ya solo nos quedan REFER, UPDATE y ese PRACK que no se yo... :P
>
> Segun leo en el RFC3515, "REFER request MAY be placed outside the
> scope of a dialog" entonces, deberia tratarlo fuera del loose_route?
> Iria autenticado?
>
Si, deberia.
El tema es que en todos los ejemplos que he visto, en la seccion en la
que se van mandando a distintos routes dependiendo del metodo, como
asi por ejemplo:
## Los REGISTER los tratamos a parte (en la ruta 2)
else if (method=="REGISTER") {
route(2);
exit;
}
## Los INVITEs a la ruta 3 (autenticacion,...)
else if (method=="INVITE") {
route(3);
exit;
}
Luego al final, si no ha entrado por ninguno de los if se comprueba el
alias, el location, y se hace relay. Esa parte no me gusta, y quiero
tratar cada mensaje explicitamente, por lo tanto, que pasaria si no
dejo los UPDATE y PRACK? Parecen "opcionales"...
> PD: Sorry por la "pesadilla mail", si aun os quedan fuerzas tras haber
> llegado hasta aqui: que hacemos con el PRACK? (aunque no lo he visto
> nunca...)
>
> --
> Saúl -- "Some people say why, other just say, why not."
> ----------------------------------------------------------------
> http://www.saghul.net/
>
--
Saúl -- "Some people say why, other just say, why not."
----------------------------------------------------------------
http://www.saghul.net/
More information about the Users-es
mailing list