IMHO il tuo ambiente del server web è difettoso perché potresti semplicemente sostituire 35.166.133.11 con 192.168.1.2 nelle fonti invece di instradare i pacchetti da 192.168.1.2 a lo0 (stato di conservazione 35.166.133.11) e in seguito reindirizzarli da lo0 a source en0 (192.168.1.2) di nuovo.
Ma in altre configurazioni può essere utile. Per esempio. se si esegue un secondo server Web che simula la pagina di test AMI di Amazon Linux su localhost o 192.168.1.3/4/5.
rdr accetta solo i pacchetti in entrata. Quindi, devi prima indirizzare quei pacchetti a lo0, quindi aggiungere una regola rdr (che li catturerà dato che verranno instradati da "qualche parte") per inviarli al tuo server web locale a 192.168.1.2.
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 en0 to 35.166.133.11 port 80 -> 192.168.1.2 port 80
# Step "1". Route new IPv4 TCP connections leaving en0 to lo0
pass out on en0 route-to lo0 proto tcp from en0 to 35.166.133.11 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 en0 to 35.166.133.11 port 80 -> 192.168.1.2 port 80
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 35.166.133.11 port 80 keep state
Nell'esempio precedente dovresti cambiare l'interfaccia en0 ad es. en1 if en0 non ha l'IP 192.168.1.2 ma en1 fa .
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 inet proto tcp from 192.168.1.2 to 35.166.133.11 port = 80 -> 192.168.1.2 port 80
anchor "/*" all
pass out on en0 route-to lo0 inet proto tcp from 192.168.1.2 to 35.166.133.11 port = 80 flags S/SA keep state
dummynet-anchor "/*" all
e in caso di successo caricarlo con sudo pfctl -e -f /etc/pf.conf
.
Dopo aver spento il server web sulla porta 80, puoi testarlo con netcat:
In una finestra di terminale inserisci sudo nc -l 80
. In una seconda finestra del terminale inserisci sudo nc 35.166.133.11 80
. Ora inserisci del testo nella seconda sessione di nc e premi il tasto Invio. Il testo dovrebbe apparire nella prima sessione di "ascolto" di nc. Puoi anche inserire del testo nella sessione di ascolto che dovrebbe apparire nella seconda finestra. Per terminare la sessione, inserisci ctrl D in una delle due sessioni di nc.