iptables equivalente per mac os x

Voglio inoltrare le richieste da 192.168.99.100:80 a 127.0.0.1:8000 . Questo è come farlo in Linux utilizzando iptables :

 iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000 

Come faccio la stessa cosa in MacOS X? Ho provato una combinazione di comandi ipfw senza molto successo:

  • IP multiple di TomatoUSB non inoltra
  • Domande IPTables e DHCP?
  • Ubuntu: Come aggiungere una regola iptables che UFW non può creare
  • Hacker bypassando iptables
  • Apache su Parallels CentOS non riesce a leggere i file host OSX
  • È sufficiente aggiungere regole iptables senza riavviare?
  •  ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80 

    (Il successo per me è indicare un browser a http://192.168.99.100 e ricevere una risposta da un server di sviluppo che ho eseguito su localhost:8000 )

  • Hostname a Localhost con Port - OSX
  • FreeBSD Jail con IP Loopback, IPFW e natd - Le connessioni in output non riescono a scappare
  • Perché ipfw non limita correttamente la width di banda?
  • Configurazione di Firewall di Mac OS X: qual è il modo più semplice per farlo?
  • Come faccio ad abilitare l'inoltro IP in MacOS X?
  • OS X 10.8: redirect le connessioni ssh avviate localmente a localhost: 22
  • 7 Solutions collect form web for “iptables equivalente per mac os x”

    Così ho scoperto un modo per farlo. Non sono sicuro se sia il modo preferito ma funziona! Al tuo guscio preferito:

     sudo ifconfig lo0 10.0.0.1 alias sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80 

    (L'alias a lo0 sembra essere la parte mancante)

    Se desideri un dominio (falso) per indicare questo nuovo alias, assicuratevi che / etc / hosts contenga la row:

     10.0.0.1 www.your-domain.com 

    Ho potuto get questo funzionamento utilizzando i comandi ifconfig e pfctl su Mac 10.10.2. Con il seguente approccio, ho mappato correttamente 127.0.0.1:3000 a mydomain.com localmente sulla mia macchina.

    Nella linea di command immettere i seguenti due comandi per inoltrare le connessioni a 127.0.0.1:3000 a 10.0.0.1 :

     sudo ifconfig lo0 10.0.0.1 alias echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef - 

    Quindi modificare il /etc/hosts o /private/etc/hosts e aggiungere la seguente row per mappare il tuo dominio in 10.0.0.1 .

     10.0.0.1 mydomain.com 

    Dopo aver salvato il file hosts scorrere il DNS locale:

     sudo discoveryutil udnsflushcaches 

    Ora apri mydomain.com in un browser e vedrai che il server è ospitato nella port di localhost (ad esempio 127.0.0.1:3000 ). In pratica questo process mappe un <ip>:<port> a un nuovo <ip> modo da poter mappare un host che IP.

    Questo ha funzionato bene per me:

    A partire da 10.5, OS X viene fornito con un nuovo firewall orientato all'applicazione anziché ipfw . Ma ipfw è ancora installato. Se hai problemi con la sua syntax, controlla i WaterRoof grafici come WaterRoof o Flying Buttress .

    HTH, PEra

    l'ordine delle regole è importnte, assicurati che non vi sia "negare tutto" prima che le regole consentano, o qualcosa del genere.

    Il tuo command sembra manca di un numero di regola; provare:

     ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80 

    (se non si esegue come root, dovrai prefisso con sudo). Un'altra cosa da controllare è che il firewall sia abilitato:

     sysctl net.inet.ip.fw.enable 

    Se ritorna con il valore 0 (spento), accenderlo con:

     sysctl -w sysctl net.inet.ip.fw.enable=1 

    … e quindi provvedere affinché venga reinabled quando il computer si riavvia. Il modo "appropriato" per fare questo è probabilmente quello di creare un elemento di lancio ( Lingon rende questo abbastanza facile). O semplicemente utilizzare uno degli strumenti GUI menzionati e fare attenzione ai dettagli.

    Anche a me wherevo fare una cosa simile di recente, e nella ricerca ho trovato questa risposta. Purtroppo la risposta di Nafe utilizza ipfw che ora è obsoleto e non disponibile in OSX; e la risposta di Kevin Leary è veramente un po 'malandata. Quindi ho dovuto fare qualcosa di meglio (pulito) e ho deciso di condividerlo qui per i posteri. Questa risposta è in gran parte basata sull'approccio menzionato a questo proposito .

    Come menziona OP, indicare un browser a 192.168.99.100 dovrebbe get una risposta da un server a localhost: 8000. Aggiungendo un alias a ifconfig non è realmente necessario, solo pfctl è sufficiente: per get questo il file /etc/pf.conf in /etc/pf.conf deve essere modificato.

    In primo luogo creiamo (con sudo) un nuovo file di ancoraggio (chiamarlo redirection ) a: /etc/pf.anchors/redirection . Questo è fondamentalmente un file di text normale e contiene la seguente row (proprio come nella risposta di Kevin Leary): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000 . Una volta creato il nuovo file di ancoraggio, deve essere fatto riferimento nel file pf.conf . Aprire il file pf.conf con sudo e aggiungere rdr-anchor "redirection" dopo l'ultima rdr-anchor line (che è rdr-anchor "com.apple/*" ) e aggiungere il load anchor "redirection" from "/etc/pf.anchors/redirection" alla fine.

    In definitiva, questo è ciò che dovrebbe essere il file pf.conf:

     scrub-anchor "com.apple/*" nat-anchor "com.apple/*" rdr-anchor "com.apple/*" rdr-anchor "redirection" #added for redirection/port forwarding dummynet-anchor "com.apple/*" anchor "com.apple/*" load anchor "com.apple" from "/etc/pf.anchors/com.apple" load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding 

    E questo è quasi. Basta riavviare pfctl emettendo sudo pfctl -d per distriggersrlo prima e poi sudo pfctl -fe /etc/pf.conf per riavviarlo di nuovo.

    Adesso, se avete bisogno di questo accadere automaticamente dopo each riavvio, bisogna fare un altro po 'di lavoro: il daemon di lancio per pfctl deve essere aggiornato (la chiave di riferimento menziona che pf è abilitato automaticamente all'avvio, tuttavia questo non sembra sia il caso di guardare il codice). Aprire (con sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist e cercare questo:

     <arrays> <string>pfctl</string> <string>-f</string> <string>/etc/pf.conf</string> </arrays> 

    e aggiungi la row <string>-e</string> per renderla in questo modo:

     <arrays> <string>pfctl</string> <string>-e</string> <string>-f</string> <string>/etc/pf.conf</string> </arrays> 

    Questo dovrebbe farlo.

    Caveat : Apple non permette più di modificare i file del demone di lancio proprio come quello (non con sudo, né chmod, né niente altro). L' unico modo è quello di eseguire le operazioni con le impostazioni di Protezione sistema di integrità : avviare la modalità di ripristino e avviare il terminal. Controllare lo stato SIP con csrutil status , dovrebbe essere generalmente abilitato. Distriggersrlo con csrutil disable e riavviare csrutil disable in modalità normale e quindi eseguire le modifiche al file plist come descritto sopra. Una volta fatto, tornare alla modalità di ripristino e ritriggersre la protezione (è in atto per una buona ragione) emettendo csrutil enable .

    Spiegazione: si può controllare emettendo il command ifconfig che 127.0.0.1 è già l'alias (predefinito) per lo localhost lo0 – questo fatto viene utilizzato per evitare di aggiungere un alias aggiuntivo per localhost e utilizzare semplicemente l'indirizzo predefinito nel pf.conf file.

    UPDATE: Sfortunatamente, sembra che il caricamento del file all'avvio non funziona. Sto ancora cercando di get aiuto per farlo ordinare. Fino ad allora, eseguire sudo -f /etc/pfctl.conf dopo l'avvio fa il trucco.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.