Es un placer comunicar que tanto Luis como yo (Miguel Angel) hemos logrado terminar al fin la carrera ^^

Eso no nos convierte aún oficialmente en Ingenieros en Informática ya que falta esperar las actas de junio y pedir el título.

Pero aún así, ahora hay que decidir que hacer con nuestras vidas, aunque por mi parte siempre ha habido y habrá un huequecito para seguir desarrollando este proyecto.

Mi plan para los próximos meses es terminar el dichoso refactoring que llevo tanto tiempo haciendo en la librería iptables-sharp (antes iptables-net), hacer una pequeña aplicación gráfica que la use y escribir más tests unitarios para ella (hay 0 actualmente tongue.png ).

Esta versión de la librería es en algunos aspectos más limitada que la versión que hay colgada en el tar.gz en googlecode pero promete mejor mantenibilidad y más facilidad para añadir soporte de extensiónes, antes era demasiado difícil.

Esto es todo, de momento ...

mangelp | General, iSharpKnocking | 2 Julio, 8:55am

Ya es hora de dar parte después de tanto tiempo.

Dado que tanto diego como yo no tenemos demasiado tiempo para dedicarselo al proyecto decidimos dejar el concurso así que no envíamos la documentación pertinente por lo que nos quedamos fuera directamente.

Pero el proyecto sigue, eso sí, muy despacito.

Así que lo de cambiar a la forja nada de nada. Seguiremos usando google code hasta que se harten de nosotros tongue.png

Ah, felicitaciones a los finalistas de este año face-smile.png

mangelp | iSharpKnocking | 6 Mayo, 5:57pm

Nos estamos estableciendo en el nuevo repositorio en la forja de rediris así que próximamente en la siguiente url encontrareis los fuentes:

https://forja.rediris.es/svn/csl2-isknocking

Update Lo de migrar al otro repositorio se va a retrasar ya que tenemos algunas pegas que resolver primero. De momento seguimos con el de google code.

mangelp | General, iSharpKnocking | 19 Diciembre, 12:20pm

Google ofrece de manera semi-gratuita un servicio de análisis estadístico del uso de un sitio web con el que he podido comprobar que la página del proyecto en google code acumula 55 visitas desde noviembre. No es un número para tirar cohetes, pero da idea de que el mundo no se ha olvidado de nosotros ya que no todas las visitas provienen de gente del concurso de software libre.

La siguiente estadística lo ilustra:

Y donde además se puede ver como se reparten los sistemas operativos teniendo más visitas desde windows que desde linux, pero como usan firefox no importa tongue.png (yo este post lo estoy escribiendo desde mi windows).

Quizás estas estadísticas nos ayuden a notar a lo largo de la evolución del concurso y del proyecto si nuestros esfuerzos atraen la atención de la comunidad o no.

Saludos.

mangelp | General, iSharpKnocking | 18 Diciembre, 3:19pm

En las últimas semanas me he dedicado a mover carpetas del svn de aquí para allá y a renombrar archivos para ajustarlo más a como tendría que estar ordenado separando el código nuevo refactorizado del antiguo que aún sigue en su carpeta.

La librería IptablesNet, antes llamada NetfilterFirewall, ahora pasa a llamarse IptablesSharp, nombre mucho más acorde ya que funciona principalmente sobre mono y el otro nombre induce a pensar lo contrario.

Así que ahora que está el código ordenado seguiré tirando código hasta que nos movamos al svn de la forja.

Con respecto al svn del año pasado vamos a eliminarlo, ya que el código quedará subido en el nuevo svn y no es plan de tener dicho código duplicado, aunque cualquiera que lo quiera ver lo tiene para descartar en el wiki de googlecode.

Saludos.

mangelp | iSharpKnocking | 3 Diciembre, 5:27pm

Ya es una noticia tardía, pero ya ha comenzado la segunda edición del Concurso Universitario de Software Libre en el cual participamos de nuevo este año con un nuevo nombre: iSharpKnocking

Nuestros objetivos son en parte algunos de los objetivos no finalizados del año pasado, más algunos que no habíamos ni siquiera tomado en cuenta, más las cosas que se nos han ido ocurriendo por el camino.

Para empezar terminaremos el refactoring y documentación que estaba planeado para la base de código para seguir con la librería que nos permite modificar las reglas de iptables desde código manejado.

A todo lo que hay que hacer hay que unir el handicap de que no tengo conexión en casa por lo que sólo puedo acceder al correo y a subir código cuando estoy en la escuela :S (la culpa es de telefónica que no me pone línea en mi casa), pero a cambio tengo ilusión y ganas de seguir adelante con el proyecto el cual será mi última actividad como alumno este curso académico ya que me queda poco para acabar la carrera.

