Noviembre 2006

Bien, durante los últimos días, yo y mi compañero hemos tenido las primeras conversaciones de diseño y planificación del proyecto.

Yo me encargaré principalmente de todos los aspectos de interfaz de usuario y programas clientes en general, mientras que Miguel Ángel se encargará principalmente de la parte de servidor, conexión con las librerías nativas que muy posiblemente tengamos que utilizar dependiendo de como resolvamos algunas cuestiones técnicas una vez que nos enfrentemos a ellas directamente.

Los principales componentes del programa sería los siguientes, según el diseño que propusimos finalmente:

  • Tendremos un programa cliente, que nos permitirá realizar una llamada desde cualquier ordenador, que por supuesto cumpla los requisitos para la ejecución del mismo (léase Mono - o .Net quizá).

  • Tendremos, en el ordenador que queremos proteger, por una parte una librería, encargada de, posiblemente, parsear los logs de iptables que nos permitirán saber si una determinada secuencia de paquetes han llegado, y por otra parte, una interfaz que nos permita definir dichas secuencias, y comunicar a iptables que abra los puertos indicados si llega, y que cree el log que permita reconocer la secuencia.

Con eso, deberíamos tener nuestro sistema de portknocking listo.

Como leí en algún sitio, para que un software llegue a funcionar correctamente, se necesitan al menos dos implementaciones, la primera de ellas nos pondrá en conctacto con el problema, y la segunda nos permitirá resolverlo con el conocimiento adquirido de los problemas que presentó la primera, de una manera posiblemente más elegante y eficiente. Por supuesto, esto es un concepto general, y esperemos que resovlamos los problemas que aparezcan de un plumazo face-smile-big.png

Durante las próximas semanas esperamos tener los primeros retazos de código, para ir abriendo boca.

Saludos.

luisro | General | 18 Noviembre, 5:29pm

¡Ya está habilitada la forja para el proyecto!.

De momento no subiremos archivos durante esta semana ya que aún andamos un poco escasos de tiempo y quedan cosas por planificar y postear en este santo blog.

Así que apuntaros el enlace: https://forja.rediris.es/projects/csl-csknocking/

Saludos.

mangelp | General | 13 Noviembre, 7:35pm

Modificación de las reglas del firewall

Queremos hacer un sistema de control de acceso a puertos así que lo primero que necesitaremos es la capacidad de modificar el fichero de configuración de iptables para introducir las reglas de acceso que nos permitan tal comportamiento.

Hay que modificar el fichero con cuidado para no dejar el sistema vulnerable, pero por otro lado hay varios programas de usuario para configurar ràpidamente las reglas del firewall. Así que cuando tengamos una primera versión del programa tendremos que investigar y ver que ocurre.

Si nuestra aplicación es incompatible con los wizards que editan las reglas de firewall quizás tengamos que considerar la opción de proporcionar nosotros mismos un mecanismo de configuración de reglas del firewall.

Captura de paquetes

Una vez que tengamos las reglas del sistema preparadas para que todo paquete entrante se bloquee, sin ofrecer ni siquierea un mensaje icmp de error, necesitamos un mecanismo que permita a un usuario remoto usar una secuencia secreta de llamadas que abrirá un puerto para que pueda conectarse a un determinado servicio.

Cada llamada puede ser un ping o cualquier otro tipo de tráfico dirigido a uno de los puertos cerrados. De modo que el sistema tiene que monitorizar la llegada de paquetes a un conjunto dado de puertos y comprobar el orden de llegada. Esa sería la llamada secreta que podría abrir un puerto para conexión por ssh, por ejemplo.

De este modo podríamos usar una de estas dos opciones:

  • Configurar las reglas del firewall para que loguee los paquetes rechazados que llegan a los puertos que están involucrados en la llamada. Habría que monitorizar y tratar los cambios en el fichero de log dado.
  • Usar una librería de captura de paquetes. Esta opción tiene la complejidad añadida de tener que realizar un wrapper en c# para mono de la librería en cuestión para que podamos utilizarla.

Yo inicialmente pienso que deberíamos usar una librería de captura de paquetes ya que la opción de parsear el log no es programáticamente tan interesante como el uso de la librería que requerirá realizar un wrapper en c# para usarla desde mono y que nos abstraiga de las complejidades de la misma. La opción de ir parseando el log es además una opción poco recomendable ya que no tiene un formato estándard.

Una librería bastante conocida es libpcap (http://www.tcpdump.org/) muy utilizada por aplicaciones como snort, nessus y netfilter. Pero conllevaría incluir una nueva librería a la lista de dependencias de la aplicación.

Aunque otra elección podría ser el demonio ulogd del proyecto netfilter (http://www.netfilter.org). éste demonio se encarga de funciones de log de paquetes , así que es una opción importante a considerar ya que es parte del mismo proyecto que iptables.

Hasta aquí mis dos ideas iniciales. Pronto mi compañero montará la forja y podremos iros contando cosas con un poco de código de base.

mangelp | General | 3 Noviembre, 6:39pm
rss
atom

Main

Noviembre 2006
Dom Lun Mar Mie Jue Vie Sab
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 1 2

Categorías

Posts Recientes

Archivos de Blog

The mono project