SSH per i computer di casa


21

Ho più macchine a casa a cui vorrei accedere da scuola usando SSH e VNC. Per fare ciò ho dato loro IP statici:

  • 192.168.1.50: Windows
  • 192.168.1.51: Ubuntu
  • 192.168.1.52: Raspberry Pi / Raspbian

So che SSH utilizza la porta 22, quindi posso inoltrare questa porta a 192.168.1.51:22 sul mio router, ma in questo modo non sarò in grado di SSH sul mio Raspberry Pi. Esiste un modo per configurarlo per poter accedere a entrambe le macchine?


10
È possibile utilizzare diverse porte SSH. Non so quanto sia difficile su Windows, ma su Linux è davvero facile cambiarlo in una porta non standard . In questo modo è possibile inoltrare la porta 22 per vincere la macchina (nessuna modifica lì) e l'altra porta (non standard) a RaspberryPi.
bistoco,

2
@Melebius, è vecchio ma è comunque una buona lettura, la parte fondamentale per me è "L'argomento di base che ho cercato di fare: non fare sicurezza attraverso l'oscurità", si tratta di un bisogno e risolverlo facilmente . Detto questo, forse non deve cambiare le porte Ubuntu o Pi, semplicemente inoltrare diverse porte router a ciascuna porta 22 della macchina.
bistoco,

1
@bistoco Accetto. Tuttavia, l'OP sta per esporre l'accesso SSH al mondo esterno e in questo caso la sicurezza deve essere sempre considerata. L'impostazione di porte diverse sui computer non risolve il problema del PO poiché deve abilitare porte diverse (= port forwarding) sul proprio router.
Melebio

6
@Melebius Off topic, ma non uso mai 22, solo perché i robot automatici non bussano al mio server 24/7. Non terrà fuori un vero aggressore (o uno script ben scritto), ma riduce il numero delle mie voci di registro.
Kaz Wolfe,

4
Potresti semplicemente connetterti a uno di essi (quello accessibile al pubblico) e quindi connettersi da questo usando l'indirizzo locale agli altri.
tkausl,

Risposte:


32

Se hai IPv6, non hai nemmeno bisogno del port forwarding! Ottieni semplicemente il tuo indirizzo IPv6 permanente (in base al tuo indirizzo MAC, quindi è garantito che rimanga lo stesso a meno che il tuo ISP non sappia come funziona IPv6) e utilizzalo per tunnel. Poiché il tuo indirizzo IPv6 è rivolto al pubblico e consente al mondo per accedervi senza dover passare attraverso il NAT locale, non è necessario preoccuparsi di abilitare il port forwarding da nessuna parte. "Funzionerà e basta".

Si noti, tuttavia, che IPv6 non è ancora realmente supportato a livello globale e che sia la connessione Internet domestica sia la connessione Internet remota devono disporre di IPv6 pienamente funzionante per fare ciò.

Tuttavia, se sei come la maggior parte delle persone e hai solo IPv4, c'è ancora un modo! Alcuni router consentono di inoltrare porte di origine specifiche a porte di destinazione specifiche, in questo modo:

inserisci qui la descrizione dell'immagine

In questo esempio, la porta 22viene passato direttamente alla mia macchina sheepdog, mentre la porta 292viene inoltrata alla porta 22su coyote.

Infine, se il tuo router non ha questa funzione, puoi semplicemente cambiare la porta, poiché SSH non si limita al solo funzionamento sulla porta 22. Puoi impostarlo su tutto ciò che vuoi (che non viene utilizzato).

In /etc/ssh/sshd_config(è necessario root per modificare, quindi sudo nano /etc/ssh/sshd_config), c'è una riga nella parte superiore del file:

# What ports, IPs and protocols we listen for
Port 22

Cambia questo in quello che vuoi:

# What ports, IPs and protocols we listen for
Port 2992

Riavviare il server SSH con sudo service ssh restarte inoltrare la porta sul router.


