Port Forwarding su Mac Pro con macOS Sierra

2

Vorrei port forward dal mio computer macOS Sierra con indirizzo IP di 152.1.2.3 al mio NAS che è 192.168.2.3. In particolare vorrei accedere al server web HTTP sul mio NAS a 192.168.2.3/Photos. Il NAS ha tutto il traffico che arriva su HTTP diretto alla cartella corretta (Foto).

Ho Internet Sharing attivato e condividi la mia connessione Ethernet del mio computer macOS (152.1.2.3 su Ethernet 2) al mio NAS (192.168.2.3 su Ethernet 1)

Il mio NAS può vedere Internet e ricevere aggiornamenti.

Posso accedere al server web localmente dal mio computer inserendo 192.168.2.3 e mi indirizza alla pagina webserver su 192.168.2.3/Photos.

Non riesco ad accedervi dall'esterno della rete locale.

La soluzione facile è connettere il NAS direttamente alla rete, ma non posso a causa delle politiche locali.

In sommario: Vorrei digitare quanto segue ed essere reindirizzato al server web sul NAS - > 152.1.2.3:9999

il comando del terminale sarebbe:

rdr pass on en2 inet proto tcp from any to any port 9999 -> 198.168.2.3 port 80
    
posta farberm 27.08.2017 - 13:29
fonte

1 risposta

1

Condivisione Internet in macOS è (internamente) fatto creando un dispositivo bridge contenente due o più interfacce, attivando un server DHCP, impostando varie regole pf e abilitando pf.

Per stampare tutte le regole, è necessario eseguire lo script della shell seguente:

pfdump.sh:

#!/bin/bash

function pfprint() {
  if [ -n "$1" ];then
    sudo pfctl -a "$2" -s"$1" 2>/dev/null
  else
    sudo pfctl -s"$1" 2>/dev/null
  fi
}

function print_all() {

  local p=$(printf "%-40s" $1)
  (
    pfprint r "$1" | sed "s,^,r     ,"
    pfprint n "$1" | sed "s,^,n     ,"
    pfprint A "$1" | sed "s,^,A     ,"
  ) | sed "s,^,$p,"

  for a in 'pfprint A "$1"'; do
    print_all "$a"
  done
}

print_all

Di default pf è disabilitato con il seguente pf dump:

                                        r     scrub-anchor "com.apple/*" all fragment reassemble
                                        r     anchor "com.apple/*" all
                                        n     nat-anchor "com.apple/*" all
                                        n     rdr-anchor "com.apple/*" all
                                        A       com.apple
com.apple                               r     anchor "200.AirDrop/*" all
com.apple                               r     anchor "250.ApplicationFirewall/*" all
com.apple                               A       com.apple/200.AirDrop
com.apple                               A       com.apple/250.ApplicationFirewall

Dopo l'attivazione di Condivisione Internet pf è abilitato e il dump è simile al seguente:

                                        r     scrub-anchor "com.apple/*" all fragment reassemble
                                        r     scrub-anchor "com.apple.internet-sharing" all fragment reassemble
                                        r     anchor "com.apple/*" all
                                        r     anchor "com.apple.internet-sharing" all
                                        n     nat-anchor "com.apple/*" all
                                        n     nat-anchor "com.apple.internet-sharing" all
                                        n     rdr-anchor "com.apple/*" all
                                        n     rdr-anchor "com.apple.internet-sharing" all
                                        A       com.apple
                                        A       com.apple.internet-sharing
com.apple                               r     anchor "200.AirDrop/*" all
com.apple                               r     anchor "250.ApplicationFirewall/*" all
com.apple                               A       com.apple/200.AirDrop
com.apple                               A       com.apple/250.ApplicationFirewall
com.apple.internet-sharing              r     scrub-anchor "base_v4" all fragment reassemble
com.apple.internet-sharing              r     anchor "base_v4" all
com.apple.internet-sharing              n     nat-anchor "base_v4" all
com.apple.internet-sharing              n     rdr-anchor "base_v4" all
com.apple.internet-sharing              A       com.apple.internet-sharing/base_v4
com.apple.internet-sharing/base_v4      r     scrub on en1 all no-df fragment reassemble
com.apple.internet-sharing/base_v4      r     scrub on bridge100 all no-df max-mss 1460 fragment reassemble
com.apple.internet-sharing/base_v4      r     scrub on bridge100 proto esp all no-df fragment reassemble
com.apple.internet-sharing/base_v4      r     pass on en1 all flags any keep state
com.apple.internet-sharing/base_v4      r     pass on en1 proto esp all no state
com.apple.internet-sharing/base_v4      r     pass on bridge100 all flags any keep state rtable 6
com.apple.internet-sharing/base_v4      n     nat on en1 inet from 192.168.2.0/24 to any -> (en1:0) extfilter ei
com.apple.internet-sharing/base_v4      n     no nat on bridge100 inet from 192.168.2.1 to 192.168.2.0/24
com.apple.internet-sharing/base_v4      n     rdr on bridge100 inet proto tcp from 192.168.2.0/24 to any port = 21 -> 127.0.0.1 port 8021

