|
En nuestro proyecto necesitamos controlar de alguna manera la llegada de tráfico entrante a los puertos de la máquina. El tráfico del que queremos ser notificados por lo normal serán paquetes que han sido descartados por el resto de reglas y están apunto de ser rechazados o descartados (en función de cual sea la última regla del fichero iptables). Tampoco recogeremos todo el tráfico descartado, ya que sólo nos interesa el tráfico que vaya a los puertos que se hayan configurado para ser gestionados para port knocking. Tras consultar la página de manual de iptables (man iptables) me he dado cuenta de que iptables proporciona todo lo necesario y es posible que no tengamos que usar ninguna otra librería aparte (por ejemplo libpcap como ya había comentado). Las dos opciones principales que hay son el target LOG y el target ULOG. 1 - Target LOG.Iptables proporciona un target LOG que permite lloguear el paquete en el log del systema (/var/log/messages en mi fc3). También permite opciones para poner un prefijo al principio de la entrada de log lo cual sería muy útil para extraer del log las líneas que nos interesan. Esta opción es simple y bastaría con monitorizar el log, pero tiene el inconveniente de que dispara el tamaño de este log si no se acota que tipo de paquetes son logueados al ser rechazados. Por otro lado limita la información disponible en el log ya que no loguea el cuerpo del paquete, loguea los datos básicos de ips fuente y destino, puertos y alguna cosa mas. Esto evitaría que pudieramos enviar desde un cliente un mensaje en los paquetes que utilizamos para "llamar a la puerta". 2 - Target ULOGOtra opción que nos proporciona iptables es el target ULOG que permite loguear los paquetes y pasarlos al espacio de usuario a través de un socket netlink. Esto requiere mezclar código c y c# para interconectar el uso del socket con c# así que en principio es más complejo, pero tiene la ventaja de que el proceso que se encargue de analizar los paquetes estará funcionando como aplicación de usuario (menos privilegios y por tanto mayor seguridad) y además podremos analizar el contenido de los paquetes de modo que los clientes cuando "llamen a la puerta" nos manden un mensaje troceado en los paquetes. ¿Que opción implementaré?Dado que tanto una como otra son opciones válidas lo suyo sería implementar las dos y dejar que por configuración se elija la opción que se quiera. Así que comenzaré por investigar e implementar la primera y si me da tiempo podría implementar la segunda de manera que se puede especificar por configuración cual de las dos opciones usar. Para implementar el proceso que vaya leyendo el fichero de log usaré las implementaciones de clases que se han introducido con la última versión de mono en el namespace System.ServiceProcess.
Lo cual es una suerte ya que si funciona correctamente nos habrá simplificado mucho la tarea de crear el demonio de sharpknocking Cuando disponga de algo de código de ejemplo que funcione lo comenzaré a subir a la forja para ir dándole uso. Saludos.
mangelp | SharpKnocking | 2 Diciembre, 1:46pm
|
Main
Categorías
Posts Recientes
Archivos de Blog
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||