Comment puis-je supprimer silencieusement certains paquets sortants?

8

Je teste une application sur laquelle je travaille et je dois être capable de supprimer silencieusement les paquets UDP sortants pendant une courte période pour répliquer un mode d'échec possible.

Y a-t-il un moyen de faire ça?

Remarque: iptables DROP n'est pas silencieux pour les messages sortants! Lorsqu'un send()appel ou un appel similaire est interrompu iptables, il revient EPERMpour une raison étrange (voir ici . Malheureusement, je ne peux pas utiliser cette réponse car ma destination est à un seul bond).

xtables-addons utilisé pour avoir un STEALverbe , mais il a été supprimé il y a quelques années sans aucune raison que je puisse trouver.


J'ai maintenant essayé d'utiliser de fausses routes dans la table de routage, et malheureusement, cela semble casser les deux directions du trafic de communication.
Pour le test que je dois faire, je dois autoriser le trafic UDP entrant , et dès que j'installe la fausse route, les paquets entrants en streaming s'arrêtent immédiatement, bien que la source les envoie toujours.

Faux nom
la source
1
Loin d'une solution complète / bien rangée, mais j'ai eu besoin de conditions de test similaires dans le passé. Dans mon cas, l'ajout d'une fausse route statique au serveur auquel je me connecte a bien fonctionné.
steve
@steve - Un faux itinéraire semble casser les choses dans les deux sens, et j'ai besoin de maintenir la fonctionnalité de la direction RX.
Fake Name

Réponses:

2

Que diriez-vous d'ajouter une interface factice et de définir l'itinéraire vers cette interface?

# 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

Il envoie toujours des paquets pour toutes les adresses (voisines ou distantes) activées 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
yaegashi
la source
Malheureusement, cela semble interdire les paquets entrants qui correspondent à la route à partir d'autres interfaces. En tant que tel, cela ne fonctionne pas vraiment (il casse le flux rx UDP ouvert que je dois autoriser à continuer).
Fake Name
2

L'ajout d'un itinéraire interrompt le trafic entrant en raison du filtrage de chemin inverse. Solution simple: désactivez le filtrage de chemin inverse sur l'interface:

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

(utilisez votre interface entrante à la place de eth0ci - dessus).

Vous pouvez également utiliser la REDIRECTcible (envoyer le paquet à, par exemple, un netcat qui l'écoute - nc -l -u -p 1234 > /dev/null). Une version plus compliquée serait NFQUEUE.

derobert
la source