filtro del pacchetto macOS (port forwarding)

3

Sto provando a reindirizzare il traffico in uscita alla porta di destinazione 80 alla porta proxy locale 127.0.0.1:8080 senza successo

/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"

Quindi:

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

Il traffico locale 127.0.0.1:80 viene reindirizzato a 127.0.0.1:8080, ma non quello esterno, quello verso Internet.

    
posta aminovich 17.12.2017 - 13:47
fonte

1 risposta

1

Puoi solo reindirizzare il traffico in entrata . Qualsiasi traffico in uscita sulla porta 80 non è influenzato dalla regola rdr.

Per reindirizzare il traffico in uscita alla porta 80 devi re-instradarlo prima verso lo0 quindi reindirizzare verso la porta proxy:

L'ordine nel file di configurazione è necessariamente rdr pacchetti incomming , quindi pacchetti di filtri (come pass), ma cronologicamente la seconda regola colpirà per prima (su en0), che attiverà quindi la prima regola (su 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

in pf.conf questo sarebbe simile a questo:

...
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

Nell'esempio precedente presumo che en0 sia la tua sola interfaccia en in uscita.

Scarica il tuo pf.conf corrente e ferma pf: sudo pfctl -d . Quindi aggiungi le due righe aggiuntive sopra. Dopo aver modificato pf.conf, controlla la sintassi del file con sudo pfctl -vnf /etc/pf.conf che dovrebbe produrre il seguente output:

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

e in caso di successo caricarlo con sudo pfctl -e -f /etc/pf.conf .

Un sistema appropriato e una configurazione proxy (e applicazioni ben funzionanti) non richiedono tali regole pf!

    
risposta data 18.12.2017 - 00:07
fonte

Leggi altre domande sui tag