Tuttavia, per questo caso d'uso, vorrei considerare se i tunnel SSH sono la cosa giusta da fare. Forse dovresti configurare un server VPN dedicato sulla tua rete domestica? Ciò ti consentirà di accedere a tutta la tua rete domestica da qualsiasi luogo, a condizione che tu disponga delle credenziali di sicurezza adeguate richieste dalla VPN. Inoltre, c'è un leggero sovraccarico con una VPN; in genere devi solo inoltrare una porta per una macchina.


2
È possibile utilizzare un broker tunnel IPv6 per ottenere indirizzi IPv6 se il proprio ISP non supporta IPv6.
André Borie,

1
Con "questa funzione", intendi inoltrare una porta a un'altra porta?
Liu Siyuan,

@LiuSiyuan Yep. So che è strano, ma ho visto alcuni router che non sono in grado di gestirlo. Il mio vecchio router fornito dall'ISP non poteva nemmeno provarci.
Kaz Wolfe,

Non ho capito bene quella parte di IPv6. Supponiamo che tutti gli ISP che forniscono indirizzi IPv6 ne offrano uno (coerente) diverso per ciascun dispositivo sulla rete?
jjmontes,

1
@jjmontes Se il tuo ISP è competente, otterrai un pieno / 64 (o forse meno, ma ancora abbastanza per assegnarne uno a ogni macchina)
Kaz Wolfe,

19

Un modo semplice per risolvere questo problema è mappare porte diverse dal router alla porta 22 delle macchine. Ad esempio, puoi avere le seguenti impostazioni nel tuo router (supponendo che il tuo router abbia IP 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

Quindi, quando si utilizza ssh, specificare la porta che si desidera utilizzare digitando

$ ssh <username>@<router ip> -p <your port>

Ora dovresti essere in grado di collegarti a tutte le tue macchine.


11

Se sai che uno dei tuoi computer è sempre attivo, hai anche la possibilità di usarlo come proxy ssh.

supponiamo che tu abbia una configurazione del nome di dominio per il tuo indirizzo IP esterno (ad esempio myhome.dyndns.com o altro), che cosa farai è connetterti su un computer (diciamo che raspberry è sempre attivo e inoltri la porta dal tuo router a ), le connessioni ssh saranno:

scuola -> (router, trasparente qui) -> lampone -> ubuntu o windows

ora, nella tua ~ / .ssh / config a scuola, aggiungi le righe:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com

Per connettersi quindi:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

Da ora, se si digita ssh ubuntu, il computer si connetterà prima al raspberry, quindi avvierà una sessione ssh sul computer ubuntu.

Ti consiglio, qualunque sia la porta che scegli di inoltrare, di disabilitare la password in /etc/sshd.conf per consentire solo l'accesso tramite chiave ssh. In questo modo, se si imposta la chiave sul lampone e su Ubuntu, con il parametro 'ForwardAgent', sarà necessario sbloccare solo la chiave e quindi non è richiesta alcuna password per connettersi. In questo modo, anche se i bot stanno tentando di accedere a ssh, non potranno mai effettuare l'accesso poiché non si accede alla password.

Bonus, questo funziona anche con scp, scp foo ubuntu: / tmp / foo utilizzerà la stessa configurazione senza ulteriori parametri. Bonus 2, questa configurazione non richiede alcun cambiamento a casa, se domani tu e un altro computer, copiate / incollate il codice nella vostra configurazione ssh, cambiate host e ip, tutto qui, non c'è bisogno di aprire una nuova porta sul router


C'è qualche svantaggio nell'usare una macchina come intermedio per SSH? Supponiamo che io usi il mio Raspberry Pi per connettermi ad altri computer all'interno della rete, le sue prestazioni influenzeranno l'attività?
acourchesne,

1
Sì, il lampone potrebbe limitare il throughput poiché deve fungere da server e client. Se sei abbastanza sicuro, puoi ottenere lo stesso risultato con i tunnel ssh. In questo modo, il lampone funge solo da server ma il tuo pc scolastico deve fare due client.
Potens,

4

Faccio questo - lascio l'Rpi attivo e collegato direttamente al router per tutto il tempo (poiché è il più economico da eseguire) e lo accendo, quindi rimbalzo da esso agli altri - non ha mai bisogno di molta attenzione.

È anche possibile VNC / RDP una GUI su una pipe ssh, in qualche modo divertente o inoltrare una porta che ti consente di navigare verso un server sul tuo computer desktop mantenendolo privato.

Il motivo per cui ho aggiunto questa risposta è che ti dia alcuni suggerimenti.

1) Usa una porta diversa da 22. Puoi lasciarla 22 sul PI, ma cambia la porta in entrata sul tuo router con qualcosa di oltre 10.000 ... Altrimenti otterrai dozzine a centinaia di attacchi al giorno - e una volta che è noto che sta eseguendo un host SSH nel momento in cui viene rilevato un exploit, sei di proprietà.

