Bei mindestens zwei Linux-Versionen (Ubuntu 9 und Debian 7) ist mir aufgefallen, dass, obwohl ich nur eine einzige Loopback-Adresse auf lo konfiguriert habe (die Standardadresse 127.0.0.1), Pakete an JEDE 127.xxx-Adresse problemlos angenommen werden. Das hat mich ziemlich überrascht, da andere Unix-Varianten Pakete für nicht konfigurierte Adressen verwerfen.
- Warum/wie passiert das? Das passiert doch bei keinem anderen Adressbereich, oder?
- Wie kann ich erreichen, dass es das Sinnvollere (und Sicherere!) tut und tatsächlich auf die konfigurierten Adressen achtet?
Bearbeiten: Ich habe RFC 5735 gelesen und es ist eine ziemlich schlampige Interpretation davon, von„Adressen innerhalb des gesamten Blocks 127.0.0.0/8 erscheinen nirgendwo im Netzwerk.“Zu„Diese Maschine muss Pakete für alle diese IPs akzeptieren“. Schließlich sehen Sie nicht, dass Hosts Pakete für ganz 172.16.0.0/12 akzeptieren, nur weil sie eine dieser Adressen konfiguriert haben.
Meine Absicht war nicht, nach den Spezifikationen für die Adressen zu fragen, sondern nach der Implementierung der Logik zum Akzeptieren von Paketen in Linux. „Warum“ und „wie“ bedeutet hier, was im eigentlichen Linux-Kernel dazu führt, dass die normale „Ist dieses Paket für mich“-Logik umgangen wird?
Antwort1
Loopback ist etwas Besonderes. Es umfasst den gesamten Bereich 127.0.0.0/8 und verlässt nie die Maschine. Das ist die einzige Ausnahme beim Abhören nur konfigurierter Adressen. Wenn es sich um Loopback handelt, ist es etwas Besonderes.
Ich kann mir keine Sicherheitsimplikationen vorstellen, da sich diese Adressen niemals im physischen Netzwerk befinden können.
Antwort2
Die normale Routenlogikist nichtumgangen werden, und diese Konfigurationist sichererals die, die Sie vorschlagen.
Schauen wir uns zunächst die Routing-Tabelle an, um zu sehen, was los ist.
# 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
Wir können sehen, dass die Schnittstelle mit einem /8
Präfix konfiguriert ist, was Linux dazu veranlasst,automatischGenerieren Sie eine Route, 127.0.0.0/8
die zur lo
Schnittstelle führt. Dadurch wird die Anforderung erzwungen, dass alle Pakete für diesen Block nirgendwo im Netzwerk auftauchen und innerhalb des Hosts zurücklaufen.
Ohne diese Route 127.0.0.0/8
würden Pakete für das Netzwerknichtinnerhalb des Hosts zurückgeschleift werden und möglicherweise über eine Netzwerkschnittstelle weitergeleitet werden können. Dies würde zu Unsicherheit und RFC-Verstößen führen.
Denken Sie daran, dass „Loopback“ genau das bedeutet. Während ein an eine normale Schnittstelle gesendetes Paket hinausgeht, geht ein an die Loopback-Schnittstelle gesendetes Paket hinaus und wird sofort zurückgegeben. Das ist die Bedeutung von Loopback und der Grund, warum Sie diesen Datenverkehr sehen.
Antwort3
Es ist nicht Linux-spezifisch (unter Windows funktioniert es genauso), sondern folgt der Spezifikation (wie Eric bemerkt hat): vonRFC 5735 - Spezielle Verwendung von IPv4-Adressen
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.