Vraag iptables-equivalent voor mac os x


Ik wil verzoeken doorsturen van 192.168.99.100:80 naar 127.0.0.1:8000. Dit is hoe ik het zou doen in Linux iptables:

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

Hoe doe ik hetzelfde in MacOS X? Ik probeerde een combinatie uit ipfw commando's zonder veel succes:

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

(Succes voor mij wijst een browser naar http://192.168.99.100 en een antwoord krijgen van een ontwikkelserver waarop ik actief ben localhost:8000)


53
2018-01-13 20:46


oorsprong


Hebben we het over OSX Client of Server? - Scott Pack
Het is sneeuwluipaard. - nafe
Is er een reden waarom u niet alleen uw webserver kunt configureren om ook op 192.168.99.100:80 te luisteren? - Zoredache
@Zoredache Luisteren naar poort 80 heeft sudo nodig en sommige webservers laten geen privileges snel genoeg vallen om ze veilig uit te voeren met sudo. - Navin


antwoorden:


Dus ik ontdekte het een manier om dit te doen. Ik weet niet zeker of dit de gewenste manier is, maar het werkt! Op je favoriete schaal:

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

(De alias voor lo0 lijkt het ontbrekende deel te zijn)

Als u wilt dat een (nep) domein verwijst naar deze nieuwe alias, controleert u of / etc / hosts de regel bevat:

10.0.0.1 www.your-domain.com

32
2018-01-24 00:34



ipfw werkt niet op Yosemite (MAC) en lijkt nogal verouderd - Vadorequest


Ik heb dit kunnen laten werken met de ifconfig en pfctl opdrachten op Mac 10.10.2. Met de volgende aanpak die ik met succes in kaart breng 127.0.0.1:3000 naar mydomain.com lokaal op mijn machine.

Voer in uw opdrachtregel de volgende twee opdrachten in om verbindingen naar door te sturen 127.0.0.1:3000 naar 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 -

Bewerk vervolgens uw /etc/hosts of /private/etc/hosts bestand en voeg de volgende regel toe om uw domein toe te wijzen 10.0.0.1.

10.0.0.1 mydomain.com

Nadat u uw hosts-bestand hebt opgeslagen, spoelt u uw lokale DNS:

sudo discoveryutil udnsflushcaches

Nu open mydomain.com in een browser ziet u de server gehost op uw localhost-poort (d.w.z. 127.0.0.1:3000). In principe brengt dit proces een kaart in kaart <ip>:<port> naar een nieuw <ip> zodat u vervolgens een host die IP kunt toewijzen.


22
2018-03-06 17:24



Gewoon een beetje hacker, maar krijgt de klus geklaard. Goede show. - Joey Carson
Dank je. Hoe zou u de alias en het doorsturen ongedaan maken? - Carlos Nuñez
Hoi sudo discoveryutil udnsflushcaches geeft me command not foundmaar het komt nog steeds overeen met de invoer correct. Maar hoe kan ik een tweede poort in kaart brengen? Ik heb geprobeerd om de stappen 1 + 2 met id uit te voeren: 10.0.0.2 en een andere poort, maar er is altijd alleen de laatste verbinding nodig. Dus als ik het laatst doe 10.0.0.1 & port 3000 het vooruit 3000, als ik het laatst doe 10.0.0.2 en poort 4000 het vooruit 4000. In mijn /private/etc/hosts Ik heb beide vermeldingen geschreven met de (volgens) andere id. - Andi Giga
Werkt, maar ik moet het opnieuw doen wanneer ik OSX opnieuw start .... Is er iets om dit permanent op te slaan? - Kasper
Werk het bij met sudo dscacheutil -flushcache - northtree


Dit werkte goed voor mij:


3
2017-08-05 17:50





Ook ik moest kort geleden iets soortgelijks doen, en bij het zoeken naar dit antwoord. Helaas, het antwoord van Nafe gebruikt ipfw welke nu is verouderd en niet beschikbaar in OSX; en het antwoord van Kevin Leary is inderdaad een beetje hackish. Dus ik moest iets beters maken (schoner) en besloot het hier te delen voor het nageslacht. Dit antwoord is grotendeels gebaseerd op de genoemde aanpak deze kern.

Zoals OP vermeldt, zou het richten van een browser op 192.168.99.100 een antwoord moeten krijgen van een server op localhost: 8000. Een alias toevoegen aan ifconfig is niet echt nodig, pfctl alleen is voldoende: om dit te bereiken is het pf.conf bestand op /etc/pf.conf moet worden aangepast.

Eerst maken we (met sudo) een nieuw ankerbestand (laten we het noemen redirection) op: /etc/pf.anchors/redirection. Dit is in feite een standaard tekstbestand en bevat de volgende regel (net als in het antwoord van Kevin Leary): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000. Nadat het nieuwe ankerbestand is gemaakt, moet hiernaar worden verwezen binnen de pf.conf het dossier. Open de pf.conf bestand met sudo en voeg toe rdr-anchor "redirection" na de laatste rdr-ankerlijn (dat is rdr-anchor "com.apple/*") en voeg toe load anchor "redirection" from "/etc/pf.anchors/redirection" aan het einde.

Uiteindelijk is dit hoe het bestand pf.conf eruit zou moeten zien:

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

En dat is het bijna. Gewoon opnieuw opstarten pfctl door uit te geven sudo pfctl -d om het eerst uit te schakelen en dan sudo pfctl -fe /etc/pf.confom het opnieuw te starten.

Nu, als je dit automatisch wilt laten gebeuren na elke herstart, moet nog een klein beetje werk worden gedaan: de launch daemon voor pfctl moet worden bijgewerkt (de gerefereerde gist vermeldt dat pf automatisch wordt ingeschakeld tijdens het opstarten, maar dit lijkt niet het geval te zijn als de code wordt bekeken). Open (met sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist en zoek dit:

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

en voeg de regel toe <string>-e</string> om het uiteindelijk als volgt te maken:

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

Dat zou het moeten doen.

Caveat: Apple staat niet langer toe om de demo-demoversiebestanden zomaar te veranderen (niet met sudo, noch chmod, noch iets anders). De enkel en alleen manier is om te sleutelen aan de Bescherming van systeemintegriteit instellingen: start de herstelmodus op en start de terminal. Controleer de SIP-status met csrutil status, het moet over het algemeen worden ingeschakeld. Schakel het uit met csrutil disable en herstart in de normale modus en voer vervolgens de wijzigingen in het plist-bestand uit, zoals hierboven besproken. Als u klaar bent, gaat u terug naar de herstelmodus en schakelt u de beveiliging weer in (deze is om een ​​goede reden aanwezig) door deze uit te geven csrutil enable.

Uitleg: Men kan controleren door het ifconfig beveel dat 127.0.0.1 is al de (standaard) alias voor localhost lo0 - dit feit wordt gebruikt om te voorkomen dat een extra alias voor localhost moet worden toegevoegd en om gewoon het standaardadres in de pf.conf het dossier. 

UPDATE: Helaas lijkt het laden van het bestand bij het opstarten niet te werken. Ik probeer nog steeds hulp te krijgen om het te laten sorteren. Tot dan, hardlopen sudo pfctl -f /etc/pf.conf na het opstarten doet de truc. 


3
2017-07-02 17:03



Bedankt voor dit, dit werkte voor mij in OS X Sierra. Het is echter erg belangrijk dat het omleidingsbestand eindigt met een nieuwe regel. - kadrian


Vanaf 10.5 wordt OS X geleverd met een nieuwe, toepassingsgerichte firewall in plaats van ipfw. Maar ipfw is nog steeds geïnstalleerd. Als je problemen hebt met de syntaxis, bekijk dan grafische frontends zoals WaterRoof of Flying Buttress.

HTH, PERA


1
2018-01-13 21:10





volgorde van regels is belangrijk, zorg ervoor dat er geen "alles ontkennen" voordat je regels toestaat, of iets dergelijks.


1
2018-01-13 22:06



Bedankt voor het advies, maar ik denk niet dat ik dat specifieke probleem heb (ipfw-lijst toont alleen mijn regel en 65535 allow ip from any to any). - nafe


Uw commando lijkt een regelnummer te missen; proberen:

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

(als je niet als root draait, moet je het prefixen met sudo). Een ander ding om te controleren is dat de firewall is ingeschakeld:

sysctl net.inet.ip.fw.enable

Als het terug komt met de waarde 0 (uit), zet het dan aan met:

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

... en zorg ervoor dat het opnieuw wordt geactiveerd wanneer de computer opnieuw wordt opgestart. De "juiste" manier om dit te doen is waarschijnlijk om een gestart item (Lingon maakt dit vrij eenvoudig). Of gebruik gewoon een van de GUI-tools die PERA heeft genoemd, en laat het voor de details zorgen.


1
2018-01-14 07:45