Un saludos a todos los nuevos y antiguos participantes

mangelp | General, Software libre, iSharpKnocking | 15 Noviembre, 3:30pm

Debido a la gran cantidad de spam que ha vuelto a entrar en este santo blog a través del sistema de trackback de los comentarios los hemos desactivado totalmente.

De cualquier modo tampoco nadie comentaba nada tongue.png , así que todos contentos.

Saludos.

PD: Malditos spammers ...

mangelp | General, SharpKnocking | 6 Noviembre, 3:18pm

Nos hemos propuesto volver a participar en el concurso de software libre este año y para ello hemos elegido para participar otro nombre para nuestro proyecto, ya que son muchas las mejoras planeadas. Así que tras una dura deliberación ha sido iSharpKnocking, con el cual participaremos, si nos dejan, en la segunda edición del concurso.

A muchos les parecerá extraño que queramos participar habiendo estado en la final del año pasado y pensarán que los 15 minutos de fama ya pasaron. Pero en nuestro caso es una forma de reafirmar la existencia y continuidad de este proyecto y de promover el concurso de software libre, además de que nos gusta lo que hacemos y que el resultar ganadores del concurso nunca fue ni será nuestro objetivo (y ser finalistas menos tongue.png ).

No va a ser fácil ya que ahora disponemos de menos tiempo libre, pero tenemos ilusión por conseguir las metas que nos propusimos en su momento y que aún no se han materializado.

Si se quiere realizar un seguimiento del proyecto lo mejor es leer/rssear este blog, seguir el wiki en Google Code y/o descargar la versión test 0.1 para trastear con ella y ponernos unos cuantos issues tongue.png .

Respecto al código fuente estamos haciendo muchos cambios últimamente para modularizar el código que tenemos y permitirnos más flexibilidad. De modo que una estructura básica de modulos es actualmente:

  • IptablesNet: Librería para interactuar con iptables en c# aprovechando las características de tipado fuerte para resolver la mayoría de errores en tiempo de compilación.
  • Developer: Librería de elementos comunes que pueden ser reutilizados en cualquier proyecto.
  • SharpKnocking.Daemon: Servicio de captura de llamadas y análisis.
  • SharpKnocking.Doorman: Manager de configuración y gestor de llamadas.
  • SharpKnocking.PortKnocker: Aplicación cliente para llamadas.

El código fuente se puede obtener del repositorio svn en Google Code o del repositorio svn en la forja de rediris, aunque este último lo tenemos un poco abandonado de momento, pero lo actualizaremos habitualmente cuando comencemos a avanzar.

Un saludo para todos y esperemos pasarlo igual de bien que el año pasado.

mangelp | SharpKnocking, Software libre, iSharpKnocking | 31 Octubre, 4:30pm

El equipo del Sharpknocking está contento de anunciar a Diego (manrash) como nuevo miembro.

¡Bienvenido y a programar! XDXDXDXD

mangelp | General | 23 Octubre, 5:16pm

Y el proyecto sigue adelante.

Durante este largo tiempo de silencio hemos estado muy ocupados poniendo en pié nuestras bases existenciales y refactorizando el código de la primera versión de SharpKnocking ya que nuestros futuros requerimientos no encajaban con la base de código. Pero nuestro tiempo libre ha escaseado mucho este verano, por lo que nos ha pillado el siguiente curso tongue.png

También estrenamos nueva versión de jaws pasando de la 0.5.3 a la 0.7.3 y la verdad es que hemos notado el cambio, ¡adiós spammers de referers y comentarios!

Aún estamos un poco aturdidos por el mes de septiembre, pero ya iremos recuperando el ritmo.

mangelp | General, SharpKnocking | 23 Octubre, 5:08pm

Ha llegado el verano y es hora de organizarnos para ver en que gastaremos las energías dedicadas al proyecto.

Desde la final del concurso hemos estado rumiando la idea de refactorizar el código actual ya que son muchas las cosas que tienen que ir entrando y la base de código actual no se ajusta adecuadamente a lo que queremos hacer, por lo que durante este verano planeamos refactorizar profundamente el código hasta quedar satisfechos.

También tenemos otra pequeña novedad, estrenamos lista de correo de desarrollo: http://mail.ilikecoffee.net/mailman/listinfo/sharpknocking-devel_ilikecoffee.net

