Asegurar un servidor red5 contra el uso de extraños
Las instalaciones de red5 y las instalaciones del flash media server vienen con una aplicacion instalada por defecto para permitir a los desarrolladores transmitir video sin necesidad de crear una aplicacion en el servidor rtmp, estas aplicaciones no tienen ningun tipo de restriccion por lo que permiten a cualquier programa y a cualquier server hacer uso del servidor rtmp en cuestion.
En red5 la aplicacion se llama “oflaDemo” y en Flash media server “vod” , estas aplicaciones son un riesgo para el server en el sentido en que cualquiera puede conectarse y hacer uso de la funcionalidad del servidor rtmp, por ejemplo pueden crear sharedObjects , hacer streaming de video en vivo y reproducir videos del server.
Incluso puede crearse un riesgo para el servidor mismo afectando todas las otras aplicaciones(apache, iis , pop, etc..) instaladas en el servidor porque si alguien crea un swf que inunde de conecciones al servidor rtmp saturara el sistema y la memoria impidiendo a otros programas funcionar algo parecido a un DoS (denial of service).
La solucion es borrar la aplicacione oflaDemo o vod o modificarlas para agregarles algun tipo de autenticacion.
En red5 yo verifico desde que dominio un usuario se esta conectando esto es posible usando la informacion que un swf envia al servidor rtmp al crear una coneccion , entre estos datos esta “pageUrl” que tiene un valor similar a “http://dominio/peli.swf” entonces en mi clase applicationAdapter uso este codigo :
public boolean connect(IConnection conn, IScope scope, Object[] params) {
if ( !runsFromMyDomain (conn) ) {
rejectClient(“red5 error : violacion de seguridad hotlinking flv”);
}if (!super.connect(conn, scope, params)) { return false; }
return true;
}/**
* Revisa si el swf esta siendo ejecutado desde mi dominio
*/
private boolean runsFromMyDomain (IConnection conn){
Map <String,Object> swfParams = conn.getConnectParams();
Iterator iterator = swfParams.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry obj = (Map.Entry)iterator.next();
if(obj.getKey().toString().equals(“pageUrl”)){
String pageUrl = obj.getValue().toString();
if( pageUrl.indexOf(“http://miDominio.com”) == 0 ){ return true; }
if( pageUrl.indexOf(“http://www.miDominio.com”) == 0 ){ return true; }
}
}
return false;
}
Este codigo revisa la coneccion recien creada y busca en sus parametros la variable pageUrl para verificar que el swf o app esta siendo ejecutada desde mi dominio y no desde algun otro sitio, esto impide que extraños utilicen mi servidor rtmp e incluso que alguien intente descargar uno de mis swf y ejecutarlo localmente.
En flash media server el codigo debe ser muy similar pero no cuento con un server para hacer pruebas.
La ventaja de mi codigo es que no requiere de autenticacion de usuarios y tampoco requiere de rtmps para evitar que alguien utilice un sniffer para encontrar el usuario y pass o los parametros especiales para la coneccion a rtmp.
Otro problema con red5 es que la pagina de inicio es visible por defecto entrando en http://dominio:5080 y generalmente sin seguridad alguna permitiendo a un extraño instalar la aplicacion oflaDemo u otras de los ejemplos , creo que incluso entrar a la admin si conoce el password que viene por defecto, de este problema hablare en otro post y como descubrir hosts con este problema
ACTUALIZACION :
En las listas de red5 me comentaron que tambien es posible proteger las aplicaciones usando configuraciones definidas en los xml de las webapps, aqui esta la info :
http://www.red5.org/wiki/Examples/SecurityExample

Hola, por google llegué a tu blog y lo encontre interesante.
Te cuento, hace poco instale red5 en mi servidor, estoy poco a poco adentrandome en el y comprendiendo su funcionamiento, por suerte encontré este post que habla de la seguridad que hay que tener con dicho elemento.
Me gustaria si me pudieras indicar algunos pasos a seguir para asegurar mi servidor ya que por ejemplo sobre la aplicación oflaDemo, la veo en varias carpetas entonce si la elimino, tengo que hacerlas desde todas esas carpetas y si una vez eliminado oflaDemo ya es imposible que puedan utilizar mi servidor rtmp??.
Respecto al plugin de seguridad que aparece en la actualizacion de tu post, lamentablemente no me llevo bien con el inglés y la traducción que hice por google no me deja muy en claro lo que debo hacer para instalarlo, configurarlo, etc.
Agradecería un poco de ayuda al respecto.
Perdon por mi ignorancia sobre el tema pero estoy de a poco aprendiendo
Gracias.
solo las aplicaciones en la carpeta webapps son las que se ejecutan, tan solo observa el codigo de los xml de http://www.red5.org/wiki/Examples/SecurityExample y adaptalo para tu caso en las carpetas de webapps.
este codigo lo pones en el principio del aplication.java y luego compilas todo de nuevo ???
si, basicamente podrias hacer un copy-paste y recompilar o reiniciar el server para que se aplique.
Hola,
Buscando informacion sobre el tema encontre tu sitio.
Lamnetablemente el link que nos ofreces ya no existe.
Podrias dar el codigo completo de tu solucion para que podamos implementarlo, te lo agradeceria de corazon
Un gran abrazo!!
Hola de nuevo,
Buscando por ahi encontre un ejemplo, que tal vez sea el que comentabas vos:
http://trac.red5.org/wiki/Examples/SecurityExample
Sin embargo, no logro hacerlo funcionar, para mi me estoy equivocando en la ruta de los dos archivos de texto que hay que generar ¿le podrias dar un vistazo y tirarme alguna idea?
Muchisimas gracias
Hola
la informacion es similar a la del link que yo di, aunque parece que fue actualizada.
no sabria decirte bien como funciona porque siempre he utilizado mi propio codigo.
saludos
Hola,
Si no es mucho pedir, podrias compartir tu codigo? He probado de compilar la clase que das pero me faltan los “import” asi que no tuve exito.
Seria grandioso si pudieras pues los ejemplos que estan dando vuelta no funcionan.
Te agradezco de corazon cualquier ayuda que puedas brindar
Saludos!!