2) Usa certificati invece di nome utente / password - disabilita completamente l'accesso nome utente / password.

3) Se il tuo indirizzo IP può cambiare, usa un servizio di tipo dyndns per procurarti un hosthame DNS (io uso noip, è gratuito e supportano un client Linux per aggiornare il tuo indirizzo IP - penso che puoi semplicemente attivarlo il pi ora). Ci sono ancora alcune altre aziende che offrono questo gratuitamente.

4) Mantieni aggiornato il tuo pi (o qualunque cosa ti piaccia) (sudo apt-get update). Credo che ssh sia abbastanza ben controllato ormai, ma ho anche creduto a quello di https ...


3

Dubitavo che questo potesse adattarsi meglio come commento piuttosto che come risposta, ma lo posterò qui comunque.

Alcune cose a cui dovresti pensare prima di fare questo:

  1. Aprirai i tuoi sistemi su Internet, quindi assicurati che siano ben patchati e che la tua configurazione di sicurezza sia rafforzata (ad es. Non consentire il login di root e utilizzare pubkeys invece di password).
  2. Il tuo IP pubblico (vedi whatismyip.com) può cambiare, a seconda del tuo ISP potrebbe cambiare quotidianamente o quasi mai. Ciò significa che dovrai trovare un modo per capire il tuo IP pubblico. Puoi visitare whatismyip.com dalla tua rete domestica ogni giorno, creare alcune app o utilizzare il DNS dinamico (DynDNS) per mappare il tuo IP pubblico che cambia a un nome di dominio statico.
  3. Se vuoi usare IPv6 per bypassare tutta la seccatura relativa a IPv4 e NATing, avrai bisogno dei tuoi dispositivi, router, ISP, ... per parlare anche di IPv6. Ci sono alcuni servizi che possono aiutarti quando il tuo ISP non supporta IPv6, ma i tuoi dispositivi e router dovranno comunque parlarne.
  4. Più porte e dispositivi si aprono su Internet, più ampia diventa l'area di attacco. Suggerirei di utilizzare un jump-box nella tua rete e di consentire l'accesso SSH a quel dispositivo solo da Internet. Il jump-box sarebbe fondamentalmente un sistema molto rinforzato che si esegue il port forwarding sul proprio router su Internet. Una volta connesso a quel box, sarai in grado di SSH alla tua rete interna attraverso di esso. Il jump-box potrebbe essere fondamentalmente un altro Raspberry Pi. Suggerirei di utilizzare un dispositivo dedicato, per essere in grado di indurirlo il più possibile (tra l'altro eseguendo il minor numero di servizi possibile).
  5. (4a) Invece di avere un jump-box in cui SSH, potresti anche configurare un server VPN che ti consenta di navigare nella tua rete domestica dal tuo dispositivo a scuola (se sono consentite connessioni VPN in uscita).
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.