Kurze Antwort: Mit einem normalen Benutzer kann man nichts anfangen.
Lange Antwort: Um Pakete markieren zu können, müssen Sie ein Root-Benutzer oder zumindest ein Benutzer mit der SO_MARK
Fähigkeit sein (muss als Root festgelegt werden):
SO_MARK am Socket (7) :
SO_MARK (since Linux 2.6.25)
Set the mark for each packet sent through this socket (similar
to the netfilter MARK target but socket-based). Changing the
mark can be used for mark-based routing without netfilter or
for packet filtering. Setting this option requires the
CAP_NET_ADMIN capability.
Der Code bei ping_common.c von iputils, der diese Theorie bestätigt:
#ifdef SO_MARK
if (options & F_MARK) {
int ret;
enable_capability_admin();
ret = setsockopt(sock->fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
disable_capability_admin();
if (ret == -1) {
/* we probably dont wanna exit since old kernels
* dont support mark ..
*/
fprintf(stderr, "Warning: Failed to set mark %d\n", mark);
}
}
#endif
Um mehr über Fähigkeiten zu erfahren: Übersicht über die Fähigkeiten des Menschen (7) und die Fähigkeiten (7) .
Wenn Sie die Funktionen aller anderen Binärdateien des Systems weiter ausbauen möchten, ist dies eine gute Möglichkeit, sie zu prüfen. Umfasst die Kernel-Kompilierung, sodass sie möglicherweise nicht für die Produktionsumgebung geeignet ist.
Nützlichkeit der ICMP-Kennzeichnung:
Wie auf den Manpages beschrieben :
-m mark
use mark to tag the packets going out. This is useful for variety of reasons
within the kernel such as using policy routing to select specific outbound processing.
Und wie in einer Superuser- Frage erläutert , kann diese Funktion nützlich sein, wenn Sie eine Multilink- / Multiroute-Netzwerkumgebung prüfen, in der Sie erzwingen müssen, dass ein ICMP-Paket einen bestimmten "Fluss" durchläuft.
Praktisches Beispiel. Host 1:
$ ping -m 10 <host>
Host 2. Ändern Sie die Standardrichtlinie für INPUT
to DROP
und akzeptieren Sie Pakete nur von der Quell-IP der spezifischen Route, die auf Host 1 die Markierung 10 aufweist:
# iptables -P INPUT DROP
# iptables -A INPUT -s <IP_SOURCE_MARK_10> -p icmp -j ACCEPT
Dies wurde bereits erklärt hier . Auch hier wird es besser zum Debuggen von Routing-Entscheidungen verwendet (wenn Sie mehr als einen Pfad zwischen zwei Hosts haben), da a tcpdump -nevvv -i <interface> src host <source_host>
mehr als genug ist, um nur die "Ankunft von ICMP-Paketen" zu prüfen.