PDA

Ver la Versión Completa : como desarrollar un firewall


manoley23
07-11-2006, 10:02:02
Buenas!!

Estoy interesado en hacer una especie de firewall sencillito, pero no se muy bien como empezar. Tengo alguna experiencia en programación con sockets, pero me temo que para hacer un firewall decente debería utilizar llamadas a la API de Windows a más bajo nivel.

Si alguien me pudiera dar alguna pista para empezar se lo agradecería, luego yo ya me buscaría la vida.

Saludos y gracias!

Manolo.

tefots
07-11-2006, 12:10:21
Buenas!!

Estoy interesado en hacer una especie de firewall sencillito, pero no se muy bien como empezar. Tengo alguna experiencia en programación con sockets, pero me temo que para hacer un firewall decente debería utilizar llamadas a la API de Windows a más bajo nivel.

Si alguien me pudiera dar alguna pista para empezar se lo agradecería, luego yo ya me buscaría la vida.

Saludos y gracias!

Manolo.

Hola ,
como te imaginas , lo del firewall no tiene nada que ver con la programacion de sockets , tendrás que acceder al api para capturar cuando alguna aplicacion use puertos , bloquearlos , denegarles el acceso o concederselo (bloqueando el proceso , o bloqueando el puerto).

desconozco dicha api , o cuales son las llamadas a realizar , pero queo que los tiros pueden ir por aqui http://delphi.about.com/od/fullcodeprojects/l/aa112903a.htm

mirate la iphelp api , ftp://ftp.delphi-jedi.org/api/IPHlpAPI.zip , lleva un par de demos , un clone del netstat , y route.

son llamadas indocumentadas, con lo que tendrás que buscarte un poco la vida , para ver que llamadas has de llamar.

saludos

manoley23
07-11-2006, 12:20:51
Muchas gracias tefots! De momento ya tengo para pelearme un rato.
Cualquier avance, os cuento!

Manolo.

seoane
07-11-2006, 12:27:28
Estoy interesado en hacer una especie de firewall sencillito, pero no se muy bien como empezar. Tengo alguna experiencia en programación con sockets, pero me temo que para hacer un firewall decente debería utilizar llamadas a la API de Windows a más bajo nivel.


Pues me temo que no lo podrás hacer, al menos con Delphi. Los firewall están a mas "bajo nivel" del que tu piensas, de hecho son drivers, es decir, se ejecutan a nivel del Kernel. Delphi tiene sus limites, y unos de ellos es que no puede compilar drivers.

Si tienes mucho interés, puedes bajarte el Driver Development Kit de la web de microsoft, dentro del kit encontraras un compilador capaz de generar drivers, cabeceras, librerías e incluso algún ejemplo. Lo malo es que es programación en C al mas puro estilo "Bloc de notas", que los drivers son muy difíciles de depurar y que cualquier error al ejecutarse a nivel del kernel provoca la caída de todo el sistema. Pero los ejemplos son muy interesantes, y echarles un vistazo nunca esta de mas para saber como funcionan las tripas de windows.

Por ultimo, puede que en vez de un firewal te conformes con hacer un Proxy, esto si que lo puedes hacer con Delphi. Ni siquiera tendrías que bajar hasta los sokects, podrías implementar un Proxy para http con Indy de una manera muy sencilla. Pero claro, no es lo que tu pedías ...

manoley23
07-11-2006, 13:08:57
gracias Seoane, y por lo que ando leyendo por ahi, me temo que tienes toda la razón... existen herramientas para construir un sniffer, pero p ej. para bloquear puertos tendría que ir mas abajo aun...

