Se o seu kernel é recente o suficiente, você pode usar iptables --tee para encaminhar quadros de eth0 para a máquina de captura.
Editar: link atualizado desde o original está agora por trás de uma solicitação de senha.
Eu tenho um sistema Linux (seja ele A) com 2 placas ethernet, a saber eth0 e eth1 que estão conectadas a duas LANs totalmente não relacionadas.
Basicamente, eth0 é usado para o tráfego normal de aplicativos e eth1 é usado apenas para fins de depuração. Depuração significa que a eth1 é vinculada usando um cabo cruzado para outra caixa linux (seja ela B) que executa o Wireshark. Eu quero que o Wireshark seja capaz de processar pacotes de aplicativos viajando na eth0 de A.
Basicamente, eu 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 eu não tenho acesso físico à rede eth0). Eu também poderia precisar especificar quais pacotes copiar de eth0 para eth1 de acordo com alguma regra (baseado apenas em campos TCP / IP).
Observe também que eth0 de A não precisa ser colocado em 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 apenas o iptables? Ou eu preciso escrever um aplicativo para fazer isso funcionar? O que devo fazer para "copiar" os pacotes?
Se o seu kernel é recente o suficiente, você pode usar iptables --tee para encaminhar quadros de eth0 para a máquina de captura.
Editar: link atualizado desde o original está agora por trás de uma solicitação de senha.
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
Pesquise na net por tcpbridge. Isso é exatamente o que faz o trabalho. Também pode ser usado para as máquinas virtuais do Tal. É assim que Inuse.
Algo como rinetd pode funcionar (redirecionador / servidor para TCP somente eu acredito, então não ARP, Layer 2, etc.), mas com toda a honestidade, obtendo alguns switches gerenciados que têm recursos de espelhamento de porta ou se essa caixa é usada exclusivamente para wireshark, você poderia adicionar outro NIC para ele, ponte duas interfaces, coloque-a na frente da eth0 da máquina A e tenha uma máquina de farejamento dedicada.
Um dispositivo que copia 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 é um análogo de iptables
para o tráfego da camada 2.