Invitamos a todos los que están interesados a que la sigan para estar al tanto del estado del proyecto o que nos escriban para cualquier otra cosa. Pero tengo que avisar de que vamos a escribir en inglés, ya que queremos intentar llegar a la mayor cantidad de gente posible con éste proyecto y a que el inglés es el lenguaje de facto para la mayoría de proyectos de software libre.

También invito a aquellos que se atrevan a probar SharpKnocking 0.1 en sus máquinas a que nos dejen los bugs en el tracker o que los manden a la lista, preferiblemente en inglés (aunque sea patatero, no hay problema mientras se entienda).

Saludos.

mangelp | General, SharpKnocking | 3 Julio, 4:10pm

Bueno, ya han pasado varios días, pero es que estamos muy liados haciendo cosas que fuimos dejando aparcadas antes de la final y nos estamos comenzando a meter en época de parciales tras lo cual llega la época de examenes.

Obtuvimos el segundo premio de nuestra categoría en el concurso siendo el primero para el otro proyecto participante: Porting de Gcc a la arquitectura del microcontrolador 16f877.

Tanto Luís como yo estamos contentos con los resultados así como seguimos planeando nuevas caracteristicas para la siguiente release de SharpKnocking que estamos empezando a planificar para algún día entre Julio y Septiembre.

Desde aquí quiero mandar un gran saludo para todos los finalistas del concurso (que bien lo pasamos) y esperamos ver como todos nuestros proyectos crecen juntos face-smile-big.png

mangelp | General, SharpKnocking | 16 Mayo, 2:12pm

Hoy he arreglado un bug muy muy feo que impedía la correcta comunicación entre el cliente de configuración, Doorman y el demonio KnockingDaemon y que provocaba que no se pudiese usar correctamente el modo interactivo.

Estando esto andando puede que nos quede una presentación curiosa en la final hehe.

Saludos.

PD: He subido unas cuantas capturas a la galería de imágenes face-smile-big.png

luisro | SharpKnocking | 30 Abril, 2:35pm

Pues sí, quien lo diría, finalistas tras lo accidentado de la última época del desarrollo. Ahora mismo estoy preparando el resumen del proyecto y pronto nos pondremos a preparar la presentación.

Y bueno, algún bug corregiremos para que se vea bien bonita la presentación.

Saludos, y gracias.

luisro | General | 26 Abril, 11:32am

En el espacio que te da google tienen implementado un wiki muy simple para la creación de contenidos junto con el sistema de creación de issues. Es todo muy simple e intuitivo así que hecharle un vistazo para ver el estado actual del proyecto es cuestión de minutos.

Ahí, tenemos colgado un tgz con la versión 0.1 y hemos estado creando algunas páginas en el wiki y recopilando ideas de cosas por hacer en la página de TODO.

La url es:

http://code.google.com/p/sharpknocking

mangelp | General | 19 Abril, 5:14pm

Ya he subido a la forja el código de la última versión en el que corregimos un montón de fallos y que debería haber subido este lunes pero al final debido a un cúmulo de circunstancias y hechos desafortunados no pudo ser.

Esta versión debe ser considerada la 0.1 de la suite SharpKnocking y está compuesta por:

  • Demonio KnockingDaemon que permanece a la escucha de los paquetes entrantes y busca secuencias de llamada. Actualmente los paquetes son udp con un payload de 8 bytes.
  • Manager Doorman. Permite crear las secuencias que aceptará el daemon. Se comunica con el daemon para hacerle recargar las secuencias activas y para comenzar el modo interactivo (no implementado del todo).
  • Llamador PortKnocker. Permite abrir un puerto remotamente usando una secuencia de llamada que tiene que haber sido previamente creada y aplicada con Doorman y luego exportada para poder ser usada por PortKnocker.

Actualmente el sistema permite "cerrar" totalmente un sistema y dar acceso a las ips desde las cuales se reciban llamadas correctas para un puerto dado cada vez.

Las cosas que encabezan la lista de todo son:

  • Timeout de acceso: Tras un tiempo que se quite la regla que da acceso a una ip. Hay una regla que permitirá que siga el acceso para las conexiónes establecidas por lo que si se realizá una conexión el usuario no lo notará.
  • Detección de intentos de accesos duplicados. Si alguien llama estando ya el acceso concedido se meterá una regla duplicada (el comando iptables lo permite sin chistar). Eso no es buena cosa.
  • Estadísticas de uso. Guardaremos información de los paquetes válidos obtenidos en la captura y sobre las secuencias correctas que se vayan recibiendo.
  • Pensar en maneras de mejorar la seguridad. Hay que hacer que sea muy dificil adivinar las secuencias de knocking y detectar que un sistema está usando SharpKnocking.
  • Rango de puertos protegido. Puede ser intersante que el SharpKnocking se aplique sólo a un cierto rango de puertos.
  • Terminar de implementar el modo interactivo. Si el doorman está abierto permite un modo interactivo en el que se le pide al administrador su permiso para dar acceso a los que realizan llamadas.
  • ...

