Copiando pacotes de uma interface para outra

9

Eu tenho um sistema Linux (que seja A) com 2 placas Ethernet, ou seja, eth0 e eth1, que estão conectadas a duas LANs totalmente independentes.

Basicamente, eth0 é usado para o tráfego normal de aplicativos e eth1 é usado apenas para fins de depuração. Depuração significa que eth1 está vinculado usando um cabo cruzado a outra caixa Linux (que seja B) que executa o Wireshark. Quero que o Wireshark seja capaz de processar pacotes de aplicativos que viajam no eth0 de A.

Basicamente, preciso copiar pacotes de viagem da interface eth0 para a interface eth1, para que o Wireshark na caixa B possa detectá-los (por alguns motivos, não tenho acesso físico à LAN eth0). Eu também poderia precisar especificar quais pacotes copiar de eth0 para eth1 de acordo com alguma regra (com base apenas nos campos TCP / IP).

Observe também que eth0 de A não precisa ser colocado no modo promíscuo, porque eu só quero copiar um subconjunto de pacotes que têm A como destino

Existe uma maneira de conseguir isso usando o iptables sozinho? Ou preciso escrever um aplicativo para fazer isso funcionar? O que devo fazer para "copiar" os pacotes?

Emiliano
fonte

Respostas:

7

Se o seu kernel é recente o suficiente, você pode usar o iptables --tee para encaminhar quadros do eth0 para a máquina de captura.

Gerald Combs
fonte
Esse link agora está protegido por senha.
Pipe
4

Você pode usar a ação tc mirred. Por exemplo: Para tráfego de entrada:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

Para tráfego de saída:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1
indefinir
fonte
3

Pesquise na rede o tcpbridge, que é exatamente o que faz o trabalho. Também pode ser usado para conversar com máquinas virtuais.

Walter
fonte
1

Algo como o rinetd pode funcionar (redirecionador / servidor somente para TCP , creio, portanto não há ARP, Camada 2 etc.), mas com toda a honestidade, obter alguns comutadores gerenciados que possuem recursos de espelhamento de porta ou se essa caixa é usada apenas para o wireshark, você pode adicionar outra NIC a ele, conectar as duas interfaces, colocá-lo na frente do eth0 da máquina A e ter uma máquina sniffing dedicada.

gravyface
fonte
0

Na minha configuração, o tráfego TX multicast foi marcado por iptables, mas o roteamento de políticas usando novas tabelas de roteamento nunca funcionou. Embora funcionasse para pacotes TX unicast (redirecionando pacotes de origem de eth0 para eth5). Usando tc, eu poderia obter o tráfego eth0 mcast para eth5 O endereço src mac e src ip são alterados para o eth5, portanto, não haverá problemas com os aprendizados dos comutadores. Todo o suporte do kernel para agendamento de pacotes do kernel CONFIG_NET_SCHED deve estar ativado

Abaixo do WORKS para redirecionamento de tráfego unicast e multicast de eth0 para eth5

O Netfilter pode ser usado para interagir diretamente com a estrutura que representa um pacote no kernel. Essa estrutura, o sk_buff, contém um campo chamado “__u32 nfmark” que vamos modificar. O TC lerá esse valor para selecionar a classe de destino de um pacote.

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329,330 -o eth0 -j MARCA --set-mark 2

Vamos criar uma árvore que represente nossa política de agendamento e que use o PRIO qdisc (agendador de pacotes) (pode tentar outros disponíveis). qdiscs anexando na raiz de um dispositivo

tc qdisc add identificador raiz root eth0 15: prio

Agora, de um lado, uma política de modelagem de tráfego e, do outro lado, a marcação de pacotes. Para conectar os dois, precisamos de um filtro.

referir man tc-mirred (8): A ação mirred permite espelhar pacotes (copiar) ou redirecionar (roubar) o pacote que recebe. O espelhamento é às vezes chamado de Switch Port Analyzer (SPAN) e é comumente usado para analisar e / ou depurar fluxos.

consulte man tc-fw (8): fw - filtro de controle de tráfego fwmark o filtro fw permite classificar pacotes com base em um fwmark definido anteriormente pelo iptables. Se for idêntico ao 'identificador' do filtro, o filtro corresponderá. O iptables permite marcar pacotes únicos com o alvo MARK ou conexões inteiras usando o CONNMARK.

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' tc filter add dev eth0 pai 15: 0 protocolo ip prio 1 identificador 0x2 pedit de ação fw ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action redirecionamento de saída mirado dev eth1

mostre acima as réguas ajustadas: qdisc do tc mostre o eth0 dev do filtro tc mostre o eth0 dev

excluir / desabilitar as regras definidas acima: tc qdisc del dev eth0 root

noel av
fonte