Filtrando e enfileirando o pacote de um processo usando iptable

1

Estou tentando enfileirar os pacotes de um processo para que eu possa usar o libnetfilter_queue para modificá-los.

Eu sei que devo usar --pid-owner processid para filtrar pacotes de um processo e iptables -I <table or chain> <match specification> -j NFQUEUE --queue-num <queue number> para adicioná-los à fila. No entanto, confundo qual valor devo usar para "table or chain" e "especificação de correspondência" .

Como sou novo no iptable, li a documentação, mas ainda não tenho certeza de qual valor devo escolher, pois quero enfileirar os pacotes de um aplicativo independentemente de sua origem e destino.

Gostaria de receber sugestões que possam me ajudar a entender melhor esses dois campos, para que eu possa selecionar os valores certos para que eles resolvam meu problema.

    
por Corey 19.07.2017 / 10:44

1 resposta

0

Eu quis dizer "aplicativo" no sentido de "o que você quer fazer com ele".

Se você quiser monitorar o tráfego de rede de algo complicado, que potencialmente tem vários processos e threads, eu definitivamente recomendaria colocá-lo em um namespace de rede, fazer um veth-pair no namespace principal e, em seguida, apenas capturar o par veth com wireshark etc.

Aqui está um script que tem como ponto de partida:

#!/bin/bash

# Setup network namespace with veth pair, start xterm in it

# nsterm ns0 veth0 10.0.0 yellow 24

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3-:10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}

# echo ns=$NS dev=$DEV col=$COL mask=$MASK

ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" USERNAME

Substitua USERNAME pelo seu usuário, execute como root

nsterm ns0 veth0 10.0.0 yellow

e você obtém 10.0.0.1/24 no namespace ns0 , 10.0.0.254/24 no namespace da rede principal e um xterm amarelo onde você pode iniciar programas como o skype, firefox, chrome.

No namespace principal, você precisa ativar o encaminhamento e o mascaramento, digamos para wlan0 :

echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Em seguida, tcpdump -i veth0a ou wireshark.

    
por 19.07.2017 / 14:08