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 /8
prefixo, o que faz com que o Linuxautomaticamentegerar uma rota para 127.0.0.0/8
a qual vai para a lo
interface. 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/8
rede 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.