[Resolu] Forward ssh connections ENTRANTES

Forum sur la sécurité des réseaux, la configuration des firewalls, la mise en place de protections contre les attaques, de DMZ, de systèmes anti-intrusion ...

Modérateur: modos Ixus

[Resolu] Forward ssh connections ENTRANTES

Messagepar destroy » 28 Jan 2005 12:54

bonjour tous le monde,

Je vous explique ce que je tente de faire:
Je veux transférer un port d'une interface reseau (eth0) vers la boucle locale. voici ce que j'ai fait:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1888 -j DNAT --to 127.0.0.1:80
iptables -t nat -A PREROUTING -i lo -p tcp --dport 80 -j DNAT --to 192.168.0.1:1888
iptables -A FORWARD -i lo -o eth0 -p tcp --dport 1888 -j ACCEPT
iptables -A FORWARD -i eth0 -o lo -p tcp --dport 1888 -j ACCEPT

Or, ben rien n'arrive sur lo :'( ... Comme si on ne pouvait transferer de port sur lo, alors que le forward sur cette meme machine le forward d'autres port vers d'autres interface que "lo" marchent tres bien.

Merci de votre aide.
Dernière édition par destroy le 11 Fév 2005 20:45, édité 1 fois au total.
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar destroy » 31 Jan 2005 23:31

Aie, pas de reponse... Dur :?

Je vous pose une colle ou j'ai malheureusement dis une bêtise plus grosse que moi :wink:

Allez les gozu d'iptables courage :wink:
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar destroy » 10 Fév 2005 10:56

Allo allo


Up :D
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar Wizard_Spike » 10 Fév 2005 11:07

euh.....attend attend... j'comprend rien ^^
Tu veux forwarder le port 1888 de eth0 sur le 80 de la boucle locale c'est ça?
En gros, tu veux pouvoir faire http://localhost et que ça pointe sur le port 1888 de eth0 ?
Cette question est pour voir si il ne serait pas plus simple de forwarder le port 1888 de eth0 sur le port 80 de eth0, tout simlpement. La boucle locale étant, pour moi, un peu "spéciale", je me demande si on peut forwarder des ports comme ça... je me demande même si la boucle locale a des ports...
A mon avis, la boucle locale (qui te permets d'utiliser 127.0.0.1) "utilise" les ports ouverts des interfaces réseaux "réelles".
Suis-je compréhensible?
En tout cas, essaye de remplacer tes "lo" par "eth0" et tes "127.0.0.1" par "192.168.0.1".

Je reste à l'écoute!
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Messagepar destroy » 10 Fév 2005 12:05

La boucle locale est une interface "presque" comme les autres, elle a donc des ports comme tout les autres.

Forwarder le port sur la meme interface n'est pas le but. En realité je veux amenner un port de lexterieur sur ma boucle locale pour pouvoir le "reforwarder" de maniere encrypter par ssh...

Un exemple pourrait etre pour le ftp:
le forward du port 21 public vers mon lo
de mon lo vers mon poste connecté via ssh

... en esperant avoir été un poil plus clair :? ...
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar Wizard_Spike » 10 Fév 2005 12:38

oulaaaaa.
Reprenons... j'en ai fait un paquet des forwards SSH dans tous les sens et dans des cas parfois pas simples, et il y a toujours une solution ;) et je ne suis jamais passé par le "lo".
Tu as un serveur distant qui a ouvert le port 1888. Tu veux forwarder le port 1888 du serveur distant sur lamachine A afin que la machine B puisse y accéder via SSH, c'est ça?
Avec SSH tu as la possibilité de demander le forward suir la mahicne B de n'importe quel port accessible depuis la machine A, y compris des ports distants. Ainsi, sur B tu demandes à A "forward le port 1888 de la machine 216.54.236.5 sur mon port 80". Il faut bien entendu que la machine A ait accès au port 1888 de la machine 216.54.236.5.

Si ce n'est pas ce que tu veux, essaye de mieux préciser tes besoins, mais je te promets que il n'y a pas beosin passer par lo pour faire des forwards de ports (me^me dans les cas les plus difficiles)
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Messagepar destroy » 10 Fév 2005 15:11

Oui ca ca marche dans le cas ou le service tourne sur le serveur cad que le port 21 est actif sur toutes les interfaces de la machine A y compris Lo (ce qui est le cas car j'ai un proxy sur A et je peux surfer par ssh avec).... Or dans mon cas de forward ce n'est pas le cas, seul le port de eth0 recois qqch

....LAN
:::tunnel ssh

F=freebox......A=routeurNux(avec sshd):::::::::B=(machine sur lequel le service a mapper tourne)

alors la freebox fait du nat en forwardant le port vers A
A et B ont un tunnel SSH avec forward du port 1888 de A vers B or dans ssh je n'arrive qu'a dire: prend le (lo de A):1888 et ammene a B sur le meme port sur lo aussi cela dis en passant.

Si je pouvais dire a mon ssh client (putty ds mon cas) "attrappe le 1888 sur Eth0 de A a soit gentil ramene le moi sur B" ca serais parfait. Mais je ne peut pas (j'ai l'impression que c impossible) donc j'essaye de contourner le probleme en amenant 1888 eth0 de A sur Lo:1888

OUFFF dur explication... embrouillée et confuse d'un truc pas tres compliqué a expliquer si vous etiez en face de moi :D....

un aspirine et je compte sur vous :p
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar Wizard_Spike » 10 Fév 2005 16:31

Bon!! *fait craquer ses doigts* En plus t'utilises Putty c'est parfait!!

Je pense que j'ai du mal aujourd'hui.... Le serveur qui ouvre le port 1888 est où exactement? Sur internet? ou sur A? "routeurNux", c'est Li"Nux" configuré en routeur avec un service sshd?

Ce que j'ai compris:
Un service est sur B qui a ouvert le port 1888. Depuis l'internet, tu aimerais que ce port 1888 soit accédé. Pour se faire, tu fais du NAT sur ta freebox spécifiant qu'un appel sur l'adresse ip publique de ta freebox sur le port 1888 soit transféré à ta machine A "routeurNux". Ensuite tu veux que A transfère les infos venant de la freebox concernant le port 1888 sur la machine B via un tunnel SSH. J'ai bon?
En gros, tu veux que quelqu'un sur internet puisse taper <adresse_ip_pub_freebox>:1888 et arriver sur un service hébergé sur ta machine B, j'ai bon?

2eme choix:
Un service hébergé sur un serveur dans l'internet ouvre le port 1888. Tu aimerais y accéder, depuis ta machine B, alors que seul un tunnel SSH est ouvert entre A et B.

En gros, les deux choix sont:
B est un serveur qui ouvre son port 1888, et il faut qu'il soit accessible depuis internet.
ou
B veux accéder à un serveur internet sur le port 1888.

Image

Dans les deux cas, c'est possible, j'suis sûr, j'vais bien trouver. :D Dis moi si c'est ça et je t'explique comment procéder.

Je suis désolé de t'embêter avec toutes ces questions, mais ça a pa l'air si simple ton truc :p[/img]
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Messagepar destroy » 10 Fév 2005 18:41

Tout d'abors, Merci bcp de t'interesser au probleme.

C'est bien la premiere solution: Le service tourne sur B et je veux que ce service soit accessible depuis le net. Comme tu le dis si bien:

IPfreebox:1888 ===> NuxA ==SSH==> MachineA en attente de connection sur 1888

Le routeurnux c'est bien un linux :) euh que s'autre... ben rien ! A si: je donne ma langue au chat :D
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar Wizard_Spike » 10 Fév 2005 18:58

Aaaahhh cool ! Le serveur sshd est sur A (routeurNux) et le client (putty) est sur B.
Dans le client putty, il faut paramétrer ceci:

Image

Ceci permet de dire que le port 1888 de B sera forwardé sur A. Ensuite, comme tu l'as déjà fait, ajouter une règle de NAT sur la freebox pour dire que les appels sur ip publique de freebox sur le port 1888 sont redirigés sur le port 1888 de A.
Le tour est normalement joué ;)

Aie, j'ai pas le temps d'aller plus loin dans les explications. Je ne pourrai regarder ta réponse que demain. désolé ! MAis ça devrait marcher là ;)
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Messagepar destroy » 11 Fév 2005 10:25

Ettt nannnnnnn :D

Vouala comment je lis ta configuration:
Remote 1888 => donc capture 1888 sur le serveur sshd et ammenne le à destination du (dans mon cas) 192.168.0.1:1888 or ma machine cliente ptty ne connait pas cet Ip...

Ou alors j'ai aps compris, enfin de toutes facon je viens d'essayer et malheureusement: perdu ca ne marche pas. Car ta configuration specifie un port de destination inconu pour le client.

Pour exemple:

dans ma configuration de putty j'ai un Local:8080 destination 127.0.0.1:8080 qui dis:
capture 8080 sur le localclient et ammenne le à destination sur le sshd 127.0.0.1:8080 ca ca marche.
Or si je fais Local:8080 destination 192.168.0.1:8080 ca me fait :
capture 8888 sur le localclient et ammenne le à destination sur le sshd 192.168.0.1:8080 ca ca marche aussi (je le vois avec Iptraf).

Ce qui est dommage avec putty c'est que quand tu specifie Local ou remote, tu dois inverser ta lecture de la phrase "prend xxx et amene a destination de xxx : xxxx"

Du coup quand tu demande le remote xxxx tu t'adresse obligatoirement a la boucle locale du serveur distant.... enfin je crois....

HELPEUUU :roll:
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar tomtom » 11 Fév 2005 11:29

J'ai un peu de mal à comprendre....

Dans le schema que tu as validé, le flux est en clair sur Internet et en SSH dans le réseau privé ?
Ca me parait pour le moins surprenant comme méthode.


je vois plutot comme ça :

client A ------ Internet ----- Linux ------ serveur B


La problématique que l'on a en général, c'est "Client A veut acceder à un service sur serveur B port 1080".
Or la seule chose qui est ouverte sur ton linux, c'est le 22 SSH, et tu ne veux pas forwarder directement le port 1080, surtout que le service qui est dedans est en clair et que tu ne veux pas qu'il soit lu sur Internet.
Le client A ne sait parler que sur le port 1080 et ne sait pas faire de ssh. On va ajouter putty devant pour monter le tunnel.

Donc :
Serveur Linux ecoute sur le port 22 demon ssh

client : ex : putty.
Dans "tunnels", on ajoute un tunnel LOCAL, source port = 1080, destination = @locale_serveur_B:1080
(l'addresse locale du serveur b est bien celle qui est vue depuis le linux !)


ensuite, sur le client A, tu dis que le sevreur distant est "127.0.0.1 port 1080"


et ca va rouler.

Previens si tu veux faire autre chose !

t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar Wizard_Spike » 11 Fév 2005 11:58

Mouais... Disons que n'ayant pas de précision sur le contexte général, ça ne m'a pas choqué ce SSH sur le réseau local... Si la communication sur le port 1888 n'a aps à être sécurisée, ça ne me choque pas ^^
Par contre, si le SSH n'est là que pour le forward de port, je pense que l'on peut s'en passer ^^ Justement avec des IPtables et des règles de routages, on doit pouvoir arriver à répondre à ton besoin...

Cependant, j'ai fait une petite procédure avec un exemple pour le cas exprimé précédement:

Bon, reprenons depuis le début:
Le serveur SSH est sur machine A.
Le Putty est sur machine B.
Restons sur la machine B et ouvrons Putty. On configure l'accès SSH vers machine A et on va dans le menu de configuration des forwards de ports.
Le champ "Destination" est le port à forwarder ainsi que l'adresse de la machine où est ce port.
Dans ton cas, ce port ce trouve sur B. On place donc "adresse_ip_B:1888"
Le champ "Source port" est le port à ouvrir pour y forwarder le port "Destination".
Dans ton cas, le port a créer est 1888 et il faut qu'il soit ouvert sur A. Or A est la machine que Puty appelle, c'est donc la machine "remote". On saisit dont 1888 dans le champ "source port" et on sélectionne l'option "remote".
On n'oublie pas de cliquer sur le bouton "Add" et on lance la connexion. Normalement, un port 1888 a dû être créé sur A.

J'ai fait la manip' de mon côté.
J'ai un serveur SSH Linux (adresse ip 192.168.1.37).
J'ai une machine cliente windows sur laquelle j'ai Putty (adresse ip 192.168.1.126).
Le problème est que je n'ai pas service d'ouvert sur ma mahicne cliente, mais peu importe. J'ai des dossiers partagés sur mon réseau, j'ai donc les ports netbios (137, 138 et 139) d'ouverts. Je vais forwarder l'un d'eux sur mon serveur SSH.
Je ne pourrai pas faire de test de connexion, mais je peux au moins montrer qu'un port sera ouvert sur mon serveur SSH.

Je vais donc sur ma machine cliente, j'ouvre une fenêtre de commandes MSDOS et je lance "netstat -a". Je vérifie que mes ports netbios sont ouverts.

Image

C'est bon, j'ouvre donc Putty et je le configure.
Ici je vais forwarder le port 137 sur mon serveur SSH. Le soucis c'est que je ne pourrai pas ouvrir ce même port sur le serveur SSH, puisque pour ouvrir un port inférieur à 1024 sur un linux, il faut être ROOT. Or je ne le serais pas pour la connexion SSH. Qu'importe, j'ouvrirai un autre port (9999, on le verra bien).

Image

Je clique sur le bouton "add" (j'oublie fréquemment de le faire :roll: )

Image

Je lance la connexion sur mon serveur SSH. Je regarde les logs de la connexion, dans "event log" (faire un cli droit sur la barre de titre de la connexion SSH après s'être loggé. On peut y voir l'établissement du forward. (y a des messages d'erreurs quand il y arrive pas)

Image

J'en profite pour y lancer la commande "netstat -a" pour vérifier que le port 9999 a bien été créé:

Image

C'est bon, et il y a de fortes chances pour que mon port 137 soit pointé par ce port 9999. Je te rassure, j'ai bien vérifié au préalable, le port 9999 n'était pas ouvert sur le serveur SSH avant la manip'. (je n'aurais aucune raison de te mentir au point ou j'en suis ;))

Tout ce que je peux te conseiller, c'est de bien reprendre depuis le début tes manip', vérifier les paramètres de la connexion SSH, vérifier que le port 1888 est bien ouvert sur ta machine B...
Poste ets résultats, j'aimerais bien que ce problème soit résolu, je suis curieux ^^
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Messagepar destroy » 11 Fév 2005 13:11

Hum... :? euh :?

alors la je comprend plus la differance entre remote port et local port de la configuration de putty.... Je vais refaire un detour par le howto :roll:

Pour mon amiral tomtom je t'explique. Le schema que j'ai validé est c'est vrai un peu bizzard! Mais ce qu'il faut souligner c'est qu'un ssh on peut le monter de n'importe où. Du reseau local, du net, d'un reseau wifi (comme le montre les autres schema. Cette operation est dans le but d'avoir un service etant accessible sur mon pc "nomade" n'importe où je sois. (boulot, amis ou meme en wifi chez moi mais en wifi reelement privé vive le rsa :p )

Image

Vouila. Bon pour l'intant je vais essayer d'avancer avec les consignes de wizzard_spike mais je suis tout embrouillé....

Parceque je fait deja du forward de port de mon client au serveur et j'ai choisit local 8888 direction du serveur ssh sur son lo... Ca ca marche
Ce qui ne marche pas c'est le chemin inverse (ce qui arrive du serveur je le met sur le client) Enfin si, ca marche mais qu'a partir de lo et pas de l'interface etho. (exemple je mais un service http sur le client je map le 80 du client sur le 1888 du serveur .
Et magie si je fais Lynx 127.0.0.1:1888 hop ca marche tt seul... ca remonte bien le tunnel jusqu'a chez le client.. Mais si je fait Lynx 192.168.0.1:1888 ===> banane (normal)

Enfin je vous tiens au courant.... Je n'abandonnerais pas de si tôt :D
destroy
Second Maître
Second Maître
 
Messages: 40
Inscrit le: 16 Avr 2004 11:18
Localisation: Lyon

Messagepar Wizard_Spike » 11 Fév 2005 15:01

Très ingénieux ton système !!

La différence entre remote et local dans Putty est simple:
A est le serveur SSH et B la machine cliente avec Putty.
Remote indique que le port (indiqué dans "Source Port") sera créé sur A.
Local indique que le port (indiqué dans "Source Port") sera créé localement, donc sur B.

Ceci est complêtement indépendant du port à forwarder (noté dans Destination).

Au passage, pense bien à cocher la case "local port accept connections from other hosts" dans la config du forward de port.

Bonne chance !!
Linux c'est dur!! pfiou....
Avatar de l’utilisateur
Wizard_Spike
Aspirant
Aspirant
 
Messages: 125
Inscrit le: 20 Août 2003 00:00

Suivant

Retour vers Sécurité et réseaux

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron