¿Averiguando qué está bloqueando la solicitud HTTP en macOS Mojave?

Tengo un servidor http simple que se ejecuta con un index.html, que estoy tratando de enviar a otro dispositivo a través de LAN. Puedo acceder al sitio web en la computadora host usando localhost y se registra como un HTTP 200 exitoso. Aunque cuando intento acceder con el otro dispositivo cliente, el servidor http no muestra ninguna solicitud y el dispositivo se agota.

Creo que un firewall en mi Mac está bloqueando la conexión, pero escuché que hay múltiples firewalls dentro de una Mac y es posible que sigan cambiándolo con cada actualización del sistema operativo.

p.ej

Así que ahora estoy usando macOS Mojave y tengo muy poca experiencia en el uso de herramientas de red para verificar lo que sucede en mi red (así que disculpe mi ignorancia).

  • ¿Qué cortafuegos usa macOS Mojave?

  • ¿Dónde puedo encontrar los registros (para poder ver si la solicitud http de mi otro dispositivo fue denegada)?

  • ¿Hay alguna otra cosa que no sepa que pueda detener mi solicitud http? Si es así, ¿qué herramientas puedo usar para verificar?

--------- Detalle Adicional ---------

  • Tengo un servidor de desarrollo de paquete web angular que sirve en su puerto habitual 4200 y luego uso ghostlab para servirlo como proxy en el puerto 8005 para mis dispositivos externos. (Sin embargo, esto dejó de funcionar, así que hice lo siguiente para ver si puedo acceder a la carpeta dist del sitio web de otra manera)
  • Utilicé el servidor http del paquete de nodos y ofrecí un sitio web de prueba con solo index.html. Sirve tanto en http://127.0.0.1:8080 como en la dirección IP de LAN de http://192.168.0.28:8080 .
  • Puedo comunicarme con 192.168.0.28:8080 localmente en el navegador Chrome de la máquina host, pero en un dispositivo cliente iOS que usa el navegador Safari nunca obtiene una respuesta. Así que estoy pensando que un cortafuegos lo está bloqueando en algún momento. Aunque poder confirmar a través de appfirewall.log (que parece haberse ido) o lugares similares, es posible que no sepa que debería estar mirando es lo que estoy tratando de averiguar.

---- Más detalles -----

Gracias Francisco por tu respuesta.

A continuación se muestra mi tabla de enrutamiento

Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc          147        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              9   277366     lo0
169.254            link#5             UCS             0        0     en0      !
192.168.0          link#5             UCS             3        0     en0      !
192.168.0.1/32     link#5             UCS             2        0     en0      !
192.168.0.1        b0:c2:87:51:37:e7  UHLWIir        58       52     en0    583
192.168.0.2        link#5             UHLWIi          1      152     en0      !
192.168.0.13       0:71:47:32:79:99   UHLWI           0       81     en0    285
192.168.0.19/32    link#5             UCS             1        0     en0      !
192.168.0.19       80:e6:50:a:23:64   UHLWI           0        2     lo0
192.168.0.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        1     en0      !
224.0.0/4          link#5             UmCS            3        0     en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI          0        0     en0
224.6.7.8          1:0:5e:6:7:8       UHmLWI          0        8     en0
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI          0      149     en0
255.255.255.255/32 link#5             UCS             1        0     en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI          0        1     en0      !

