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?
fonte
Você pode usar a ação tc mirred. Por exemplo: Para tráfego de entrada:
Para tráfego de saída:
fonte
Pesquise na rede o tcpbridge, que é exatamente o que faz o trabalho. Também pode ser usado para conversar com máquinas virtuais.
fonte
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.
fonte
Um dispositivo que copia os quadros Ethernet de uma interface para outra é uma ponte. Você pode configurar seu sistema Linux para atuar como uma ponte. Alguma documentação pode ser encontrada aqui:
Você pode aplicar regras de filtragem ao tráfego em ponte usando ebtables , que é análogo
iptables
ao tráfego da camada 2.fonte
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 2Vamos 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 eth1mostre 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
fonte