Quelle est la différence entre PREROUTING et FORWARD dans iptables?

16

J'essaie de comprendre comment ce système fonctionne et j'ai des problèmes pour comprendre la différence entre utiliser NAT PREROUTING ou filter FORWARD. D'après ce que je comprends, le PREROUTE peut envoyer le paquet à un autre serveur, en évitant le filtre. Si NAT peut gérer cela via PREROUTE, quel est le but d'avoir une règle FORWARD dans le filtre?

GheorGhe
la source

Réponses:

25

Table NAT :

Ce tableau ne doit être utilisé que pour NAT (Network Address Translation) sur différents paquets. En d'autres termes, il ne doit être utilisé que pour traduire le champ source ou le champ de destination du paquet.

Tableau des filtres :

La table de filtrage est principalement utilisée pour filtrer les paquets. Nous pouvons faire correspondre les paquets et les filtrer comme bon nous semble. C'est l'endroit où nous prenons des mesures contre les paquets et regardons ce qu'ils contiennent et DROP ou / ACCEPT, en fonction de leur contenu. Bien sûr, nous pouvons également effectuer un filtrage préalable; cependant, cette table particulière est l'endroit pour lequel le filtrage a été conçu.

En parcourant les tables et les chaînes, nous pouvons voir que la chaîne FORWARD du filtre n'est traversée que par des paquets transférés (les paquets qui viennent du réseau ET sortent vers le réseau), c'est-à-dire que votre ordinateur agit comme un routeur, tandis que la chaîne PREROUTING de nat est traversée par les deux transmis les paquets et les paquets dont la destination est l'hôte local.

Vous devez utiliser PREROUTING de nat uniquement pour modifier l'adresse de destination des paquets et FORWARD du filtre uniquement pour le filtrage (suppression / acceptation de paquets).

Si nous obtenons un paquet dans la première décision de routage qui n'est pas destiné à la machine locale elle-même, il sera routé via la chaîne FORWARD. Si le paquet est, en revanche, destiné à une adresse IP que la machine locale écoute, nous enverrons le paquet via la chaîne INPUT et à la machine locale. entrez la description de l'image ici Les paquets peuvent être destinés à la machine locale, mais l'adresse de destination peut être modifiée au sein de la chaîne PREROUTING en faisant NAT. Comme cela a lieu avant la première décision de routage, le paquet sera examiné après ce changement. Pour cette raison, le routage peut être modifié avant que la décision de routage ne soit prise. Notez que tous les paquets passeront par l'un ou l'autre chemin dans cette image. Si vous DNAT un paquet vers le même réseau d'où il vient, il continuera à voyager à travers le reste des chaînes jusqu'à ce qu'il soit de retour sur le réseau.

Eric Carvalho
la source
5

PREROUTING : Cette chaîne est utilisée pour prendre toutes les décisions liées au routage avant ( PRE ) d'envoyer des paquets. Rappelez-vous toujours que dans la table PREROUTING/POSTROUTINGie NAT, les ACCEPT/DROP/REJECTcibles etc de la FILTERtable par défaut ne fonctionneront pas. Le NATtableau est uniquement utilisé pour prendre des décisions de routage. Vous devez utiliser PREROUTINGlorsque vous prenez des décisions de routage, c'est-à-dire les décisions qui doivent être prises avant que le paquet ne commence à traverser le réseau. Voici un exemple, nous redirigeons tout trafic qui vient d'atteindre le serveur sur le port 80 vers le port 8080:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

FORWARD : Comme son nom l'indique, la FORWARDchaîne de FILTERtable est utilisée pour transférer les paquets d'une source vers une destination, ici la source et la destination sont deux hôtes différents. Ainsi, comme vous pouvez l'imaginer, les FORWARDrègles sont essentiellement utilisées sur les serveurs où un hôte envoie / reçoit du trafic d'un autre hôte via le serveur. Lorsque le paquet est généré à partir du serveur, la chaîne signifie OUTPUTque le trafic sort de lui-même tandis que la INPUTchaîne signifie que les paquets sont destinés au serveur lui-même uniquement. Voici un exemple de FORWARDchaîne où tout le TCPtrafic reçu sur le port 80 sur l' interface eth0destiné à l'hôte 192.168.0.4sera accepté et transmis à 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
heemayl
la source
Votre utilisation des "hôtes" semble bizarre. La table utilisée lorsque dépend principalement des interfaces locales dans lesquelles un package est entré et est destiné à se fermer.
guntbert
quelle partie semble bizarre? j'ai utilisé la notion d'hôtes pour indiquer les parties d'envoi et de réception ..
heemayl
Je parle du paragraphe AVANT: cette table est utilisée lorsqu'un paquet entrant par une interface est destiné à une autre interface (par opposition à un hôte local)
guntbert
oh..ok..j'ai compris .... ouais je devrais utiliser l'interface .... juste utiliser des hôtes pour le rendre facile à imaginer..je changerai cela quand je serai en face de mon ordinateur.
heemayl
@guntbert: je viens de mettre la tête droite. n'a pas lu votre dernier commentaire assez attentivement. Je pense que vous vous trompez dans le contexte de deux interfaces différentes pour la FORWARDchaîne. Lorsque des paquets sont transférés d'un hôte d'un LAN vers un autre hôte d'un LAN, les paquets passeront par une seule interface et la chaîne utilisée sera FORWARDbien qu'ici le serveur (moyen) n'agira pas comme un routeur au sens strict peut plutôt être considéré comme un interrupteur.
heemayl