Por que o Linux aceita tráfego em endereços de loopback não configurados?

Por que o Linux aceita tráfego em endereços de loopback não configurados?

Em pelo menos duas versões do Linux (Ubuntu 9 e Debian 7), notei que, embora eu tenha apenas um único endereço de loopback configurado em lo (o padrão 127.0.0.1), ele aceita pacotes para QUALQUER 127.xxx endereço. Achei isso bastante surpreendente, já que outras variantes do Unix descartam pacotes para endereços não configurados.

  • Por que/como isso acontece? Isso não acontece com nenhum outro intervalo de endereços, não é?
  • Como faço para fazer a coisa mais sensata (e segura!) E realmente prestar atenção aos endereços que estão configurados?

Editar: Eu li a RFC 5735, e é uma interpretação um tanto desleixada passar de"endereços dentro de todo o bloco 127.0.0.0/8 não aparecem legitimamente na rede em nenhum lugar"para"esta máquina deve aceitar pacotes para todos esses IPs". Afinal, você não vê hosts aceitando pacotes para todos os 172.16.0.0/12, só porque eles têm um desses endereços configurado.

Minha intenção não era perguntar sobre as especificações dos endereços, mas sobre a implementação da lógica de aceitação de pacotes no Linux. "Por que" e "como" aqui significam o que no kernel Linux real faz com que a lógica normal "este pacote é para mim" seja ignorada?

Responder1

Loopback é especial. É todo o espaço 127.0.0.0/8 e nunca sai da máquina. Essa é a única exceção para escutar apenas endereços configurados; se estiver em loopback, é especial.

Não consigo pensar em nenhuma implicação de segurança nisso, já que esses endereços nunca podem estar na rede física.

Responder2

A lógica de rota normalnão ésendo ignorado, e esta configuraçãoé mais segurodo que aquele que você propõe.

Primeiro, vamos dar uma olhada na tabela de roteamento para ver o que está acontecendo.

# 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 a interface está configurada com um /8prefixo, o que faz com que o Linuxautomaticamentegerar uma rota para 127.0.0.0/8a qual vai para a lointerface. Isso impõe o requisito de que todos os pacotes deste bloco não apareçam em nenhum lugar da rede e façam loopback dentro do host.

Sem esta rota, os pacotes para a 127.0.0.0/8rede seriamnãoseria retornado dentro do host e seria potencialmente elegível para ser roteado para uma interface de rede. Isso introduziria insegurança e incumprimento da RFC.

Tenha em mente que “loopback” significa exatamente isso. Enquanto em uma interface normal, um pacote enviado a ela sai, na interface de loopback, um pacote enviado a ela sai e é imediatamente retornado. Isso é o que significa loopback e por que você vê esse tráfego.

Responder3

Não é específico do Linux (o Win funciona exatamente da mesma forma), mas segue as especificações (como Eric observou): deRFC 5735 - Endereços 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.

informação relacionada