[OpenSER-Users-ES] [Users-es] Mensajes que requieren autenticación

Saúl Ibarra saghul at gmail.com
Tue Aug 21 11:50:26 CEST 2007


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.

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?

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.

Los INFO solo ocurririan en loose_route no?Al igual que los UPDATE?

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?

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/




More information about the Users-es mailing list