Come fa un proxy SOCKS trasparente a sapere quale IP di destinazione utilizzare?


18

Esistono due proxy SOCKS che conosco che supportano il proxy trasparente per qualsiasi connessione TCP in uscita: Tor e redsocks . A differenza dei proxy HTTP, questi proxy SOCKS possono delegare in modo trasparente qualsiasi connessione TCP in uscita, inclusi protocolli e protocolli crittografati senza metadati o intestazioni.

Entrambi questi proxy richiedono l'uso di NAT per reindirizzare qualsiasi traffico TCP in uscita verso la porta locale del proxy. Ad esempio, se sto eseguendo Tor con TransPort 9040sul mio computer locale, dovrei aggiungere una regola iptables come questa:

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

Per quanto ne so , questo sostituirà l'IP e la porta di destinazione originali con 127.0.0.1e 9040, quindi dato che si tratta di un flusso crittografato (come SSH) o uno senza intestazioni (come whois ), come fa il proxy a conoscere l'IP e la porta di destinazione originali?

Risposte:


28

Ecco come lo fa:

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 sovrascrive l'indirizzo di destinazione originale ma ricorda quello vecchio. Il codice di applicazione può quindi prenderlo con la richiesta di una speciale opzione presa, SO_ORIGINAL_DST.


1
Risposta fantastica! Quindi questo significa che devi eseguire il software proxy sullo stesso computer che gestisce il NAT, giusto?
hololeap,

4
Assolutamente, @hololeap. Se il server proxy deve essere eseguito su un sistema diverso come redirector di pacchetti, sono necessari protocolli come WCCP di Cisco .
Celada,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.