Quelque chose de très courant lorsque la gestion des serveurs redirige le trafic.
Supposons que nous ayons un serveur avec certains services en cours d'exécution, mais pour une raison quelconque, nous modifions l'un de ces services (Je ne sais pas, par exemple pop3 qui est le port 110) vers un autre serveur. La normale et la plus fréquente serait de simplement changer l'adresse IP dans l'enregistrement DNS, mais si quelqu'un utilisait l'adresse IP au lieu du sous-domaine, il sera affecté.
Que faire? ... simple, redirigez le trafic que le serveur reçoit via ce port vers un autre serveur avec le même port.
Comment commencer à rediriger le trafic?
La première chose est que nous devons avoir activé le la transmission sur le serveur, pour cela nous mettrons ce qui suit:
echo "1" > /proc/sys/net/ipv4/ip_forward
Vous pouvez également utiliser cette autre commande, au cas où la précédente ne fonctionnerait pas pour vous (ça m'est arrivé comme ça sur un CentOS):
sysctl net.ipv4.ip_forward=1
Ensuite, nous redémarrerons le réseau:
service networking restart
Dans les distributions RPM comme CentOS et autres, ce serait:
service nertwork restart
Maintenant, nous allons passer à la chose importante, dire au serveur à travers iptables quoi rediriger:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
En d'autres termes, et en suivant l'exemple que j'ai mentionné, supposons que nous voulions rediriger tout le trafic que notre serveur reçoit via le port 110 vers un autre serveur (pas: 10.10.0.2), qui recevra toujours ce trafic via 110 (c'est le même service):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
Le serveur 10.10.0.2 verra que tous les paquets ou requêtes proviennent de l'IP du client, au cas où ils voudraient nager les requêtes, c'est-à-dire que le 2ème serveur voit que les requêtes arrivent avec l'IP du 1er serveur (et en le auquel on applique la redirection), ce serait aussi mettre cette deuxième ligne:
iptables -t nat -A POSTROUTING -j MASQUERADE
Quelques questions et réponses
Dans l'exemple, j'ai utilisé le même port à deux reprises (110), mais ils peuvent rediriger le trafic d'un port à un autre sans problème. Par exemple, supposons que je veuille rediriger le trafic du port 80 vers 443 sur un autre serveur, pour cela ce serait:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
C'est iptables, ils peuvent utiliser tous les autres paramètres que nous connaissons, par exemple, si nous voulons uniquement rediriger le trafic depuis une adresse IP spécifique, il faudrait ajouter -s … Par exemple, je ne redirigerai que le trafic provenant de 10.10.0.51:
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Ou tout un réseau (/ 24):
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Nous pouvons également spécifier l'interface réseau avec -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
La fin!
Comme je l'ai déjà dit, c'est iptables, vous pouvez appliquer ce qui est déjà connu pour que le serveur fasse exactement ce que vous voulez qu'il fasse 😉
Salutations!
Nous pouvons également le faire à partir d'un pare-feu qui permet la redirection de port, non? (en appliquant les règles correspondantes).
Oui bien sûr, au final un pare-feu comme Pfsense ou autres, utilise iptables par derrière.
Pour être exact, pfsense n'utilise pas iptables mais pf, rappelez-vous qu'il s'agit d'un bsd à l'intérieur.
Oh oui, mon mal!
Merci beaucoup pour le conseil 🙂
J'ai quelques doutes:
1 - Le changement est-il permanent? ou est-il perdu lors du redémarrage du serveur?
2 - J'ai plusieurs instances (disons A, B et C) sur le même sous-réseau. Dans l'instance A, j'applique la règle pour acheminer le trafic vers une adresse IP externe, et en testant avec les boucles des instances B et C, tout fonctionne à merveille. Le problème est qu'à partir de l'instance A, cela ne fonctionne pas. J'ai essayé d'utiliser à la fois votre ip et l'interface de bouclage, et ni l'un ni l'autre ne fonctionne:
$ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –à destination xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –à destination xxxx: 8080
$ curl ip-yyyy: 8080 / hello_world
curl: (7) Échec de la connexion au port ip-yyyy 8080: connexion refusée
$ curl localhost: 8080 / hello_world
curl: (7) Échec de la connexion au port localhost 8080: Connexion refusée
Une idée de ce que peut être le problème?
Oui, la modification est perdue au redémarrage, vous devrez utiliser iptables-save & iptables-restore ou quelque chose comme ça pour éviter cela.
Je n'ai pas bien compris ce que vous voulez faire, instance A?
J'ai un serveur qui ne prend en charge que les connexions à partir d'une adresse IP particulière (serveur A), je ne peux pas ou je veux ajouter plus d'ips à la liste blanche (pour des problèmes d'évolutivité), donc je veux que tout le trafic vers le serveur externe passe par ledit serveur (A ).
Pour une question de praticité, j'ai des configurations globales qui définissent quelle adresse IP utiliser pour chaque service, donc dans ce cas, c'est quelque chose comme "tout le monde qui veut utiliser le service externe doit utiliser IP A"
J'ai réussi cela en utilisant la méthode de cet article, mais je rencontre le problème que lors de son application, le serveur A ne peut pas accéder au service en utilisant sa propre adresse IP (mais tous les autres serveurs le font).
Jusqu'à présent, le mieux que j'ai trouvé a été d'ajouter le mappage dans le fichier / etc / hosts du serveur A, pointant vers l'adresse IP externe, remplaçant le paramètre global.
Très bien, si j'ai un autre serveur de messagerie, je pourrais transférer le trafic du port 143 du serveur1 au serveur2 et les e-mails atteindront le serveur2, non?
salutations
En théorie oui, ça marche comme ça. Bien sûr, vous devez avoir le serveur de messagerie correctement installé sur le serveur2 🙂
Le genre de messages que nous aimons lire, merci!
Excellent article, j'ai un projet dans lequel je travaille et je voulais vous poser une question, il existe des commutateurs industriels avec fonction NAT (je suppose qu'ils utilisent IPTables ci-dessous), pour traduire une adresse IP sans apporter de modifications à l'équipement, un exemple, j'ai un serveur 10.10.2.1 qui communique avec les ordinateurs 10.10.2.X et via le commutateur est programmé de sorte qu'un ordinateur qui a une adresse 192.168.2.4 soit réellement vu du serveur comme 10.10.2.5, cela traduit cette IP adresse à voir Des autres ordinateurs avec cette adresse, je veux le faire à partir d'un serveur avec Ubuntu ou une autre distribution, quelles seraient les règles iptables?
Très bonne info merci ^ _ ^
Bonsoir.
J'ai un problème en essayant de faire une redirection. je m'explique:
J'ai un serveur proxy dans Ubuntu, avec 2 cartes réseau:
eth0 = 192.168.1.1 est connecté au reste du réseau local.
eth1 = 192.168.2.2 est connecté au routeur.
J'ai besoin de tout ce qui passe par eth0 pour passer par eth1, et aussi par le proxy (j'utilise Squid, dont le port par défaut est 3128), et je ne trouve pas la clé dans la configuration IPTABLES.
Je n'ai besoin d'aucune restriction d'aucune sorte, seulement qu'un enregistrement reste dans le journal des adresses Web visitées.
J'espère que vous pourrez m'aider car c'est une tâche assez lourde qui me préoccupe depuis quelques jours.
Merci.
Ami, je suis très nouveau sur les autres serveurs, je n'en ai aucune idée mais je comprends le sujet et j'apprends vite, ma question est la suivante j'ai 2 serveurs serv_1 et serv_2 que j'ai connectés au même intranet, dans ces serveurs j'ai un owncloud mis en place, je voudrais faire ce qui suit:
qu'une certaine plage d'ips par exemple rangeip_1 lors du placement d'une ip d'accès au owncloud (ipowncloud) est dirigée vers le serv_1 et s'il s'agit d'un autre rangeip_2 placé le même ipowncloud est dirigé vers le serv_2, ceci afin que les 2 serveurs soient localisés dans deux villes différentes et les plages IP sont différentes mais elles sont toutes sur le même réseau, ce serait la première partie, la seconde serait claire est de synchroniser ces 2 serveurs pour qu'ils soient des miroirs ou qu'ils me le conseillent dans l'ordre pour optimiser la bande de largeur, s'il vous plaît, si vous allez m'expliquer comment le faire étape par étape, pas en mode super programmeur = (
Bonjour, excusez-moi, j'ai un switch en charge de la communication de tous les appareils qui composent mon réseau, et après cela un pare-feu et enfin la sortie Internet, ce qui se passe c'est que je souhaite que la redirection soit donnée dans le switch et n'a pas besoin d'atteindre le pare-feu sauf si le service demandé est Internet.
En utilisant cette méthode, pourriez-vous rediriger HTTPS vers HTTP?
Salut, c'est peut-être un peu tard, mais je voulais vous demander, comment faire pour que squid ne modifie pas l'adresse IP du client lorsque je veux me connecter à un serveur Web sur le même réseau?
Ne me traitez pas mal pour avoir demandé. Cela peut-il être fait sous Windows?
Cette information m'a été utile. Comme toujours, on peut vous faire confiance, quand je ne trouve pas quelque chose en anglais, je finis généralement par chercher en espagnol, à ces occasions, je viens presque toujours sur ce site.
J'ai un routeur 4G qui est client d'un réseau que je ne gère pas (évidemment, je suis client)… ce routeur est une passerelle vers ce réseau distant via OpenVPN. De plus, ledit routeur remplit la fonction de redirection de port pour accéder au port 80 du serveur d'un de ces sous-réseaux du domaine.
C'était la déclaration que je devais mettre dans le routeur comme règle personnalisée du pare-feu «-t nat -A POSTROUTING -j MASQUERADE»
Merci pour l'aide!