74 votes

équivalent iptables pour mac os x

Je veux transmettre les demandes de 192.168.99.100:80 à 127.0.0.1:8000 . Voici comment je procéderais sous linux en utilisant iptables :

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

Comment faire la même chose dans MacOS X ? J'ai essayé une combinaison de ipfw sans grand succès :

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

(Pour moi, le succès consiste à pointer un navigateur sur http://192.168.99.100 et obtenir une réponse d'un serveur de développement que je fais fonctionner sur localhost:8000 )

44voto

nafe Points 1221

J'ai donc découvert a manière de le faire. Je ne suis pas sûr qu'il s'agisse de la méthode préférée, mais elle fonctionne ! Dans votre Shell préféré :

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 de lo0 semble être la partie manquante)

Si vous souhaitez qu'un (faux) domaine pointe vers ce nouvel alias, assurez-vous que /etc/hosts contient la ligne suivante :

10.0.0.1 www.your-domain.com

38voto

Kevin Leary Points 461

J'ai réussi à le faire fonctionner en utilisant le ifconfig y pfctl sur Mac 10.10.2. Avec l'approche suivante, je réussis à mettre en correspondance 127.0.0.1:3000 à mydomain.com localement sur ma machine.

Dans votre ligne de commande, entrez les deux commandes suivantes pour transférer les connexions à 127.0.0.1:3000 à 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 -

Ensuite, modifiez votre /etc/hosts o /private/etc/hosts et ajoutez la ligne suivante pour mapper votre domaine à 10.0.0.1 .

10.0.0.1 mydomain.com

Après avoir enregistré votre fichier d'hôtes, videz votre DNS local :

sudo discoveryutil udnsflushcaches

Maintenant ouvert mydomain.com dans un navigateur et vous verrez le serveur hébergé sur le port de votre localhost (c'est-à-dire 127.0.0.1:3000 ). En gros, ce processus fait correspondre un <ip>:<port> à un nouveau <ip> pour que vous puissiez ensuite mapper un hôte sur cette IP.

9voto

Yogesch Points 255

J'ai aussi dû faire une chose similaire récemment, et en cherchant, je suis tombé sur cette réponse. Malheureusement, la réponse de Nafe utilise ipfw qui est maintenant déprécié et non disponible dans OSX ; et la réponse de Kevin Leary est en effet un peu bricolée. J'ai donc dû faire quelque chose de mieux (plus propre) et j'ai décidé de le partager ici pour la postérité. Cette réponse est largement basée sur l'approche mentionnée à cette phrase .

Comme le mentionne le PO, faire pointer un navigateur sur 192.168.99.100 devrait obtenir une réponse d'un serveur à localhost:8000. L'ajout d'un alias à ifconfig n'est pas vraiment nécessaire, pfctl seul est suffisant : pour y parvenir, l pf.conf à l'adresse /etc/pf.conf doit être modifié.

Tout d'abord nous créons (avec sudo) un nouveau fichier d'ancrage (appelons-le redirection ) à : /etc/pf.anchors/redirection . Il s'agit en fait d'un fichier texte ordinaire qui contient la ligne suivante (comme dans la réponse de Kevin Leary) : rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000 . Une fois que le nouveau fichier d'ancrage a été créé, il doit être référencé dans le fichier d'ancrage. pf.conf fichier. Ouvrez le pf.conf avec sudo et ajouter rdr-anchor "redirection" après la dernière ligne rdr-anchor (qui est rdr-anchor "com.apple/*" ) et ajoutez load anchor "redirection" from "/etc/pf.anchors/redirection" à la fin.

Au final, voici à quoi devrait ressembler le fichier 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

Et c'est presque tout. Redémarre juste pfctl en émettant sudo pfctl -d pour le désactiver d'abord et ensuite sudo pfctl -fe /etc/pf.conf pour le redémarrer.

Maintenant, si vous avez besoin que cela se produise automatiquement après chaque redémarrage, un autre petit travail doit être fait : le démon de lancement de l'application pfctl doit être mis à jour (le gist référencé mentionne que pf est activé automatiquement au démarrage, cependant cela ne semble pas être le cas en regardant le code). Ouvrez (avec sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist et cherchez ceci :

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

et ajoutez la ligne <string>-e</string> pour que ce soit finalement comme ça :

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

Ça devrait le faire.

Caveat : Apple ne permet plus de modifier les fichiers du démon de lancement juste comme ça (ni avec sudo, ni avec chmod, ni avec autre chose). Le site uniquement Le moyen le plus simple est de bricoler le Protection de l'intégrité du système paramètres : démarrer en mode récupération et lancer le terminal. Vérifiez le statut SIP avec csrutil status il doit généralement être activé. Désactivez-la avec csrutil disable et redémarrez en mode normal, puis effectuez les modifications du fichier plist comme indiqué ci-dessus. Une fois que c'est fait, retournez en mode de récupération et réactivez la protection (elle a été mise en place pour une bonne raison) en effectuant les opérations suivantes csrutil enable .

Explication : On peut vérifier en émettant la commande ifconfig qui 127.0.0.1 est déjà l'alias (par défaut) pour localhost lo0 - ce fait est utilisé pour éviter d'avoir à ajouter un alias supplémentaire pour localhost et pour simplement utiliser l'adresse par défaut dans le fichier pf.conf archivo.

MISE À JOUR : Malheureusement, il semble que le chargement du fichier au démarrage ne fonctionne pas. J'essaie toujours d'obtenir de l'aide pour résoudre ce problème. En attendant, l'exécution de sudo pfctl -f /etc/pf.conf après le démarrage fait l'affaire.

4voto

Colin Sullivan Points 41

Cela a bien fonctionné pour moi :

1voto

liangzan Points 1733

À partir de la version 10.5, OS X est doté d'un nouveau pare-feu orienté vers les applications au lieu de ipfw . Mais ipfw est toujours installé. Si vous avez des difficultés avec sa syntaxe, consultez les interfaces graphiques comme WaterRoof o Flying Buttress .

HTH, PEra

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X