Redirigir tráfico con destino puerto 80 al router hacia otro puerto de localhost

Iniciado por Kaxperday, 19 Septiembre 2015, 12:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

Kaxperday

Hola, básicamente quiero que todos los paquetes salientes hacia el router con destino puerto 80 sean redirigidos hacia mí (localhost) y el puerto escogido como por ejemplo el 10000, hacer este comando pero para windows:

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>

Pero probando con netsh, lo más parecido que encuentro es esto:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.0.156 connectport=10000 connectaddress=192.168.0.156

Que se supone que redirige los paquetes que van a puerto 80 con destino cualquiera, hacia mi ip en la red, pero a pesar de hacerlo las páginas cargan y tengo conexión luego no redirige puesto que llega al router y salen, ¿que puedo hacer?.

Saludos.

La investigación apunta a: https://social.technet.microsoft.com/Forums/windows/en-US/6be8d1f0-f01b-47cf-beae-4d2cfc9c4111/redirect-all-local-port-80-traffic-to-remote-proxy-server?forum=w7itpronetworking

https://technet.microsoft.com/es-es/library/cc731131(v=ws.10).aspx

Con esto no crea ningún servidor proxy y todas páginas cargan por igual:

set proxy="http=myproxy:80" bypass-list="*.com"

No hay manera.. ¿?

C:\Users\cabra>netsh interface portproxy show all

Escuchar en ipv4:       Conectar a ipv4:

Dirección       Puerto      Dirección       Puerto
--------------- ----------  --------------- ----------
localhost       80          localhost       123


Estoy probando con wireshark filtrando los puertos a los que redirijo y no llega ningun paquete, PUTO WINDOWS! :*****

Recomiendo está página para hacer pruebas:

http://raunomagi.blogspot.com.es/2012/05/port-forwarding-on-windows-computers.html

Interesante, he probado esto:

C:\WINDOWS\system32>netsh interface portproxy add v4tov4 listenport=80 listenaddress=localhost connectport=10000 connectaddress=localhost


C:\WINDOWS\system32>netsh interface portproxy show all

Escuchar en ipv4:       Conectar a ipv4:

Dirección       Puerto      Dirección       Puerto
--------------- ----------  --------------- ----------
localhost       80          localhost       10000


Y al conectar con un cliente en mi puerto 80 funcionaba, lo que hace es establecer un servidor en puerto 80 para conexiones de puerto 10000? Esto no es port fordwarding!, bueno seguiré probando a ver si comprendo un poco más.

.. http://stackoverflow.com/questions/24646165/netsh-port-forwarding-from-local-port-to-local-port-not-working

Todo esto lo que hace es modificar la entrada hacia el pc no la salida, lo que hace crea un server en un puerto escuchando, y redirige a otro puerto, lo que busco es que redirija la salida hacia mi, de manera que no habrá paquetes que salgan hacia el router, pero parece que no es el camino.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Randomize

Deberías haberlo puesto en redes...


Moderador global, moderador global, modera, please!

Kaxperday

Cita de: Randomize en 19 Septiembre 2015, 13:17 PM
Deberías haberlo puesto en redes...


Moderador global, moderador global, modera, please!

oki, de todas formas también tiene que ver mucho con windows:

Con programas externos se podría hacer como pone aquí:

http://netsec.ws/?p=272

Pero eso sería lo último

Si se puedieran matar paquetes con winpcap para que no llegaran a su destino, podríamos leerlos y si son HTTP eliminarlos y mandarlos modificados, pero no se podrá..
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Randomize

Recuerda que como en Matrix pueden seccionarte el cable y ver lo que tu ves...

Y más cositas que me dejo en el tintero  :P

dato000

Cita de: Kaxperday en 19 Septiembre 2015, 13:20 PM
oki, de todas formas también tiene que ver mucho con windows:

Con programas externos se podría hacer como pone aquí:

http://netsec.ws/?p=272

Pero eso sería lo último

Si se puedieran matar paquetes con winpcap para que no llegaran a su destino, podríamos leerlos y si son HTTP eliminarlos y mandarlos modificados, pero no se podrá..

Eso no tiene nada que ver con windows, al menos no de la forma que lo pones. Porque eso se hace desde un router. Ya los programas externos, son eso, programas que aunque funcionen en determinada plataforma tienen sus propias directivas y programaciones de trabajo.

Ahora
Lo que necesitas es configurar correctamente IIS, para configurar correctamente el servidor y que reciba peticiones en determinado puerto, por ejemplo para que escuche:

Citarhttp://localhost:81/miProyecto

Debes configurar el IIS (Internet Information Services) correspondiente a ese proyecto para realizar eso.

Pero lo que tu dices respecto al trafico es una regla que aplica directamente al dispositivo o software que controla el trafico de datos, eso o es un router, o puede ser otro pc, pero si es con pc debe usar un software particular para controlar protocolos de enrutamiento. Como dije, eso en un router es aplicando unas sencillas rutas de forwarding, y aplicar una directiva en el firewall, y eso depende del router.

