La versión corta:
¿Cómo redirijo todo el tráfico del puerto en2 80/443 a 127.0.0.1:8080 cuando he habilitado Internet Sharing en OS X Mountain Lion (10.8)?
Algunos antecedentes:
Estoy haciendo una tesis de maestría donde evaluaré la seguridad de la comunicación para varias aplicaciones de teléfonos inteligentes. Elegí usar mi nuevo MacBook Air como enrutador.
Conecté mi Air a Internet con USB Ethernet y configuré Internet Sharing en mi Wifi. Esto funciona bien. Puedo conectar otros dispositivos a mi Air a través de wifi y acceder a Internet. ¡Gran!
Ahora quiero interceptar este tráfico y modificarlo sobre la marcha. Pensé que necesitaba un proxy para hacer esto, pero necesito uno transparente, donde no tengo que hacer ninguna configuración en el dispositivo. Descubrí que mitmproxy ofrece exactamente estas características. Así que lo tengo funcionando en 127.0.0.1:8080, listo para interceptar el tráfico.
Desafortunadamente, estoy atascado tratando de redirigir mi tráfico proveniente del wifi (en2) en el puerto 80 y 443 a 127.0.0.1:8080. Los documentos de mitmproxy sugieren una configuración para pfctl pero no funciona. Me di cuenta de que Apple ha proporcionado alguna configuración para compartir Internet, habilitando NAT. Entonces, si no uso su configuración, Internet Sharing deja de funcionar. Y cuando trato de agregar las líneas rdr a su configuración, no tiene efecto (probé en varios lugares en el archivo /etc/pf.conf). Mi tráfico simplemente pasa a Internet, sin pasar por el mitmproxy.
Encontré la respuesta.
Cargué mis reglas como parte del ancla, com.apple/100.InternetSharing/natpmp
que es la que se usa para compartir Internet.
El archivo mitm.pf.conf
contiene las reglas:
rdr on bridge0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr on bridge0 proto tcp from any to any port 443 -> 127.0.0.1 port 8080`
Cárguelo usando el ancla de Internet Sharing:
sudo pfctl -a com.apple/100.InternetSharing/natpmp -f mitm.pf.conf
En una situación similar, he usado el firewall para redirigir el tráfico de una NIC al proxy. Podrías usar algo así:
$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 80 in via en1
$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 443 in via en1
Si funcionó bien para mí.
También puede utilizar el programa gratuito WaterRoof como interfaz gráfica de usuario para configurar el cortafuegos. No agrega nada al comando ipsw, solo le brinda un acceso más fácil a todas las opciones.
Esta página me ayudó mucho a establecer mi configuración:
Christoffer Reijer
Brady