Internet6:
Destination                             Gateway                         Flags         Netif Expire
default                                 fe80::b2c2:87ff:fe51:37e7%en0   UGc             en0
default                                 fe80::%utun0                    UGcI          utun0
default                                 fe80::%utun1                    UGcI          utun1
::1                                     ::1                             UHL             lo0
2606:6000:609b:1200::/64                link#5                          UC              en0
2606:6000:609b:1200::4                  80:e6:50:a:23:64                UHL             lo0
2606:6000:609b:1200:14c1:e8b6:1ff0:8ef1 80:e6:50:a:23:64                UHL             lo0
2606:6000:609b:1200:81e5:bdd5:155e:a21d 80:e6:50:a:23:64                UHL             lo0
fe80::%lo0/64                           fe80::1%lo0                     UcI             lo0
fe80::1%lo0                             link#1                          UHLI            lo0
fe80::%en0/64                           link#5                          UCI             en0
fe80::14d6:6308:5edd:9f41%en0           80:e6:50:a:23:64                UHLI            lo0
fe80::b2c2:87ff:fe51:37e7%en0           b0:c2:87:51:37:e7               UHLWIir         en0
fe80::%awdl0/64                         link#7                          UCI           awdl0
fe80::74f1:5eff:fefa:3028%awdl0         76:f1:5e:fa:30:28               UHLI            lo0
fe80::%utun0/64                         fe80::1d55:b5dc:3cd5:864%utun0  UcI           utun0
fe80::1d55:b5dc:3cd5:864%utun0          link#11                         UHLI            lo0
fe80::%utun1/64                         fe80::df6e:b1c3:74ea:f75c%utun1 UcI           utun1
fe80::df6e:b1c3:74ea:f75c%utun1         link#12                         UHLI            lo0
ff01::%lo0/32                           ::1                             UmCI            lo0
ff01::%en0/32                           link#5                          UmCI            en0
ff01::%awdl0/32                         link#7                          UmCI          awdl0
ff01::%utun0/32                         fe80::1d55:b5dc:3cd5:864%utun0  UmCI          utun0
ff01::%utun1/32                         fe80::df6e:b1c3:74ea:f75c%utun1 UmCI          utun1
ff02::%lo0/32                           ::1                             UmCI            lo0
ff02::%en0/32                           link#5                          UmCI            en0
ff02::%awdl0/32                         link#7                          UmCI          awdl0
ff02::%utun0/32                         fe80::1d55:b5dc:3cd5:864%utun0  UmCI          utun0
ff02::%utun1/32                         fe80::df6e:b1c3:74ea:f75c%utun1 UmCI          utun1

--PF--

pfctl -vvv -s all

=>

No ALTQ support in kernel
ALTQ related functions disabled
TRANSLATION RULES:
@0 nat-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 1003456   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]
@0 rdr-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 2053469   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

FILTER RULES:
@0 scrub-anchor "com.apple/*" all fragment reassemble
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 3848799   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]
@0 anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 2053469   Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

DUMMYNET RULES:
@0 dummynet-anchor "com.apple/*" all
  [ Owner : nil          Priority : 0     ]
  [ Evaluations: 0         Packets: 0         Bytes: 0           States: 0     ]
  [ Inserted: uid 0 pid 89 ]

INFO:
Status: Enabled for 1 days 15:36:27           Debug: Urgent

Hostid:   0x995c6c3b
Checksum: 0x79872649e3817f920d20509d6509b712

State Table                          Total             Rate
  current entries                        0
  searches                         2551721           17.9/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Source Tracking Table
  current entries                        0
  searches                               0            0.0/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Counters
  match                            2053469           14.4/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                           1451            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s
  dummynet                               0            0.0/s
Limit Counters
  max states per rule                    0            0.0/s
  max-src-states                         0            0.0/s
  max-src-nodes                          0            0.0/s
  max-src-conn                           0            0.0/s
  max-src-conn-rate                      0            0.0/s
  overload table insertion               0            0.0/s
  overload flush states                  0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
grev1.first                 120s
grev1.initiating             30s
grev1.estblished           1800s
esp.first                   120s
esp.estblished              900s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
app-states    hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

OS FINGERPRINTS:
696 fingerprints loaded

Notas de la interfaz:

No pude ejecutar el comando completo para

for DUDE in $( ifconfig -lu ); do ifconfig ${DUDE} | grep -q “192.168.0.19” && echo ${DUDE}; 

Comandos que se ejecutaron con el servidor web http del nodo en el puerto 8080

ifconfig ${DUDE}

