적어도 두 가지 버전의 Linux(Ubuntu 9 및 Debian 7)에서 lo(표준 127.0.0.1)에 단일 루프백 주소만 구성되어 있음에도 불구하고 모든 127.xxx에 대한 패킷을 허용한다는 것을 확인했습니다. 주소. 다른 Unix 변종은 구성되지 않은 주소에 대한 패킷을 삭제하기 때문에 이것이 매우 놀랍다는 것을 알았습니다.
- 왜/어떻게 이런 일을 하는가? 다른 주소 범위에서는 이런 일이 발생하지 않습니다. 그렇죠?
- 보다 합리적이고 안전한 작업을 수행하고 실제로 구성된 주소에 주의를 기울이게 하려면 어떻게 해야 합니까?
편집하다: RFC 5735를 읽었는데, 그에 대한 해석이 다소 엉성합니다."전체 127.0.0.0/8 블록 내의 주소는 네트워크 어디에도 합법적으로 표시되지 않습니다."에게"이 시스템은 이러한 모든 IP에 대한 패킷을 수락해야 합니다.". 결국 호스트가 해당 주소 중 하나를 구성했기 때문에 모든 172.16.0.0/12에 대한 패킷을 수락하는 것을 볼 수 없습니다.
내 의도는 주소 사양에 대해 묻는 것이 아니라 Linux의 패킷 수신 논리 구현에 대해 묻는 것이었습니다. 여기서 "왜"와 "어떻게"는 실제 Linux 커널에서 "이 패킷이 나에게 있습니까?"라는 일반적인 논리를 우회하는 원인이 무엇인지 의미합니다.
답변1
루프백은 특별합니다. 전체 127.0.0.0/8 공간이며 머신을 떠나지 않습니다. 이는 구성된 주소만 수신하는 유일한 예외입니다. 루프백 중인 경우에는 특별합니다.
해당 주소는 물리적 네트워크에 있을 수 없기 때문에 이에 대한 보안 관련 의미는 생각할 수 없습니다.
답변2
일반 경로 논리아니다우회되고 있으며 이 구성은더 안전하다당신이 제안한 것보다.
먼저 라우팅 테이블을 보고 무슨 일이 일어나고 있는지 살펴보겠습니다.
# 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
인터페이스가 접두사로 구성되어 있음을 알 수 있습니다 /8
. 이로 인해 Linux는자동으로127.0.0.0/8
인터페이스 로 이동하는 경로를 생성합니다 lo
. 이는 이 블록의 모든 패킷이 네트워크 어디에도 나타나지 않고 호스트 내부에서 루프백된다는 요구 사항을 적용합니다.
이 경로가 없으면 127.0.0.0/8
네트워크 의 패킷은~ 아니다호스트 내부에서 루프백되며 잠재적으로 네트워크 인터페이스 밖으로 라우팅될 수 있습니다. 이로 인해 보안이 불안정해지고 RFC 비준수가 발생하게 됩니다.
"루프백"이 바로 그런 의미라는 점을 명심하세요. 일반 인터페이스에서는 자신에게 보낸 패킷이 나가는 반면, 루프백 인터페이스에서는 보낸 패킷이 나가서 즉시 반환됩니다. 이것이 루프백의 의미이며 이 트래픽이 표시되는 이유입니다.
답변3
이는 Linux에만 국한되지 않고(Win은 정확히 동일하게 작동함) 사양을 따릅니다(Eric이 언급한 대로).RFC 5735 - 특수 용도 IPv4 주소
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.