¿Cómo puedo descartar silenciosamente algunos paquetes salientes?


8

Estoy haciendo algunas pruebas de una aplicación en la que estoy trabajando, y necesito poder descartar silenciosamente los paquetes UDP salientes durante un corto período de tiempo para replicar un posible modo de falla.

¿Hay alguna forma de hacer esto?

Nota: ¡ iptables DROP no es silencioso para los mensajes salientes! Cuando una send()llamada o una llamada similar se interrumpe iptables, regresa EPERMpor alguna extraña razón (ver aquí . Desafortunadamente, no puedo usar esa respuesta ya que mi destino está a un solo salto).

xtables-addons solía tener un STEALverbo , pero se eliminó hace unos años sin ninguna razón que pueda encontrar.


Ahora he intentado usar rutas falsas en la tabla de enrutamiento, y desafortunadamente, eso parece romper ambas direcciones del tráfico de comunicaciones.
Para la prueba que necesito hacer, tengo que permitir el tráfico UDP entrante , y tan pronto como instalo la ruta falsa, los paquetes entrantes de transmisión se detienen inmediatamente, aunque la fuente todavía los envía.


1
Lejos de ser una solución completa / ordenada, pero he necesitado una condición de prueba similar en el pasado. En mi caso, agregar una ruta estática falsa al servidor que estoy conectando funcionó bien.
Steve

@steve: una ruta falsa parece romper cosas en ambas direcciones, y necesito mantener la funcionalidad de la dirección RX.
Nombre falso

Respuestas:


2

¿Qué hay de agregar una interfaz ficticia y configurar la ruta a esa interfaz?

# 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

Siempre envía paquetes para cualquier dirección (vecina o remota) 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

Desafortunadamente, esto parece no permitir los paquetes entrantes que coinciden con la ruta desde otras interfaces. Como tal, realmente no funciona (rompe el flujo de UDP rx abierto que necesito permitir que continúe).
Nombre falso

2

Agregar una ruta es interrumpir el tráfico entrante debido al filtrado de ruta inversa. Solución simple: deshabilite el filtrado de ruta inversa en la interfaz:

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

(use su interfaz entrante en lugar de lo eth0anterior).

También puede usar el REDIRECTobjetivo (enviar el paquete a, por ejemplo, un netcat que lo escuche nc -l -u -p 1234 > /dev/null). Una versión más complicada sería NFQUEUE.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.