GNU/Linux >> Tutoriels Linux >  >> Linux

Comment un proxy Transparent Socks sait-il quelle adresse IP de destination utiliser ?

Je connais deux proxys SOCKS qui prennent en charge le proxy transparent pour toute connexion TCP sortante :Tor et redsocks. Contrairement aux proxys HTTP, ces proxys SOCKS peuvent proxy de manière transparente tout connexion TCP sortante, y compris les protocoles chiffrés et les protocoles sans métadonnées ni en-têtes.

Ces deux proxys nécessitent l'utilisation de NAT pour rediriger tout trafic TCP sortant vers le port local du proxy. Par exemple, si j'utilise Tor avec TransPort 9040 sur ma machine locale, j'aurais besoin d'ajouter une règle iptables comme celle-ci :

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040

À ma connaissance, cela remplacerait l'adresse IP et le port de destination d'origine par 127.0.0.1 et 9040 , donc étant donné qu'il s'agit d'un flux crypté (comme SSH) ou sans en-tête (comme whois), comment le proxy connaît-il l'adresse IP et le port de destination d'origine ?

Réponse acceptée :

Voici comment il procède :

static int getdestaddr_iptables(int fd, const struct sockaddr_in *client, const struct sockaddr_in *bindaddr, struct sockaddr_in *destaddr)
{
        socklen_t socklen = sizeof(*destaddr);
        int error;

        error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen);
        if (error) {
                log_errno(LOG_WARNING, "getsockopt");
                return -1;
        }
        return 0;
}

iptables remplace l'adresse de destination d'origine mais mémorise l'ancienne. Le code de l'application peut alors le récupérer en demandant une option de socket spéciale, SO_ORIGINAL_DST .


Linux
  1. Comment utiliser la méthode CONNECT sur un proxy HTTP utilisant Telnet ?

  2. Comment utiliser `which` sur une commande alias ?

  3. Quel chemin `sudo ` utilise-t-il pour rechercher " ?

  4. Comment Gcc sait-il où Boost est installé ?

  5. Comment configurer curl pour utiliser en permanence un proxy ?

Commande de fichier Linux :que fait-elle et comment l'utiliser

Comment utiliser le proxy sur la ligne de commande Linux ?

Comment utiliser la commande which sous Linux

Comment tunnel HTTP sur SSH via SOCKS ?

Comment puis-je utiliser SSH avec un proxy SOCKS 5 ?

Quelle quantité de données SSH utilise-t-il généralement ?