Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.c : relai de connection TCP via apache

Posté par Emeric Verschuur (Jabber id, page perso, ) le 09 mai 2008

Bonjour,



Étant comme beaucoup de gens confronté à un blocage de port, je voudrais élaborer une solution dont voici le principe :



Donnée du problème :

* Serveur x en local qui est en écoute d'une connections sur un port y

* Serveur HTTP (apache qui héberge mon sites ainsi que d'autres services)

* Un client z qui ne peux pas se connecter directement au serveur x car le port y est bloqué en sortie par le routeur.

Le mode de communication entre le client z et le serveur x est asynchrone donc le client envoie des données (requêtes) au serveur et vice-versa.



Principe :

Voilà : le souci c'est comment faire passer une session TCP via le port 80 pour finalement être relayer sur le port y...



Ce que je voudrais c'est par exemple :

z commence une session TCP avec apache sur le port 80

z envoie une requête une requête "GET /dossier-redirect/" (On suppose que apache est configuré de telle manière que l'accès au dossier /dossier-redirect/ fait appel à un module ou script CGI nommé s).

s récupère le no de socket (descripteur de fichier) associé à la connexion http avec z

s commence une session TCP avec le serveur x sur le port y

en fin s relaye les données de s vers z et vice-versa jusqu'à ce que z ou s effectue une clôture de session tcp.



voilà, je sais que c'est assez tordu mais ma question c'est : est ce que c'est faisable ? et est ce qu'il y aurait d'autre alternatives.



ps: ce que je voudrais éviter, c'est un proxy http ou tunnel http...



merci d'avance

> Lire le message (5 commentaires, moyenne: 1,4).  

Vous avez demandé le commentaire #929591.

SSH

Posté par Obsidian () le 09/05/2008 à 16:21. (lien). Évalué à 2.

Si ton problème est juste de contourner un blocage de port, tu fais un ssh avec les options -L et -R. Je m'en servais pour écouter les webradios sur mon portable au boulot.

Maintenant, si tu veux faire un point d'entrée depuis l'extérieur, tu peux effectivement faire un CGI avec un execv() et hériter du socket (enfin, il me semble), mais ça nécessite d'avoir un client adapté à cela. En plus, ça ne sert à rien car : soit tu as un filtrage au niveau du port uniquement et dans ce cas, le tunnel SSH fonctionne très bien, soit tu as un firewall un peu plus sioux et il te bloquera tout ce qui ne ressemble pas au contenu d'une requête HTTP convenable.

Bon courage.

[ Répondre ]

  • [^]Re: SSH

    Posté par Benjamin (Jabber id, page perso, ) le 09/05/2008 à 19:37. (lien). Évalué à 2.

    Il y a une autre possibilité de filtrage : le niveau 7 : si le routeur bloque tous les ports et vérifie la cohérence applicative des ports autorisés, cela devient plus chaud

    Exemple : le routeur peut vérifier que sur le 21, tu ne fais que des commandes FTP, que tu fais bien du HTTP sur le port 80 etc.

    Or, il y a une faille bien souvent dans ce type d'appli : le 443, souvent relayé tel quel, ou, au mieux, le routeur à pare-feu applicatif vérifie juste qu'il s'agit bien de dialogue SSL. Or, SSH et HTTPS ont ce point commun ;)

    Moralité, installer un serveur ssh sur le port 443 peut parfois s'avérer très utile, ...

    Après, une fois ssh ouvert, -L et -R (voire -D, furieux va ! ) sont vos amis

    [ Répondre ]

    • [^]Re: SSH

      Posté par Toto () le 10/05/2008 à 01:12. (lien). Évalué à 1.

      Et avec un httptunnel et un apache en reverse proxy, on peut meme s'amuser à faire en sorte que l'on ait un serveur web classique, mais qu'un des virtual hosts soit la passerelle ssh. Cela évite d'avoir à "bloquer" le port 443 pour sshd.
      Ex :
      www.domaine.com:443 --> site web legitime
      ssh.domaine.com:443 --> le serveur ssh

      Petit howto ici : http://dag.wieers.com/howto/ssh-http-tunneling/

      [ Répondre ]

      • [^]Re: SSH

        Posté par Emeric Verschuur (Jabber id, page perso, ) le 10/05/2008 à 11:49. (lien). Évalué à 1.

        merci pour vos réponses !

        le truc c'est que le client doit être le plus transparent possible pour l'utilisateur landa sans passer par du tenneling et utilisable derrière un firewall d'un boite ou d'une FAC, etc...
        En plus, j'ai aussi un serveur https qui utilise le port 443

        Le bon côté c'est que mon protocole de com entre x et z est déjà en ssl donc je pense passer par un script CGI via le port 443 et donc le firewall ne verra que du feu :-)

        --
        contact_at_mr-ti.com

        Turion64x2 1,9GHz Gentoo Linux
        AMD64x2 2,4GHz Gentoo Linux

        [ Répondre ]