Wie kann ich einige ausgehende Pakete stillschweigend verwerfen?


8

Ich teste eine Anwendung, an der ich arbeite, und muss in der Lage sein, ausgehende UDP-Pakete für einen kurzen Zeitraum stillschweigend zu verwerfen, um einen möglichen Fehlermodus zu replizieren.

Gibt es eine Möglichkeit, dies zu tun?

Hinweis: iptables DROP Schweigt nicht für ausgehende Nachrichten! Wenn ein send()oder ein ähnlicher Anruf abgebrochen wird iptables, wird er EPERMaus einem bizarren Grund zurückgegeben (siehe hier . Leider kann ich diese Antwort nicht verwenden, da mein Ziel nur einen Sprung entfernt ist).

xtables-addons Früher hatte ich ein STEALVerb , aber es wurde vor ein paar Jahren ohne Grund entfernt, den ich finden kann.


Ich habe jetzt versucht, falsche Routen in der Routing-Tabelle zu verwenden, und leider scheint dies beide Richtungen des Kommunikationsverkehrs zu unterbrechen.
Für den Test ich tun muß, ich habe zu erlauben , eingehenden UDP - Verkehr, und sobald ich den falschen Weg, um den Streaming eingehenden Pakete sofort halt, installieren , obwohl die Quelle noch sie zu senden ist.


1
Weit entfernt von einer vollständigen / ordentlichen Lösung, aber ich habe in der Vergangenheit ähnliche Testbedingungen benötigt. In meinem Fall hat das Hinzufügen einer gefälschten statischen Route zu dem Server, mit dem ich mich verbinde, gut funktioniert.
Steve

@steve - Eine falsche Route scheint die Dinge in beide Richtungen zu zerstören , und ich muss die Funktionalität der Empfangsrichtung beibehalten.
Gefälschter Name

Antworten:


2

Wie wäre es mit dem Hinzufügen einer Dummy-Schnittstelle und dem Festlegen der Route zu dieser Schnittstelle?

# ip link add dummy0 type dummy
# ip link set dev dummy0 up
# ip route add 8.8.8.8/32 dev dummy0
# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms

Es werden immer Pakete für beliebige (Nachbar- oder Remote-) Adressen gesendet dummy0.

# tshark -i dummy0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'dummy0'
  1   0.000000   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=1/256, ttl=64
  2   1.007348   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=2/512, ttl=64
  3   2.015394   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=3/768, ttl=64

Leider scheint dies eingehende Pakete nicht zuzulassen, die der Route von anderen Schnittstellen entsprechen. Als solches ist es nicht wirklich Arbeit (es bricht die offene UDP rx ich weiterhin ermöglichen müssen streamen).
Gefälschter Name

2

Durch das Hinzufügen einer Route wird der eingehende Datenverkehr aufgrund der Filterung des umgekehrten Pfads unterbrochen. Einfache Lösung: Deaktivieren Sie die Umkehrpfadfilterung auf der Schnittstelle:

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

(Verwenden Sie Ihre eingehende Schnittstelle anstelle der eth0oben genannten).

Sie können auch das REDIRECTZiel verwenden (senden Sie das Paket beispielsweise an einen Netcat, der darauf wartet - nc -l -u -p 1234 > /dev/null). Eine kompliziertere Version wäre NFQUEUE.

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.