Transférez le trafic réseau d'un ordinateur à un autre à l'aide d'iptables

0

J'ai deux ordinateurs sur le même LAN

Comp A: 192.1681.151.15
Comp B: 192.1681.151.19

La configuration est comme ça

Internet <---->  Computer B
      ^-------->  Computer A 

Les deux ordinateurs ont une seule carte réseau.

Lorsque j'ouvre Wireshark, pour tout le trafic parcouru sur la composition A, je voudrais que Wireshark capture le trafic de la composition A et l'adresse de destination comme étant également ceux du serveur auquel elle se connecte.

J'ai essayé de comprendre iptables et d'autres questions connexes, mais j'ai quand même mal configuré cela.

J'utilise les règles iptables suivantes sur comp B

   iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.151.19:443 
   iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.151.19:80 
   iptables -t nat -A POSTROUTING -j MASQUERADE

Cependant, lorsque je navigue sur le trafic de la composition B, je ne vois pas de trafic sur la vue fils (fonctionnant sur la composition A). Quelqu'un peut-il me guider s'il vous plaît comment configurer cela correctement?


la source
Pouvez-vous expliquer un peu mieux ce que vous essayez de faire? Voulez-vous capturer tout le trafic de l'ordinateur A sur l'ordinateur B? Ou essayez-vous de capturer tout le trafic sur le réseau sur l'ordinateur B?
Prateek61
Je souhaite capturer l'intégralité du trafic de l'ordinateur A sur l'ordinateur B. Vous pouvez le considérer comme une composition B étant un proxy / une passerelle permettant de
Avez-vous mis à jour l'itinéraire sur l'ordinateur B lorsque vous avez effectué le iptableschangement?
Prateek61

Réponses:

0

Ce sont vraiment deux questions, et je ne suis pas sûr qu'elles soient liées.

1) Si les ordinateurs sont connectés par LAN Ethernet via un commutateur, et non par WLAN, tout le trafic sur le LAN est en principe visible pour tous les périphériques qui y sont connectés. Pas besoin de faire du masquerading / forwarding ou d'utiliser des règles iptables. Donc, lancez simplement Wireshark sur n’importe quel ordinateur, disons, l’ordinateur B, et vous devriez voir le trafic entre l’ordinateur A et le routeur.

Si cela ne fonctionne pas, envoyez une requête ping à l'ordinateur B à partir de l'ordinateur A. Envoyez ensuite une commande ping au routeur à partir de l'ordinateur A. Si les paquets de la première requête ping ne s'affichent pas, quelque chose de l'installation de Wireshark ne fonctionnera pas correctement. Si vous ne voyez que les paquets du premier ping, et non du second, l'interface supprime pour une raison quelconque les paquets qui ne sont pas destinés à cet ordinateur, ou si quelque chose filtre les paquets, vérifiez iptables sur l'ordinateur B, etc.

Edit : Ce qui peut également arriver, c'est que votre routeur ne joue pas le rôle de commutateur. J'ai testé un peu et j'ai constaté que j'avais en fait un routeur où les 4 ports LAN apparaissent comme des périphériques distincts et sont pontés (y compris le WLAN) à l'aide d'un pont de noyau Linux. Ce type de pont conserve une trace des adresses MAC qu’il a vues et ne le transmet qu’au port sur lequel il a vu l’adresse MAC de destination. Dans ce cas, les paquets des deux ordinateurs ne peuvent pas être vus sur l'autre machine.

Solutions: (a) Trouvez un autre commutateur Ethernet et connectez le tout, ou (b) utilisez la méthode de la passerelle.

2) Si vous souhaitez utiliser l'ordinateur B comme passerelle pour l'ordinateur A (il n'est pas nécessaire de simplement surveiller le trafic sur un réseau local Ethernet, mais peut être nécessaire, par exemple pour un réseau local sans fil), vous devez configurer l'ordinateur A pour qu'il utilise l'ordinateur B comme passerelle. . Très probablement, votre "Internet" dans votre configuration est un routeur domestique, qui agit en tant que serveur DHCP, attribue des adresses IP à l'ordinateur A et à l'ordinateur B, et leur dit d'utiliser le routeur en tant que passerelle. Donc, utilisez routeou ip routepour définir le bon chemin sur l'ordinateur A. Assurez-vous qu'il n'y a pas d'autres itinéraires.

Le script suivant me permet de configurer le transfert (même s’il n’est peut-être pas optimal):

#!/bin/bash

# forward traffic on the same $IF for one particular $ADDR, acting as gateway

modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat  

IF="eth0"
ADDR="192.168.178.25"

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $IF -o $IF -d $ADDR -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF -o $IF -s $ADDR -j ACCEPT
iptables -t nat -A POSTROUTING -s $ADDR -j MASQUERADE
dirkt
la source
Merci beaucoup. J'ai utilisé la règle de route ip. J'ai ajouté ce qui suit après avoir vidé toutes les règles actuelles dans iptables. ip route add default via <IP addr of comp B> . Je peux maintenant voir le trafic que je navigue sur la composition A dans Wirehark (installé dans la composition B). Cependant, lorsque je bloque tous les paquets en ajoutant des règles dans la composition B comme iptables -P INPUT DROP (et la même règle pour les tables OUTPUT et FORWARD), je peux toujours parcourir le trafic sur la composition A. Les paquets ne doivent-ils pas être bloqués également sur la composition A.
1) Toutes les règles iptables sur B n'affectent que ce que B fait avec ces paquets. Quelles que soient les règles que vous choisissez, lorsque A envoie des paquets à B, ces paquets s'afficheront sur l'interface et vous les verrez dans Warshark. Aussi, je ne comprends pas vraiment pourquoi vous voudriez les bloquer ... 2) Faites ip routeet ip -6 routesur A, et assurez-vous que la seule route est la route par défaut vers B. Si d'autres routes sont présentes, A peut toujours, par exemple contactez directement le routeur pour naviguer, etc. Si vous ne le faites pas et si vous ne configurez pas correctement le transfert sur A, B ne pourra pas se connecter à Internet.
dirkt
Je viens de supprimer toutes les tables de routage sur A à l'aide de la commande ip route del. La table de routage pour l'ordinateur B ressemble à pastebin.com/7jmwuWx8 et la table de routage pour Comp A est ici pastebin.com/rTXzy58R Sur comp B, j'ai exécuté cette commande echo "1"> / proc / sys / net / ipv4 / ip_forward . Tous les iptables sont vidés, mais il n’ya toujours pas de connexion Internet. Je ne comprends pas pourquoi cela ne fonctionne pas
Pas de connectivité Internet sur l'ordinateur A. J'ai exécuté le script ajouté au message sur la maquette B afin de prendre en charge les règles de transfert sur B. L'ordinateur B dispose d'une connexion Internet.
Vous avez modifié ADDRl'adresse actuelle de l'ordinateur A et IFl'interface réseau réelle de l'ordinateur B?
dirkt