Warum empfängt iptables das markierte Paket nicht?

Warum empfängt iptables das markierte Paket nicht?

Ich habe die Optionen des Ping-Befehls gelernt. Dabei habe ich die Option -m gefunden, um die Markierung für ein Paket festzulegen.

Der folgende Befehl sendet das Paket mit der Markierung 10 an 192.168.2.65.

ping -m 10 192.168.2.65

Mit dem folgenden Befehl kann ich das Paket am Ziel empfangen.

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

Aber der obige Befehl empfängt das markierte Paket nicht. Der obige iptables-Befehl gibt nichts zurück.

Hinweis: Wir haben beide Root-Berechtigungen.

Antwort1

Diese Markierung ist intern und nirgendwo im Paket oder in einem seiner Header enthalten.

Das bedeutet, dass die Daten beim Herstellen der tatsächlichen ausgehenden Verbindung verloren gehen und in der INPUTTabelle des Zielservers nicht sichtbar sind, Sie können sie jedoch in der OUTPUTTabelle des initiierenden Computers sehen.

Der Sinn der Unterstützung einer Markierung im Ping besteht darin, ausgehende Routingregeln zuzulassen.

Antwort2

Die Antwort von @Julie Pelletier ist 100 % richtig, für Sie aber wahrscheinlich nicht ganz verständlich.

Erstens, wie mehrfach in den Kommentaren erwähnt, ist die Markenichtin das Ethernet-Paket auf dem Kabel einfügen. Wenn Sie also Server B von Server A aus anpingen, wird Server B die Markierung niemals erkennen können. Wenn Sie etwas tun möchten, müssen Sie Server A allein verwenden. Sie müssen also eine Regel in die OUTPUT-Kette desAbsenderum etwas zu sehen.

Sehen wir uns nun an, wie man verwendet iptables. Zuerst wollen wir sehen, welche Regeln in OUTPUT aktiv sind:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
root@roran:~#

Ok, keine Regeln. Lass uns eine Regel definieren:

root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#

Wie Sie sehen, gibt es keine Ausgabe. Aber die Kernel-Tabelle hat jetzt einen Eintrag:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Die Spalten "pkts" und "bytes" sind beide 0, da noch keine Pakete rausgegangen sind. Pingen Sie nun einen anderen Server an,ohneZeichen setzen:

root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]

Danach hat die Kernel-Tabelle immer noch keine Übereinstimmung ergeben:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Versuchen Sie als Nächstes einen Ping mit gesetzter Markierung:

root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]

und schau dir die Tabelle noch einmal an:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    1    84 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

Jetzt hat die Regel ein Paket gefunden, das 84 Bytes hatte.

Wenn Sie experimentieren möchten, löschen Sie anschließend iptables -F OUTPUTdie Tabelle, iptables -I OUTPUT -m mark --mark 0x0a -j REJECTum zu verhindern, dass markierte Pakete Ihren Computer verlassen. Pingen Sie dann den anderen Computer mit und ohne Markierung an. Sie werden sehen, dass die markierten Pakete jetzt keine Antwort erhalten, da die Regel sie verwirft.

verwandte Informationen