En linux la tienes más facil con Iptables por ejemplo, pero se olvida que iptables es simplemente un programa añadido a linux, el kernel como tal no sabe nada de ese tipo de parametros. Puedes ver que existen distros que no vienen con iptables, porque vienen más a usuarios particulares o con politicas diferentes.

Realmente si estas interesado en saber de ese tipo de cosas para windows, aprendas Visual Studio, te facilita mucho la vida y es un paquete poderosisisisisisisisisisimo para cualquier cosa, y los paquetes express gratuitos son muy completos para su area.

mmmm ahora que lo pienso el maese Elektro podria saber algo de eso a punta de batch. El si sabe hacer bombas nucleares con el cmd.



Kaxperday

Buenas esta respuesta ya me gusta más, acabo de mirar un poco eso del "Internet Information Services" y parece ser una posible solución, aquí dice como activarlo:

https://msdn.microsoft.com/es-es/library/ms181052(v=vs.80).aspx

Pero, ¿no se puede instalar desde C++ de manera automática, modificando algún registro... etc..?, de todas formas ¿activando el IIS es la única manera de hacer lo que propongo o con netsh se puede hacer?, ya hablaré con elektro a ver si sabe algo. De todas formas, estaría bien que me contaras algo del ISS, una vez activado lo que habría que hacer, ¿eso ya permitiría redirigir el tráfico HTTP con el netsh?.

Visual studio ya lo conozco bien, lo estoy programando en C++ sobre visual studio, y la idea es hacer un HTTP Proxy entre mi ordenador y el router, para captar los datos que salen modificarlos y lanzarlos al router luego recibir la respuesta del router y mandarla al ordenador, un simple proxy. Quiero decir al ordenador "los paquetes que vayan al puerto 80 envialos al puerto 8080", allí tendré un servidor esperando y los recogerá y mandará peticiones a los servidores web haciendo de cliente y luego traerá las respuestas, y las reenviará.

Pero el objetivo no es probarlo, es crear una aplicación, y no pienso poner "vaya al panel de control, vaya a agregar o quitar programas, pulse activar IIS...", debe de ser doble click y que el programa lo haga todo.

Lo del router, pues claro se podría hacer sobre router, pero no sería necesario llegar allí además de que no sería una buena solución, porque dependería de routers, simplemente es decirle a windows, los paquetes que vayan al router con puerto 80 me los pasas a este puerto de esta ip, en vez de al router, la idea es muy simple, la implementación casi inexistente.

Saludos.

Edito:

CitarAhora
Lo que necesitas es configurar correctamente IIS, para configurar correctamente el servidor y que reciba peticiones en determinado puerto, por ejemplo para que escuche:

No creo que esa sea la solución, con el IIS lo que hacemos es crear un servidor, de lo que queramos HTTP, FTP, etc. Pero ¿que tiene que ver eso con controlar los datos salientes del ordenador?, ¿acaso iptables no es software?.

Lo mejor que tengo ahora es esto: Rinetd al descargar viene con el codigo fuente pero no se si funcionará, preferiría otra manera antes de llegar a eso.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eleкtro

Buenas

...¡Muchas preguntas!.

Yo no se apenas sobre temas tan específicos o triviales de redes, pero suponiendo que el IIS te sirviera (que no se si servirá para ese propósito en concreto), entonces te confirmo que si que puedes automatizar la instalación (cómo con cualquier otro paquete/característica de Windows) y habilitarlo arbitrariamente, ahora, por lo que comentas por tus propias conclusiones parece que no te sirve para controlar el tráfico saliente, no lo se.

Bueno, te explico de todas formas, con la herramienta de Microsoft llamada DISM (Deployment Image Servicing and Management) que ya viene integrada en Windows (también la puedes obtener en el SDK de Windows), puedes listar los nombres de las características de IIS disponibles en el S.O.:
Dism.exe /Get-Features /Format:Table /Online

Cita de: DISMIIS-ApplicationDevelopment
IIS-CommonHttpFeatures
IIS-HealthAndDiagnostics
IIS-HttpCompressionDynamic
IIS-HttpErrors
IIS-HttpLogging
IIS-HttpRedirect
IIS-HttpTracing
IIS-IIS6ManagementCompatibility
IIS-IPSecurity
IIS-LoggingLibraries
IIS-ManagementScriptingTools
IIS-Metabase
IIS-NetFxExtensibility
IIS-NetFxExtensibility45
IIS-Performance
IIS-RequestFiltering
IIS-RequestMonitor
IIS-Security
IIS-URLAuthorization
IIS-WebServer
IIS-WebServerManagementTools
IIS-WebServerRole

Con la misma herramienta puedes activar las características que requieras:
Dism.exe /Enable-Feature /FeatureName:"Nombre de característica" /Online /LimitAccess:"False" /English /LogPath:".\Dism.log" /LogLevel:"3"

