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

3

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 no lo (o padrão 127.0.0.1), ele aceita pacotes para QUALQUER Endereço 127.xxx. Achei isso bastante surpreendente, já que outras variantes do Unix soltam pacotes para endereços não configurados.

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

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

Minha intenção não era perguntar sobre a especificação dos endereços, mas sobre a implementação da lógica do Linux para aceitar pacotes. "Por que" e "como" aqui significa o que no kernel atual do Linux faz com que a lógica normal do "este pacote para mim" seja contornada?

    
por Eric 17.04.2015 / 18:02

3 respostas

4

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

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

    
por 17.04.2015 / 18:35
1

A lógica de rota normal não está sendo ignorada, e essa configuração é mais segura do que aquela que você propõe.

Primeiro, vamos ver a 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 prefixo /8 , o que faz com que o Linux automaticamente gere uma rota para 127.0.0.0/8 , que vai para a interface lo . Isso impõe a exigência de que todos os pacotes para este bloco não apareçam na rede em qualquer lugar e retornem dentro do host.

Sem essa rota, os pacotes para a rede 127.0.0.0/8 não seriam colocados em loop dentro do host e potencialmente seriam qualificados para serem roteados para fora de uma interface de rede. Isso introduziria insegurança e falta de conformidade com a RFC.

Tenha em mente que "loopback" significa exatamente isso. Enquanto em uma interface regular, um pacote enviado para ele se apaga, na interface de loopback, um pacote enviado para ele sai e é imediatamente retornado. Isso é o que significa loopback e por que você vê esse tráfego.

    
por 18.04.2015 / 19:23
0

Não é específico do Linux (o Win funciona exatamente da mesma forma), seguindo as especificações (como Eric observou): de RFC 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.
    
por 17.04.2015 / 18:38