Warum akzeptiert Linux Datenverkehr für nicht konfigurierte Loopback-Adressen?


3

Unter mindestens zwei Linux-Versionen (Ubuntu 9 und Debian 7) ist mir aufgefallen, dass ich zwar nur eine einzige Loopback-Adresse (die Standard-Adresse 127.0.0.1) konfiguriert habe, aber Pakete für ANY 127.xxx gerne annehme Adresse. Ich fand das ziemlich überraschend, da andere Unix-Varianten Pakete für nicht konfigurierte Adressen ablegen.

  • Warum / wie macht es das? Das passiert bei keinem anderen Adressbereich, oder?
  • Wie bringe ich es dazu, das Vernünftigere (und Sicherere!) Zu tun und tatsächlich auf die konfigurierten Adressen zu achten?

Bearbeiten : Ich habe RFC 5735 gelesen, und es ist eine ziemlich schlampige Interpretation davon, von "Adressen im gesamten 127.0.0.0/8-Block werden nicht legitim im Netzwerk angezeigt" bis "dieser Computer Pakete für alle annehmen muss diese IPs " . Schließlich sehen Sie nicht, dass Hosts Pakete für alle 172.16.0.0/12 akzeptieren, nur weil eine dieser Adressen konfiguriert ist.

Ich wollte nicht nach der Spezifikation der Adressen fragen, sondern nach der Implementierung der Logik für die Annahme von Paketen durch Linux. "Warum" und "Wie" bedeutet hier, was im eigentlichen Linux-Kernel dazu führt, dass die normale Logik "Dieses Paket für mich" umgangen wird?

Antworten:


4

Loopback ist etwas Besonderes. Es ist der gesamte 127.0.0.0/8 Speicherplatz und verlässt die Maschine nie. Dies ist die einzige Ausnahme, wenn nur konfigurierte Adressen abgehört werden sollen.

Ich kann mir keine Auswirkungen auf die Sicherheit vorstellen, da sich diese Adressen niemals im physischen Netzwerk befinden können.


1

Die normale Routenlogik wird nicht umgangen, und diese Konfiguration ist sicherer als die von Ihnen vorgeschlagene.

Schauen wir uns zuerst 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 /8Präfix konfiguriert ist, wodurch Linux automatisch eine Route generiert, 127.0.0.0/8die zur loSchnittstelle führt. Dies erzwingt die Anforderung, dass alle Pakete für diesen Block nirgendwo im Netzwerk erscheinen und im Host zurückgeschleift werden.

Ohne diese Route würden Pakete für das 127.0.0.0/8Netzwerk nicht in den Host zurückgeschleift und könnten möglicherweise über eine Netzwerkschnittstelle weitergeleitet werden. Dies würde zu Unsicherheit und RFC-Verstößen führen.

Denken Sie daran, dass "Loopback" genau das bedeutet. Während auf einer regulären Schnittstelle ein an sie gesendetes Paket ausgeht, geht auf der Loopback-Schnittstelle ein an sie gesendetes Paket aus und wird sofort zurückgegeben. Dies ist, was Loopback bedeutet und warum Sie diesen Verkehr sehen.


0

Es ist nicht Linux-spezifisch (Win funktioniert genauso), sondern folgt der Spezifikation (wie Eric bemerkt hat): aus RFC 5735 - IPv4-Adressen für spezielle Zwecke

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.