filtro de paquetes macOS (reenvío de puertos)

3

Estoy intentando redireccionar el tráfico saliente al puerto de destino 80 al puerto proxy local 127.0.0.1:8080 sin éxito

/etc/pf.anchors/com.forwarding

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080

/etc/pf.conf

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "myproxy"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "myproxy" from "/etc/pf.anchors/com.forwarding"

Entonces:

sudo sysctl net.inet.ip.forwarding=1
sudo pfctl -ef /etc/pf.conf

El tráfico local 127.0.0.1:80 se redirige a 127.0.0.1:8080, pero no el externo, el que está hacia internet.

    
pregunta aminovich 17.12.2017 - 13:47

1 respuesta

1

Solo puede redirigir el tráfico entrante . Cualquier tráfico saliente al puerto 80 no se ve afectado por su regla rdr.

Para redirigir el tráfico saliente al puerto 80, primero debe redirigirlo a lo0 y luego redirigirlo al puerto proxy:

El orden en el archivo de configuración es necesariamente rdr incomming paquets , luego filter packets (como pasa), pero cronológicamente, la 2ª regla llegará primero (en en0), que luego activará la primera regla (en lo0).

# Step "2". redirect those same packets that were routed to lo0 below
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
# Step "1". Route new IPv4 TCP connections leaving en0 to lo0
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state

en pf.conf esto se vería así:

...
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state

En el ejemplo anterior, asumo que en0 es su única interfaz de salida en .

Descargue su pf.conf actual y detenga pf: sudo pfctl -d . Luego agrega las dos líneas adicionales arriba. Después de modificar pf.conf, compruebe la sintaxis del archivo con sudo pfctl -vnf /etc/pf.conf , lo que debería generar el siguiente resultado:

pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

scrub-anchor "/*" all fragment reassemble
nat-anchor "/*" all
rdr-anchor "/*" all
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
anchor "/*" all
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 flags S/SA keep state
dummynet-anchor "/*" all

y si tiene éxito, cárguelo con sudo pfctl -e -f /etc/pf.conf .

¡Un sistema adecuado y la configuración de proxy (y las aplicaciones que se comportan bien) no requieren tales reglas de pf!     

respondido por el klanomath 18.12.2017 - 00:07

Lea otras preguntas en las etiquetas