Quelle est la manière moderne de faire la redirection de port sur El Capitan? (port avant 80 à 8080)

56

L'ancien utilitaire a ipfwété découragé dans les versions récentes de Mac OS X et est maintenant parti d'El Capitan.

Quelle est la manière moderne de faire la redirection de port à El Capitan?

Je veux simplement que le port 80 soit transféré sur le port 8080.

Basil Bourque
la source
S'il vous plaît accepter une réponse.
Efren

Réponses:

79

Pour transférer tout le trafic du port 80 sur le port 8080, vous pouvez entrer les informations suivantes à partir de la ligne de commande du terminal.

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

Tiré de https://salferrarello.com/mac-pfctl-port-forwarding/

Sal Ferrarello
la source
1
A parfaitement fonctionné!
Anupam Jain
17
et de l'article mentionné, de le supprimer sudo pfctl -F all -f /etc/pf.confet d'afficher vos règles de transfert de port actuelles,sudo pfctl -s nat
Brad Parks le
4
Gardez à l'esprit que cette solution n'ajoute pas de règles mais remplace toute autre règle chargée auparavant, y compris le pf.conffichier
erandros
36

La manière moderne de transférer les ports à El Capitan utilise pf. Dans l'exemple ci-dessous, toutes les demandes du port 80 sont transférées au port 8080 sur le même hôte. Veuillez ajuster les redirections selon vos besoins.

  1. Créez un fichier d'ancrage org.user.forwarding dans /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    avec le contenu suivant et une dernière ligne vide

    rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    

    ou

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. Modifiez le fichier /private/etc/pf.conf mais gardez une dernière ligne vide

    fichier d'origine:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    à

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  3. Analysez et testez votre fichier d'ancrage pour vous assurer qu'il n'y a pas d'erreur:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Maintenant, modifiez / System / Library / LaunchDaemons/com.apple.pfctl.plist de

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

    à

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

    Pour ce faire, vous devez désactiver la protection de l'intégrité du système. Après avoir édité le fichier, réactivez SIP. Après le redémarrage de votre Mac, pf sera activé (c'est l'option -e).

    Sinon, vous pouvez créer votre propre démon de lancement, semblable à la réponse fournie ci- dessous: Utilisation de Server 5.0.15 pour partager Internet SANS partage Internet .

Après une mise à jour ou une mise à niveau du système, certains des fichiers d'origine ci-dessus peuvent avoir été remplacés et vous devez réappliquer toutes les modifications.

Si vous souhaitez transférer via différentes interfaces, vous devez l'activer dans /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
Klanomath
la source
7
Pourquoi n'y a-t-il pas une simple commande pour le faire plus? C'est trop compliqué maintenant.
Dr.Knowitall
@klanomath - cela fonctionne et je peux transférer le port x au port y sur 127.0.0.1, etc., mais je ne parviens pas à transférer les ports sur mon Windows Vm fonctionnant sur le bureau de Paralles, vous avez une idée? voici ma question stackoverflow.com/questions/40695684/…
Sudhir N
Ne semble pas fonctionner lors du transfert du port vers une machine virtuelle qui s'exécute sur un ordinateur de bureau parallèle
Sudhir N
@sudhir Vous n'avez pas réussi à créer un lien vers votre nouvelle question. Par défaut, une machine virtuelle Parallels n'est pas visible sur le réseau, par mesure de sécurité. Vous pouvez modifier un paramètre dans la configuration de la machine virtuelle pour la rendre visible. Et rappelez-vous, pingvotre ami diagnostique-t-il les problèmes de réseau?
Basil Bourque
1
La question de @ suhir: apple.stackexchange.com/questions/262708/…
Efren le
3

Pour étendre la solution de @ sal-ferrarello answer, j'ai créé deux scripts shell super-basiques permettant d' activer ou de désactiver la redirection sans compromettre les entrées déjà existantes dans pf.

I. Recherchez d’abord les entrées que vous avez déjà avec:

sudo pfctl -s nat

Ma sortie était comme:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

Ce qui nous intéresse, ce sont les entrées réelles, alors omettez les deux premières lignes d’information.

II. Créer un enable.shscript:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat

Les deux premières lignes après echosont les entrées qui étaient déjà là. La troisième ligne contient une nouvelle redirection - dans le cas présent, 80 à 8080. À la fin, nous appelons sudo pfctl -s natpour voir si des modifications ont été appliquées.

III. Créer un disable.shscript:

Semblable à enable.shnous créons un script, mais sans 80-> 8080, mais avec des entrées précédentes déjà existantes:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
cadavre
la source