Un saludo a todos y suerte.

mangelp | | 11 Abril, 7:46am

Ya he terminado con el automata para detección de secuencias y he refactorizado el demonio de knocking que estaba algo falto de atención por mi parte. Tras depurarlo un poco y resolver unas cuantas incidencias varias todas las aplicaciones funcionan de por sí.

También hemos realizado un poco de tratamiento de excepciones para intentar evitar que el firewall se quede con las reglas que introducimos restaurando un backup de las mismas que realizamos al principio del inicio del daemon.

Ahora queda el paso final, testear los programas en funcionamiento y buscarles las cosquillas para que no peten cuando menos oportuno es face-smile.png

mangelp | General | 4 Abril, 10:50am

Pues nada, sin duda en el periodo final de la codificación de un proyecto para su evaluación es sin duda el momento ideal para que el repositorio se caiga.

Esperemos que se arregle pronto, pero de mientras, para poder seguir trabajando nos hemos mudado a Google Code https://sharpknocking.googlecode.com/svn/trunk/. En cuanto la forja del concurso está operativa, pasaremos allí los cambios.

En otro orden de cosas, muchos cambios en todo. Ya tenemos makefiles para el proyecto, generados automáticamente por Monodevelop (en los últimos tiempos ha visto mejoras significativas en cuanto a features, por cierto). Se comprueba que se están ejecutando las cosas, los permisos necesarios para ejecutar los programas, y muchos otros cambios, por lo que esta cogiendo el punto de cocción necesario para que este presentable.

¡Suerte a todos, y saludos!

luisro | Mono, SharpKnocking | 3 Abril, 12:15pm

Nos vamos acercando a la recta final del desarrollo de los proyectos, así que habrá que ir comentando un poco como va la cosa.

¿Recuerdan que se comentó que se usarían reglas del firewall en conjunción con ulogd para monitorizar los paquetes que nos interesan? Pues bueno, eso resultó ser un completo fracaso, dado que los plugins de salida que ofrecía ulogd no nos daba toda la información sobre el payload del paquete que nosotros necesitamos (o necesitábamos o pensamos necesitar face-smile.png )

Total, que hubo que descartarlo y buscarse otra solución (sobre lo cual juraría haber posteado ya en este nuestro blog, pero bueno, debe ser un momento de deja vú o como se diga tongue.png )

Nuestro salvador en este aspecto ha sido tcpdump. Este programa es un programa analizador de tráfico de red, en consola. Un wrapper de libpcap, si mal no lo tengo entedido. La cuestión es que durante las últimas dos semanas moví mi foco de trabajo de la interfaz gráfica hacia las entrañas del daemon de reconocimiento de secuencias.

Y he hecho un buen trabajo creo, pues he creado la infraestructura que permite tratar la información ofrecida por tcpdump, convertirla a un formato sencillo de utilizar y enviarlo a un sistema de autómatas para la detección de secuencias.

Del algoritmo concreto que usarán estos autómatas se encargará Miguel Ángel, pues yo vuelvo a mis interfaces para integrar la comunicación entre el daemon y la interfaz de configuración, hacer un icono de notificación que viva alegremente en el área de notificación (no tan trivial como debería) y supongo que algo más.

Así que nada, más noticias pronto.

luisro | General | 27 Marzo, 10:20pm

SharpKnocking.NetfilterFirewall es el namespace donde están todas las clases que he realizado para interactual con iptables.