=>

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 80:e6:50:0a:23:64
    inet6 fe80::14d6:6308:5edd:9f41%en0 prefixlen 64 secured scopeid 0x5
    inet 192.168.0.19 netmask 0xffffff00 broadcast 192.168.0.255
    inet6 2606:6000:609b:1200:14c1:e8b6:1ff0:8ef1 prefixlen 64 autoconf secured
    inet6 2606:6000:609b:1200:d9dc:a4c3:7c4b:14e4 prefixlen 64 autoconf temporary
    inet6 2606:6000:609b:1200::4 prefixlen 64 dynamic
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
    ether 02:e6:50:0a:23:64
    media: autoselect
    status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 76:f1:5e:fa:30:28
    inet6 fe80::74f1:5eff:fefa:3028%awdl0 prefixlen 64 scopeid 0x7
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:05:09:7f:80
    media: autoselect <full-duplex>
    status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:05:09:7f:81
    media: autoselect <full-duplex>
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether 72:00:05:09:7f:80
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 8 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 9 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
    inet6 fe80::1d55:b5dc:3cd5:864%utun0 prefixlen 64 scopeid 0xb
    nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::df6e:b1c3:74ea:f75c%utun1 prefixlen 64 scopeid 0xc
    nd6 options=201<PERFORMNUD,DAD>

netstat -an | grep 8080

=>

tcp4       0      0  *.8080                 *.*                    LISTEN

Todavía estoy estudiando lo que significa parte de esta salida y trabajaré para que un dispositivo remoto se conecte a mi Mac. Proporcionará más actualizaciones pronto.

------- Próxima actualización ---------

Así que intenté conectarme al puerto arbitrario tanto en la máquina local como en la remota.

Empezar a escuchar en el puerto 54321

nc -v -b en0 -l 54321

Conectando con el..

nc -v -z 192.168.0.19 54321

Respuesta local =>

found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif lo0
    src 192.168.0.19 port 49845
    dst 192.168.0.19 port 54321
    rank info not available
    TCP aux info available

