Sicurezza del tunneling delle porte del server Web: opzioni di sicurezza

0

Sto sviluppando un sistema che consente l'accesso ai dispositivi client dietro il firewall, utilizzando il tunneling delle porte tramite SSH. Ogni client ha un server dedicato basato su Linux, con la porta 80 che viene sottoposta a tunnel verso un server pubblico. In questo modo i client possono avere l'indirizzo IP dinamico e il firewall abilitato, non è necessario il port forwarding sul router.

Ogni client ha la propria porta, ad es.

  • Client A - > porta 8888
  • Client B - > porta 8889
  • Client C - > porta 8890

Possono connettersi da qualsiasi luogo al proprio server web semplicemente chiamando http://mypublicserver.com:[their_assigned_port_no]

Riescoavederealcuniproblemidisicurezza,comunque.

  1. L'attaccantepuòsemplicementescansionare link porte (65k di esse) e ottenere il numero di client attualmente connessi
  2. Avere questo, eseguire qualsiasi attacco sulla loro schermata di login, DOS il loro computer, provare ad accedere a PhpMyAdmin, brute-force ecc.

C'è anche una limitazione, dato che non posso assegnare più di ~ 60k client ... Non è un problema al momento perché non mi aspetto di colpire più di 10k di essi. Tuttavia, dover indovinare il numero di porta non è affatto difficile. È anche incline a mistificare, qualcuno potrebbe tentare di accedere con le proprie credenziali a qualcun altro perché ha digitato 8989 anziché 8898.

Come difesa, ho pensato a un valore di stringa aggiuntivo (hash o qualcosa) inviato con la richiesta della pagina di accesso. Se manca o non è corretto, restituisce 404. In questo modo non è possibile accedere alla pagina di accesso se non si conosce il valore della stringa, ma è quasi impossibile ottenere senza che questo sito venga aggiunto ai segnalibri, perché una stringa breve sarebbe più semplice da ricordare, ma anche più facile da decifrare.

Un altro modo (e questo è attualmente il mio preferito) è quello di accedere tramite l'interfaccia web del link . Accedi con il altro gruppo di credenziali che ti reindirizza al link con la chiave di autenticazione (memorizzata nel database di mypublicserver) inviata come dati POST . Dopo che la chiave di accesso è stata invalidata, generata nuova e inviata a mypublicserver dal server web del client.

Ma questo significa anche la necessità di ricordare 2 set di login-password, che probabilmente portano a confusione ( "Perché devo effettuare il login due volte ?!" )

Ho già:

  • ha cambiato il percorso predefinito di phpmyadmin
  • introdotto il blocco account con più di 10 tentativi di accesso falliti

Cosa ne pensi? Mi sono perso qualcosa di importante? Come posso proteggere quel sistema?

    
posta Mark 21.09.2016 - 13:30
fonte

3 risposte

2

Ho paura di aver già fallito al primo ostacolo dal momento che stai usando HTTP ovunque. Ciò significa che stai spingendo il traffico di accesso non crittografato su Internet, soggetto a intercettazione e uso improprio. devi avere HTTPS almeno dal client al server periferico.

Inoltre non hai preso in considerazione gli attacchi denial of service anche se non hai detto se lo ritieni importante. Se tutti i servizi si trovano su porte ipotizzabili, un utente malintenzionato può semplicemente avviare lo streaming del traffico verso tali.

L'uso di più porte rende inoltre difficile per i client connettersi dietro un firewall. Mi consiglia di utilizzare un proxy inverso ai margini della rete del server. Questo può essere il terminatore HTTPS, il bilanciamento del carico (se necessario) e può essere effettuato per reindirizzare gli URL ai servizi back-end appropriati.

Sul front-end, i clienti devono utilizzare una cartella per identificare la loro origine:

https://myserver.com/servicea
https://myserver.com/serviceb
etc.

Il proxy inverso può reindirizzare quelli alle porte back-end corrette.

Non hai bisogno di nulla di intelligente con id / password, anche se volessi stringere ulteriormente le cose, potresti usare il reverse proxy o un firewall sul server per limitare le connessioni per indirizzo IP sorgente.

    
risposta data 21.09.2016 - 14:00
fonte
0

Questo dovrebbe essere un commento - ma è un po 'lungo.

Sto lottando per decodificare la tua descrizione del problema. Penso che tu stia cercando di dire che hai un gran numero di server web dietro un firewall a cui vuoi consentire l'accesso limitato tramite un dispositivo gateway esposto su Internet.

Suppongo che i server Web di origine non abbiano indirizzi IP pubblici univoci, quindi sono client ssh sul dispositivo gateway.

Ci dispiace, ma penso che questo sia un cattivo progetto e se vuoi risolvere questi problemi devi fare un backup un po '. Anche se la scalabilità non è un problema, hai già incontrato dei limiti con il modo in cui instradi le informazioni al back-end e probabilmente è piuttosto fragile.

Configuro il dispositivo gateway come un proxy HTTP forward trasparente che richiede l'autenticazione per connettersi a una VPN. L'altra estremità della VPN sarebbe all'interno della rete protetta a un proxy secondario in grado di instradare il contenuto. In questo modello, è possibile fornire un singolo certificato SSL al gateway per tutti gli accessi (non hai mai menzionato SSL - questo è piuttosto essenziale per essere considerato "sicuro"). Hai la possibilità di implementare l'autenticazione del gateway utilizzando vari metodi (tramite un cookie o NTLM o nome utente e password) che potrebbero essere tranquillamente memorizzati nella cache dai client.

    
risposta data 21.09.2016 - 13:58
fonte
0

È possibile distribuire un server VPN connesso alla LAN dei server Web e configurare i server Web per consentire solo la connessione dalla VPN:

Client -> VPN -> Proxy -> Webserver

I tuoi client hanno solo un accesso e una password, e nessuno può connettersi ai server web al di fuori di VPN. E puoi implementare HTTPS

Non devi fare un'installazione complicata per questo.

    
risposta data 21.09.2016 - 17:20
fonte

Leggi altre domande sui tag