Come posso eliminare silenziosamente alcuni pacchetti in uscita?


8

Sto eseguendo alcuni test di un'applicazione su cui sto lavorando e devo essere in grado di eliminare silenziosamente i pacchetti UDP in uscita per un breve periodo di tempo per replicare una possibile modalità di errore.

C'è un modo per fare questo?

Nota: iptables DROP non è silenzioso per i messaggi in uscita! Quando una send()chiamata o una chiamata simile viene interrotta iptables, restituisce EPERMper qualche bizzarro motivo (vedi qui . Sfortunatamente, non posso usare quella risposta poiché la mia destinazione è a un solo hop di distanza).

xtables-addons utilizzato per avere un STEALverbo , ma ha ottenuto rimosso a pochi anni fa per nessuna ragione che posso trovare.


Ora ho provato a utilizzare percorsi fasulli nella tabella di routing e, sfortunatamente, sembra interrompere entrambe le direzioni del traffico delle comunicazioni.
Per la prova ho bisogno di fare, io devo per consentire in entrata traffico UDP, e non appena installo il percorso fasullo, i pacchetti in entrata in streaming immediatamente halt, anche se la fonte è ancora li manda.


1
Lungi dall'essere una soluzione completa / ordinata ma in passato avevo bisogno di condizioni di test simili. Nel mio caso l'aggiunta di una falsa route statica al server a cui mi sto collegando ha funzionato bene.
steve

@steve - Una rotta fasulla sembra spezzare le cose in entrambe le direzioni e devo mantenere la funzionalità della direzione RX.
Nome falso

Risposte:


2

Che ne dici di aggiungere un'interfaccia fittizia e impostare il percorso per quell'interfaccia?

# 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

Invia sempre pacchetti per qualsiasi indirizzo (vicino o remoto) attivo 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

Sfortunatamente, questo sembra non consentire i pacchetti in entrata che corrispondono al percorso da altre interfacce. In quanto tale, non funziona davvero (interrompe il flusso rx UDP aperto che devo consentire per continuare).
Nome falso

2

L'aggiunta di un percorso interrompe il traffico in entrata a causa del filtro del percorso inverso. Soluzione semplice: disabilitare il filtro del percorso inverso sull'interfaccia:

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

(usa la tua interfaccia in entrata al posto di eth0sopra).

È inoltre possibile utilizzare il REDIRECTtarget (inviare il pacchetto, ad esempio, a un netcat che lo ascolta— nc -l -u -p 1234 > /dev/null). Una versione più complicata sarebbe NFQUEUE.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.