seoane
07-11-2006, 13:16:42
En windows tampoco es sencillo hacer un sniffer, al fin y al cabo también se ejecutan a nivel del kernel, pero hay herramientas como Wireshark (http://www.wireshark.org/) que te pueden facilitar el trabajo.

Lo único que se puede hacer con funciones de la API, hasta donde yo se, son monitores de red tipo netstat como ya te indico tefots. Pero se limitan a monitorizar el trafico, ni se puede controlarlo, ni echarle un vistazo a los paquetes como haría un sniffer.

tefots
07-11-2006, 17:01:23
pues entonces si es al nivel de drivers , es mas complicado , tendrás que realizar una aplicacion/dll en modo kernel que haga de interfaz ,y a través de esta conectarte al driver tcpip.sys.

sobre sniffers, tambien es en modo kernel , para el que le interese aqui hay una demo, hecha en delphi
http://www.felix-colibri.com/papers/colibri_utilities/tcp_ip_sniffer/tcp_ip_sniffer.html#ip_help_api

aqui hay mas info basica de como hacer un firewall en windows
http://www.ntndis.com/w&p.php?id=14

tambien puedes usar alguna dll ya hecha que te haga de interfaz entre el driver y tu aplicación , supongo que habrán gratuitas , como esta http://www.effectmatrix.com/easysec/. , solo tienes que declarar las funciones en delphiy usarlas. , por cierto , viene con documentacion http://www.effectmatrix.com/easysec/firewall/espfsdk-manual.doc.

saludos.

ArdiIIa
12-07-2007, 11:45:33
En windows tampoco es sencillo hacer un sniffer, al fin y al cabo también se ejecutan a nivel del kernel

He visto este hilo por casualidad...

Bueno ya hemos visto que no es tan difícil fiscalizar y compartir un puerto, verdad ??

seoane
12-07-2007, 13:08:27
Bueno ya hemos visto que no es tan difícil fiscalizar y compartir un puerto, verdad ??

Caramba !!! Resucitando hilos para hacerme comer mis palabras :D Jejeje

Pues la verdad es que no he tenido tiempo de revisar tu ejemplo Ardilla, lo haré en cuanto pueda. Pero sigo afirmando que la mayoría, por no decir todos, los firewall (incluidos antivirus) actúan a nivel del kernel. Claro que puede haber mas alternativas (ahora mismo se me ocurre hacer un hook a las APIS del winsock) , pero si normalmente se usa esa forma, por algo sera.

ArdiIIa
12-07-2007, 13:42:42
Caramba !!! Resucitando hilos para hacerme comer mis palabras :D Jejeje


:D Ni mucho menos...., Faltaría !!!:D

Me refería concretamente al asunto el sniffer.


PD: Ahora estoy también mirando un hilo del 2006 sobre WAN IP Address y snmp, que parece que no quedó muy claro, y la verdad es que hasta ahora, no encuentro nada óptimo...

seoane
12-07-2007, 14:32:49
Ahora estoy también mirando un hilo del 2006 sobre WAN IP Address y snmp


Eso, eso ... empieza a revisar todos mis hilos. Tengo algunos del 2004 en los que no estuve muy fino :p ;)

De todas formas, en el hilo del que hablas, recuerdo haber buscado por todas partes el OID para obtener la ip, y no fui capaz de encontrar nada. Espero que tu tengas mas suerte :D

Por cierto, y sin que venga a cuento, buscando mis primeros hilos veo que hay un paréntesis de dos años, entre mis 4 primeros mensajes y el resto. Parece que no me lleve muy buena impresión del club la primera vez que vine :D :p

ArdiIIa
12-07-2007, 17:15:22
Eso, eso ... empieza a revisar todos mis hilos. Tengo algunos del 2004 en los que no estuve muy fino :p ;)


Valeeee!!:D :D pero creo que ahora, actualmente, me tiene mas cuenta o casi mas cuenta irme a tu web..., la que por cierto "mola mogollon".

De todas formas, en el hilo del que hablas, recuerdo haber buscado por todas partes el OID para obtener la ip, y no fui capaz de encontrar nada. Espero que tu tengas mas suerte :D


Casi todos los caminos me conducen al php, java, etc... Pues vaya tontería, mira que ni el IPCONFIG, ni el NSLOOKUP sacan nada en claro.

No me puedo creer que los router ejerzan tal ocaso...


Por cierto, y sin que venga a cuento, buscando mis primeros hilos veo que hay un paréntesis de dos años, entre mis 4 primeros mensajes y el resto. Parece que no me lleve muy buena impresión del club la primera vez que vine :D :p


Mas o menos algo parecido a lo mio (rachas de inasistencia), pero lo mío fueron otras cosas.
No obstante, si no recuerdo mal, yo ya tenía contacto con el club de delphi antes de su propia existencia.....:cool:

josejp1
14-03-2009, 00:12:17
Bueno si quieres empezar por hacer un sniffer aquí tienes un ejemplo

http://delphimagic.blogspot.com/2009/03/packet-sniffer-con-delphi.html

Alzheimer
20-03-2009, 00:47:06
hola gente...>
estoy realmente interesado en todo esto de poder manipular a mi antojo los puertos de red sobre Windows... y es que estoy cansado de tener tantos puertos de red abiertos por gusto y windows es realmente un colador de gente si se está conectado a Internet... debrían ver lo limpias que estan las máquinas que trabajan bajo SO Ubuntu cuando sueltas un scan de puertos en ella...>>> casi nada está abierto, y los que están están porque el usuario quiere....

creo que realmente me es necesario controlar el flujo de información que se manipula en mi máquina a través de la red y para eso debo cerrar unos cuantos puertos que no necesito que estén abiertos.!!!

necesito su ayuda!!!