En al menos dos versiones de Linux (Ubuntu 9 y Debian 7), he notado que, aunque solo tengo una única dirección de loopback configurada en lo (la estándar 127.0.0.1), acepta felizmente paquetes a CUALQUIER 127.xxx. DIRECCIÓN. Esto me pareció bastante sorprendente, ya que otras variantes de Unix descartan paquetes para direcciones no configuradas.
- ¿Por qué/cómo hace esto? Esto no sucede con ningún otro rango de direcciones, ¿verdad?
- ¿Cómo consigo que haga lo más sensato (y seguro) y que realmente preste atención a las direcciones que están configuradas?
Editar: He leído RFC 5735, y es una interpretación bastante descuidada de eso desde"Las direcciones dentro del bloque 127.0.0.0/8 completo no aparecen legítimamente en ninguna parte de la red"a"esta máquina debe aceptar paquetes para todas estas IP". Después de todo, no verá hosts que acepten paquetes para todo 172.16.0.0/12, solo porque tienen una de esas direcciones configurada.
Mi intención no era preguntar sobre las especificaciones de las direcciones, sino sobre la implementación de la lógica de Linux para aceptar paquetes. ¿"Por qué" y "cómo" aquí significan qué en el kernel de Linux real hace que se omita la lógica normal de "este paquete es para mí"?
Respuesta1
El bucle invertido es especial. Es todo el espacio 127.0.0.0/8 y nunca sale de la máquina. Esa es la única excepción para escuchar solo direcciones configuradas; si está en bucle invertido, es especial.
No se me ocurre ninguna implicación de seguridad para eso, ya que esas direcciones nunca pueden estar en la red física.
Respuesta2
La lógica de ruta normalno essiendo omitido, y esta configuraciónes mas seguroque el que propones.
Primero, miremos la tabla de enrutamiento para ver qué está pasando.
# ip address show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
# ip route show table 0
...
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
Podemos ver que la interfaz está configurada con un /8
prefijo, lo que hace que Linuxautomáticamentegenerar una ruta para 127.0.0.0/8
la cual va a la lo
interfaz. Esto impone el requisito de que todos los paquetes para este bloque no aparezcan en ninguna parte de la red y regresen al host.
Sin esta ruta, los paquetes para la 127.0.0.0/8
rednose volverá a conectar dentro del host y potencialmente sería elegible para ser enrutado hacia una interfaz de red. Esto introduciría inseguridad e incumplimiento del RFC.
Tenga en cuenta que "bucle invertido" significa exactamente eso. Mientras que en una interfaz normal, un paquete enviado sale, en la interfaz loopback, un paquete enviado sale y se devuelve inmediatamente. Esto es lo que significa loopback y por qué ves este tráfico.
Respuesta3
No es específico de Linux (Win funciona exactamente igual), sino que sigue la especificación (como señaló Eric): deRFC 5735 - Direcciones IPv4 de uso especial
127.0.0.0/8 - This block is assigned for use as the Internet host
loopback address. A datagram sent by a higher-level protocol to an
address anywhere within this block loops back inside the host. This
is ordinarily implemented using only 127.0.0.1/32 for loopback. As
described in [RFC1122], Section 3.2.1.3, addresses within the entire
127.0.0.0/8 block do not legitimately appear on any network anywhere.