Prevenire i resolver ip in un programma tipo skype

0

Attualmente sto creando un programma simile a Skype, che usa un sistema ibrido peer to peer per comunicare tra gli utenti (ad es. il server contiene tutti gli IP degli utenti, un client che vuole connettersi a un amico dirà al server, che invierà a ciascun client l'IP dell'altro in modo che possano iniziare la perforatura per stabilire una connessione tra di loro).

So che con Skype ci sono molti siti web che ti permettono di inserire un nome utente e ottenere facilmente il suo indirizzo IP. La mia domanda è, qual è il modo migliore per prevenire un simile exploit?

Ecco alcune soluzioni che potrei pensare:

  • salva tutti gli elenchi di amici di tutti gli utenti sul server (in modo che il server possa eliminare le richieste IP dagli utenti che non si trovano nell'elenco degli amici del cliente richiesto)
  • ogni volta che al server viene richiesto l'IP di un client, chiedere al client se il richiedente è presente nell'elenco dei propri amici (in caso contrario, non rispondere)
  • chiedi a ciascun client di utilizzare una chiave segreta per comunicare con il server (in modo che solo i client registrati possano inviare richieste IP)

Sentiti libero di aggiungere una soluzione diversa, ancora una volta, queste sono solo soluzioni a cui potrei pensare in cima alla testa mentre scrivevo questa domanda.

Inoltre, una domanda correlata che volevo chiedere - quale sarebbe la migliore pratica in un programma del genere:

Chiedi ad ogni cliente di memorizzare gli IP dei suoi amici e di fare in modo che il server lo avvisi ogni volta che viene cambiato

-VS-

Chiedi al cliente di chiedere al server l'IP di un amico ogni volta che vuole iniziare una connessione diretta con lui (tieni presente che il client deve comunque dire al server ogni volta che sta tentando di connettersi a qualcuno, in modo che il buco sia perforato lavorare).

P.S. Non ho mai creato un programma del genere e non sto seguendo alcun tutorial o altro. Se c'è un modo migliore di fare qualcosa che ho scritto, o se ho sbagliato qualcosa, sarei molto felice se potessi dirlo.

    
posta Noam Gal 20.07.2014 - 20:28
fonte

2 risposte

5

Non sono sicuro di quanto lontano hai con il tuo design. La tua descrizione di "perforare" non suona esattamente vera.

A quanto ho capito, il server non ha bisogno di IP client tranne quando sono on-line e disponibili per la connessione. Ogni client si connette al server, fornendo così una posizione IP corrente e un canale NAT. Un utente che desidera chiamare un altro utente equivale a una ricerca di utenti connessi. Il tuo server ha sempre bisogno di impostare la connessione (perché entrambi i client utilizzano i canali NAT in uscita), ma se i firewall cooperano il server può stare da parte e lasciarli parlare direttamente l'uno con l'altro. La magia accade e durante questa magia ogni cliente impara l'IP dell'altro.

La tua preoccupazione è che un client non autorizzato possa saccheggiare le informazioni di connessione dal tuo server provando rapidamente molte connessioni. Se questo è un client canaglia non puoi necessariamente controllarlo. Quindi ecco alcuni suggerimenti.

  1. Cifra e proteggi le comunicazioni, così solo il tuo cliente può parlare al tuo server. I certificati vanno bene per questo.
  2. Limita la frequenza delle connessioni di prova.
  3. Monitora la velocità e il numero di connessioni e i client della lista nera che superano i limiti.
  4. Consenti solo agli "amici" di chiamare "amici" e non scambiare informazioni IP finché la connessione non viene accettata dal destinatario.

Se questo è ampio, ti consigliamo di aggiornare la tua domanda e ci riproverò.

    
risposta data 21.07.2014 - 07:18
fonte
0

Le connessioni peer-to-peer non funzionano bene con i firewall. Le connessioni tramite server o proxy esterni, funzionano molto meglio con i firewall. Finché stai fornendo indirizzi IP per la connessione, credo che rischierai di perdere gli indirizzi IP dei client.

Consentire ai client di passare a una connessione peer-to-peer dopo aver stabilito una connessione può aiutare a ridurre l'esposizione. Vedo esposizioni su tutte e tre le opzioni elencate. Qualsiasi opzione che consente l'uso di un proxy, avrà un'esposizione. In alcuni casi, non consentire ai proxy probabilmente impedirà l'utilizzo.

La crittografia end-to-end utilizzando singole coppie di chiavi pubbliche-private, contribuirebbe a ridurre l'esposizione. Tuttavia, porta a problemi su come distribuire coppie di chiavi pubbliche.

EDIT: potresti volere agli standard esistenti. Ci sono persone che hanno passato molto più tempo di me a guardare queste cose. Studili per vedere cosa funziona e cosa non funziona. Ad esempio, RTSP ha riscontrato problemi con i firewall.

risposta data 21.07.2014 - 04:22
fonte

Leggi altre domande sui tag