Qui en1 è l'interfaccia esterna (quella che condivide con la tua rete interna) e 192.168.2.0/24 la rete interna fornita dal server DHCP. Entrambi potrebbero differire nel tuo ambiente.

Per esporre al pubblico un server interno con Condivisione Internet abilitata, devi inoltrare una porta dell'interfaccia esterna all'IP e alla porta di servizio del server:

Crea una regola rdr sul router (il tuo Mac Pro) inserendo in Terminal.app:

sudo nano /private/etc/pf-rdr.rule

e il contenuto:

rdr on en1 inet proto tcp from any to 152.1.2.3 port = 9999 -> 192.168.2.3 port 80

assumendo en1 è l'interfaccia esterna, 152.1.2.3:9999 il suo IP: porta e 192.168.2.3:80 l'IP: porta del server interno. Per ottenere l'identificativo del dispositivo (e l'IP) dell'interfaccia esterna, inserisci ifconfig su Mac Pro.

Quindi crea un demone di lancio:

sudo nano /Library/LaunchDaemons/org.user.pfrdr.plist

con il contenuto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>org.user.pfrdr</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/pfctl</string>
        <string>-a</string>
        <string>com.apple/portforwarding</string>
        <string>-f</string>
        <string>/private/etc/pf-rdr.rule</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Library/Logs/org.usr.pfrdr.log</string>
    <key>StandardOutPath</key>
    <string>/Library/Logs/org.usr.pfrdr.log</string>
</dict>
</plist>

Avvia il daemon con:

sudo launchctl load /Library/LaunchDaemons/org.user.pfrdr.plist

Questo aggiungerà una seconda regola rdr nell'ancora com.apple a pf e inoltrerà la porta esterna all'host interno.

Poiché DHCP assegna dinamicamente gli indirizzi IP è anche utile definire un IP fisso per il server interno:

Crea un file bootptab sul router (il tuo Mac Pro):

sudo nano /etc/bootptab

con il contenuto:

# Bootptab file
# Section 1 -- ignored
%%
# Section 2 -- used
# Hardware types: 1=Ethernet, 6=Wireless
#                 See http://www.ietf.org/rfc/rfc1700.txt
#
# machine entries have the following format:
#
# hostname         hwtype     hwaddr         ipaddr   bootfile
your-nas-ethernet     1 c4:2c:03:3a:7f:65 192.168.2.3 boot
a-wireless-machine    6 60:33:4b:27:6c:62 192.168.2.4 boot
another-ethernet      1 00:0d:93:72:e7:96 192.168.2.2 boot

Sostituisci gli indirizzi MAC (hwaddr) e i tipi di hardware (hwtype) con quelli giusti trovati nel tuo ambiente qui. Puoi ottenere gli indirizzi MAC inserendo ifconfig sul rispettivo host. Riavvia il router (Mac Pro) in seguito.

Implicazioni sulla sicurezza:

Usando il tuo Mac Pro come router è esposto a Internet e vulnerabile in quanto tale. Pf che viene eseguito dopo aver abilitato la Condivisione in Internet ha assolutamente nessuna regola di blocco . Devi aggiungere un sacco di regole aggiuntive per renderlo più sicuro (e funzionante).

L'IP che hai pubblicato appartiene a 152.1.0.0/16 - un blocco IP assegnato alla North Carolina State University (NCSU). La tua università potrebbe aver applicato misure di sicurezza in questa rete che impediranno l'accesso da altre reti (o dall'intera "Internet").

    
risposta data 05.09.2017 - 04:42
fonte

Leggi altre domande sui tag