Comment changer l'adresse IP pour pointer vers localhost?

10

Un environnement sandbox d'une application web est accessible directement par une adresse IP: http://<my_ip_address>sans nom de connexion.

Existe-t-il un moyen de créer un hôte virtuel sur ma machine locale, nommé comme <my_ip_address>, et de modifier / etc / hosts afin qu'il se "redirige" vers mon hôte local?

127.0.0.1 <my_ip_address>

Ainsi, lorsque je charge l'URL, http://<my_ip_address>le navigateur pointe vers mon hôte local? La façon dont je peux déjà rediriger les noms de domaine.

Mike
la source

Réponses:

21

Le fichier Hosts ne peut être utilisé que pour associer un nom de domaine à une IP; il ne peut pas mapper IP à IP.

La modification des adresses IP peut être effectuée par un pare - feu . Sous Linux, le pare-feu par défaut est contrôlé par les commandes iptables . "man iptables" est la documentation. Google "explique iptables" pour des explications d'introduction.

Quelques liens:

http://linux.die.net/man/8/iptables

http://www.linuxnix.com/2009/12/iptables-in-linux-explained.html

http://blog.adityapatawari.com/2011/12/ip-packet-filtering-iptables-explained.html

Plus précisément, vous souhaitez remplacer les demandes SORTIES de votre PC par une adresse IP ( <my_ip_address>), afin qu'elles passent à la place à une adresse IP différente, dans ce cas 127.0.0.1. Vous voulez effectuer NAT ( Network Address Translation ), étant donné l '"IP de destination" ( <my_ip_address>; par exemple 123.45.67.89), en le changeant en une "IP de destination" différente (127.0.0.1).

Essayez ceci (au lieu de 123.45.67.89 , mettez l'adresse IP qui doit être modifiée):

iptables -t nat -A OUTPUT -p all -d 123.45.67.89 -j DNAT --to-destination 127.0.0.1

Détails:

-t nat = table pour traduire une adresse en une autre

-A OUTPUT = ajouter à la liste des règles pour les paquets sortants générés localement. AVERTISSEMENT DE SÉCURITÉ: Assurez-vous que la règle inclut cette directive OUTPUT. Si vous ne le faites pas, la règle créerait une faille de sécurité possible, car la correspondance des paquets entrants provenant d'emplacements distants serait également dirigée vers localhost.

-p all = s'applique à tous les protocoles (tcp, udp et icmp).

-d 123.45.67.89 = l'adresse IP d'origine vers laquelle le paquet allait (sa destination).

-j DNAT = si la règle correspond (dans ce cas, si un paquet sortant a la destination IP 123.45.67.89), alors traitez-la avec DNAT, qui modifie la destination.

--to-destination 127.0.0.1 = indique à DNAT quoi faire; remplacez la destination d'origine par "127.0.0.1".

(REMARQUE: si vous aviez une situation plus complexe, telle que l'interception de demandes de pages Web spécifiques, une solution alternative pourrait être d'utiliser un logiciel "proxy".)

ToolmakerSteve
la source
Notez qu'il y a un problème de sécurité ici. 127.0.0.1 est généralement considéré comme inaccessible à partir de tout hôte distant. Si vous changez cela sans ajouter de filtrage, vous pouvez involontairement contourner une mesure de sécurité.
Slartibartfast
@Slartibartfast - Notez que nous ne modifions que les demandes SORTIES. Et nous faisons le changement dans un pare-feu sur ce PC. (Certaines demandes, qui auraient été envoyées à un site externe, nous nous renvoyons à nous-mêmes.) Cela ne change pas les demandes ENTRÉES, donc cela n'affecte pas ce que toute personne distante peut voir / faire. Compte tenu de cela, voyez-vous toujours un problème de sécurité?
ToolmakerSteve
1
... la mesure de sécurité essentielle est l'inclusion de "-A OUTPUT" dans la règle. Selon votre commentaire, les gens doivent être conscients que OMITER qui aurait le danger que vous décrivez. J'ajouterai un commentaire pour le souligner.
ToolmakerSteve
3
Il fonctionne très bien mais je ne le vois nulle part iptables --list ou --list-rules. Comment puis-je l'énumérer et le supprimer ensuite lorsqu'il n'est plus nécessaire?
Filip Stefanov
@FilipStefanov (Un peu tard, je sais!): Énumérez les règles nat avec un nombre à côté d'eux: iptables -t nat --list --line-numbers Supprimez ensuite celles qui ne gouvernent jamais par ce nombre: iptables -t nat -D OUTPUT <number>
Richard Walton