Otra manera sería utilizando la herramienta pkmgr (Package Manager) de Microsoft, utilizando un archivo .xml de instalación desatendida de la característica en cuestión.
Using Unattended Setup to Install IIS 7.0 - Microsoft

PD: No existe forma programada para llevar a cabo esta tarea mediante la libreria de classes de VB.Net/C# o usando C++ (WinAPI), más que iniciar y controlar el estado y el buffer de salida del proceso (DISM.exe/pkgmgr.exe) de forma automatizada, o en su defecto utilizar la API de DISM (desarrollada en C/C++).

Tal vez con la class Win32_ServerFeature del instrumental de Windows (WMI) se pueda lograr algo:
Server Feature Provider - MSDN

EDITO: Y cómo en casi todo, siempre habrá wrappers de APIS de C++ para .Net que podrían estar bien, cómo este (no lo he probado):
Managed DismApi Wrapper - Codeplex

Saludos








Kaxperday

Hola elektro, gracias por las respuesta.

Por lo visto tu solución pasa por instalar IIS, y probar si funciona levantando un server en windows, algo que no veo como solución pues, ¿qué lograríamos dato000? (quizás lo entendió mal), los datos seguirían saliendo hacia el router de igual forma, necesitamos el puente que vaya de un puerto a otro.

Como bien dices elektro, hay una forma de automatizar el proceso, sin tener que pasar por el panel de control..., que ya la encontré en stack overflow, y sí usa dism.exe:

http://stackoverflow.com/questions/16079030/better-way-to-install-iis7-programmatically

Pero deberas, eso levantaría un servidor en este caso HTTP, ¿y ahora que hemos ganado?.

Había pensado en usar winpcap para detectar los paquetes salientes con puerto de destino 80, y eliminarlos o destruirlos de alguna manera, pero cuando los detecta ya han sido eliminados o están en proceso. ¿No se puede hacer nada con sockets?, solo habría que bindear un puerto como el 1000 escuchando mensajes entrantes, entonces desviamos los paquetes salientes por puerto 80 al puerto 1000, y vuala. Pero no se puede sin esa redirección, y como puse en el primer mensaje esas no parecen funcionar :////.

Saludos, a ver como me las apaño, parece que windows tiene esto bastante impenetrable. Y quiero montarme el server proxy. Si hay apps como intercepter-ng lo hacen, será porque han conseguido crear ese puente ¿no?, la idea final es implementar un sslstrip, pero primero tengo que hacer esto para acceder a los paquetes y modificarlos y así poderlos reenviar.

Saludos!!.

Edito: Siempre cabe la posibilidad muy sufrida que no se me pasa aún por la cabeza de hacer tu el ip fordwarding en vez de que lo haga windows, de esta manera podremos modificar los paquetes de las victimas de la red, pero no los nuestros, y habría que implementar muchos paquetes, algo que paso por ahora, pero si no hay otra posibilidad habrá que plantearlo.

No me digan que no molaría hacer esto

Bueno, aquí llega la conclusión final y la edición delicatesse, tras probar el intercepter-ng en una máquina virtual para ver como hace funcionar el sslstrip me he dado cuenta que el valor SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\IPEnableRouter está todo el tiempo a 0, a pesar de que tenía selecionado el ip fordwarding, eso quiere decir que el propio programa es el que hace el IP FORDWARDING, y no le piden a windows que lo haga, pues una vez lo activemos en el no hay manera de detenerlo como estamos viendo, luego habrá que implementar una manera para redirigir los paquetes ip que nos llegan de los hosts a su destino, y viceversa, de esta manera si tendremos acceso a los paquetes, pero son muchos (https://en.wikipedia.org/wiki/Internet_Protocol) y supongo que no podremos aplicar el mismo algoritmo de modificación y redireción a todos, luego estoy bastante jodido, pero ¿y si SI?, ya lo descubriré, pero la solución con windows no pasa como con linux de hacer mitm iptables y servidor sslstrip, sino que es mitm hacer de proxy ip para los hosts (tu no podrías incluirte ojo), y sslstrip.

Ojalá hubiera otra manera, redirigiendo el tráfico de un puerto a otro, pero parece que no encuentro nada, he probado y preguntado, supongo que solo queda la vía de redirigir los paquetes ip manualmente, si alguien tiene otra solución al problema, será bien recibida, doy el tema por zanjado.

Bueno, en los HTTP puedo apreciar que cambia el checksum, el tiempo de vida, y las direcciones mac origen y destino, si es solo eso para todos, será fiesta, y algo me hace pensar que si :**

SOLUCIONADO, NO ACTIVAR IP FORDWARDING, RECOGER PAQUETES IP DE LOS HOSTS CON WINPCAP, MODIFICAR MACS DE ORIGEN Y DESTINO, MODIFICAR TTL Y MODIFICAR EL CHEKSUM, ALE.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.