Como posso silenciosamente deixar alguns pacotes de saída?

7

Estou fazendo alguns testes de um aplicativo em que estou trabalhando e preciso ser capaz de silenciosamente eliminar pacotes UDP de saída por um curto período de tempo para replicar um possível modo de falha.

Existe alguma maneira de fazer isso?

Observação: iptables DROP não é silencioso para mensagens de saída! Quando uma chamada send() ou semelhante é descartada por iptables , ela retorna EPERM por algum motivo bizarro ( veja aqui . Infelizmente, não posso usar essa resposta, pois meu destino está a um salto de distância.

xtables-addons usado para ter um verbo STEAL , mas ele foi removido há alguns anos sem nenhuma razão que eu possa encontrar.

Eu já tentei usar rotas falsas na tabela de roteamento e, infelizmente, isso parece quebrar ambas as direções do tráfego de comunicação.
Para o teste que preciso fazer, tenho para permitir o tráfego UDP de entrada e assim que instalo a rota falsa, os pacotes de entrada de fluxo são interrompidos imediatamente, embora a origem ainda está enviando-os.

    
por Fake Name 09.09.2015 / 22:13

2 respostas

2

Que tal adicionar interface fictícia e definir a rota para essa 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

Ele sempre envia pacotes para qualquer endereço (vizinho ou remoto) em 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
    
por 10.09.2015 / 03:49
2

A adição de uma rota está quebrando o tráfego de entrada devido à filtragem de caminho inverso. Solução simples: desative a filtragem de caminho inverso na interface:

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

(use sua interface de entrada no lugar de eth0 acima).

Você também pode usar o REDIRECT target (enviar o pacote para, por exemplo, um netcat que esteja atento a ele - nc -l -u -p 1234 > /dev/null ). Uma versão mais complicada seria o NFQUEUE.

    
por 10.09.2015 / 22:45