El siguiente fragmento de código es usado para insertar al principio de la cadena input una regla que redirija todos los paquetes a una cadena llamada SharpKnocking-INPUT donde están las reglas que aceptarín o denegarán el paquete en función de si le hemos dado acceso o no. Es un ejemplo de como usar la librería para alterar las reglas del firewall.

            //Create rule for adding a new chain
            NetfilterRule rule = new NetfilterRule();
           
            //Create new chain command
            NewChainCommand cmd = new NewChainCommand();
            cmd.ChainName = this.chainName;
           
            //Set in the rule
            rule.Command = cmd;
           
            //Execute
            FirewallManager.instance.ApplyRule(rule);
            //Execute in default table named filter
            this.ruleSet.ExecRule(rule);
           
            //Create insert rule to redirect INPUT packets to our chain
            rule = new NetfilterRule();
           
            //Create insert command
            InsertRuleCommand iCmd = new InsertRuleCommand();
            iCmd = new InsertRuleCommand();
            iCmd.RuleNum = 1;
            iCmd.ChainName = "INPUT";
           
            rule.Command = iCmd;
           
            //Create jump option to redirect to our chain
            JumpOption jopt = new JumpOption();
            jopt.Target = RuleTargets.CustomTarget;
            jopt.CustomTarget = CustomRuleTargets.UserDefinedChain;
            jopt.CustomTargetName = this.chainName;
            //Add to rule
            rule.Options.Add(jopt);
           
            //Execute
            FirewallManager.instance.ApplyRule(rule);
            //Execute in default table named filter
            this.ruleSet.ExecRule(rule);
           
            //Create rule
            rule = new NetfilterRule();
           
            //Create append rule command
            AppendRuleCommand acmd = new AppendRuleCommand();
            acmd.ChainName = this.chainName;
            //Set in the rule
            rule.Command = acmd;
           
            //Create option to accept loopback traffic
            InInterfaceOption inOpt = new InInterfaceOption();
            inOpt.Interface = "lo";
            //Add to rule
            rule.Options.Add(inOpt);
           
            //Create jump option with accept target
            jopt = new JumpOption();
            jopt.Target = RuleTargets.Accept;
            //Add to rule
            rule.Options.Add(jopt);
           
            //Execute
            FirewallManager.instance.ApplyRule(rule);
            //Execute in default table named filter
            this.ruleSet.ExecRule(rule);
           
            //Create rule to accept new or related connections
            rule = new NetfilterRule();
           
            //Create append rule command
            acmd = new AppendRuleCommand();
            acmd.ChainName = this.chainName;
            //set in the rule
            rule.Command = acmd;
           
            //Load state extension with -m option
            MatchExtensionOption meop = new MatchExtensionOption();
            meop.Extension = MatchExtensions.State;
            //Add to rule
            rule.Options.Add(meop);

            //The previous option causes the extension to be instantiated
            //and added. We add the parameter directly.
            rule.LoadedExtensions[meop.Extension].AddParameter(
                                                                             "state",
                                                                             "RELATED,ESTABLISHED");

            //Create jump option to ACCEPT
            jopt = new JumpOption();
            jopt.Target = RuleTargets.Accept;
            //Add to rule
            rule.Options.Add(jopt);

            //Execute
            FirewallManager.instance.ApplyRule(rule);
            //Execute in default table named filter
            this.ruleSet.ExecRule(rule);
           
            //Create rule to drop anything else
            rule = new NetfilterRule();
           
            //Create append rule command
            acmd = new AppendRuleCommand();
            acmd.ChainName = this.chainName;
            //Set in the rule
            rule.Command = acmd;
           
            //Create jump option with drop target
            jopt = new JumpOption();
            jopt.Target = RuleTargets.Drop;
            //Add to rule
            rule.Options.Add(jopt);
           
            //Execute
            FirewallManager.instance.ApplyRule(rule);
            //Execute in default table named filter
            this.ruleSet.ExecRule(rule);
 

De tal modo que al ejecutar un programa con ese trozo de código para inicializar las líneas nos quedaría el siguiente conjunto de reglas (muestro la salida del comando iptables-save):

# Generated by iptables-save v1.3.5 on Fri Mar 23 18:06:53 2007
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
: OUTPUT ACCEPT [0:0]
:SharpKnocking-INPUT - [0:0]
-A INPUT -j SharpKnocking-INPUT
-A SharpKnocking-INPUT -i lo -j ACCEPT
-A SharpKnocking-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A SharpKnocking-INPUT -j DROP
COMMIT
# Completed on Fri Mar 23 18:06:53 2007
 

Así es como vamos a dejar las reglas del cortafuegos al inicio (también podríamos conservar las existentes e insertar nuestra cadena delante de las existentes). Sobre la marcha podremos ir añadiendo las ips aceptadas antes del drop final de la cadena y puede que incluyamos la opción de insertar nuestrar reglas sin eliminar las existentes.

mangelp | General | 22 Marzo, 10:55am
rss
atom

Main

Agosto 2008
Dom Lun Mar Mie Jue Vie Sab
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6

Categorías

Posts Recientes

Archivos de Blog

The mono project