Connection to 192.168.0.19 port 54321 [tcp/*] succeeded!

Respuesta Remota =>

nc: connectx to 192.168.0.19 port 54321 (tcp) failed: Operation timed out

Intento de conexión al servidor web...

echo -n "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.19 8080

Respuesta local =>

HTTP/1.1 400 Solicitud incorrecta

Respuesta del servidor web de la solicitud local =>

  • sin cambios en los registros

Respuesta Remota =>

HTTP/1.1 400 Bad Request

Respuesta del servidor web desde una solicitud remota =>

  • sin cambios en los registros
¿Cómo accedes a la página web desde la otra computadora? ¿Usando la dirección IP de la máquina del servidor? ¿Usando el nombre de host Bonjour del servidor? ¿Qué servidor HTTP se utiliza? ¿El Apache incorporado? ¿Algo más?
@Gummibando - Gracias por la respuesta. He actualizado la pregunta con detalles adicionales.
¿Está configurado correctamente el servidor web? Al tratar de solucionar problemas como este, a menudo es mejor ubicar y desactivar cualquier cosa compleja que esté tratando de hacer: deshabilite el firewall OSX, desactive los proxies, etc. Una vez que esté funcionando, puede comenzar a hacerlo complejo nuevamente. .
Puede probar curl para obtener un código de estado. curl -I [webserver IP Here] -o >(cat >&1) -w "%{http_code}" 1>&2 superusuario.com/questions/272265/…

Respuestas (2)

Amigo, vamos al grano:

  1. En el cuadro que ejecuta el servidor web, abra la aplicación Terminal y conviértase en superusuario escribiendo sudo -se ingresando su contraseña de usuario.

  2. Muéstrame la configuración de tu cortafuegos y la tabla de enrutamiento. Publique la salida de pfctl -vvv -s all, así comonetstat -nr

  3. Encienda el servidor web y asegúrese de que esté configurado correctamente para servir. Una mala configuración está más allá del alcance de esta respuesta. Supongo que el servidor web se ejecuta en un host con la dirección IP de NAT/intranet de 192.168.0.28.

  4. Determine la interfaz de red en la intranet y active un oyente en el puerto arbitrario 54321:

    for DUDE in $( ifconfig -lu ) ; do ifconfig ${DUDE}  | grep -q “192.168.0.28” && echo ${DUDE} ; done
    

    Esto le dará la interfaz de red. Luego, asegúrese de que algo esté vinculado al puerto 8080

    netstat -an | grep 8080
    

    Si no se devuelve nada aquí, su servidor web no está vinculado a una interfaz @ puerto 8080, y es probable que haya una configuración incorrecta del servidor web o una condición de carrera del proceso que se vincule a esa interfaz en ese número de puerto. Esto último puede suceder cuando otro proceso ya tiene un límite de interfaz/puerto particular. Haga una lsof -i | grep 8080para ver qué ocupa ese puerto, si es que hay algo.

    Encienda un oyente en el puerto arbitrario 54321 connc -v -b [network interface] -l 54321

  5. En un host Mac, BSD, Linux o incluso UNIX remoto que esté conectado a la misma red NAT/intranet, inicie un símbolo del sistema para acceder a un shell del sistema, abriendo la aplicación Terminal en Utilidades en una Mac... O en un cuadro de windoze ejecute cmd.exe y telnet a 192.168.0.28:8080. No estoy seguro de si los dos puntos son la sintaxis adecuada para el shell CMD.

  6. Intente conectarse al oyente que acabamos de configurar en el puerto 54321 connc -v -z 192.168.0.28 54321

  7. Intente conectarse a su servidor web problemático a través de

    echo -n "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.28 8080
    

Eso debería ayudar a aislar el problema hasta que pueda ver la configuración del firewall y la tabla de enrutamiento que solicité anteriormente...


No hay reglas de filtro en su conjunto de reglas de PF, suponiendo que el ancla com.apple no haya establecido ninguna; verifique dos veces con un

sudo pfctl -vvv -a com.apple -sr

Y por favor perdóname el descuido de esto:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

Es probable que esté encendido. Sin alterar su configuración, deshabilitémoslo temporalmente y luego volvamos a probar las pruebas nc que describí anteriormente...:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

Luego vuelva a ejecutar las pruebas anteriores. Cambie el 'apagado' anterior a 'encendido' para volver a habilitar el firewall de la aplicación después de eso. Estoy bastante seguro de que esto resolverá el problema. Si es así, solo tenemos que configurar el firewall de la aplicación: un paseo por el parque, y te aconsejaré después de conocer los resultados...

F.

Muchas gracias por esta respuesta, actualicé la pregunta con más detalles que muestran los resultados de las tablas de enrutamiento.
Ok, la interfaz es en0, tenías la dirección IP incorrecta. Use 192.168.0.19 y vuelva a ejecutar pfctl -vvv -s all. Recuerde incluir el 'todo' al final. El enrutamiento a primera vista parece correcto. Haz los comandos nc por favor.
Ok había actualizado la pregunta con información de pfctl. Sí, después de volver a conectarme a la red, NAT había cambiado la IP de mi dispositivo a 192.168.0.19, pero la primera vez era 192.168.0.28. :)
También he agregado los resultados del comando nc
Mire la parte inferior de mi respuesta, arriba, y hágame saber los resultados. Sigo confiando en que estamos cerca de una resolución del problema...

Mi primer pensamiento es que, para empezar, no tiene una ruta de red clara desde su dispositivo iOS a la Mac. Descargue una utilidad como https://apps.apple.com/us/app/ping-network-utility/id576773404 y haga ping a su Mac. Informe si el ping funciona.

Si ni siquiera puede hacer ping a la Mac, es muy poco probable que pueda conectarse a ella. Antes de sumergirse en los firewalls, verifique que su enrutador esté configurado para permitir que los dispositivos se comuniquen entre sí. Algunos no permitirán conexiones entre dispositivos por defecto, solo a dispositivos en Internet.

Gracias por esto. Había descargado la aplicación y sigue diciendo tiempo de espera de solicitud.