SSH Internet
SSH Attraverso Internet
In questa guida illustreremo come raggiungere un Raspberry Pi (ma anche un pc) via SSH collegato ad un router adsl con ip dinamico.
Ci sono diversi ostacoli che dovremo superare tra cui conoscere l'IP con cui siamo collegati ad internet e aprire una porta per l'accesso dall'esterno nel nostro router.
Attenzione lasciare aperte su internet porte di rete sul nostro modem di casa può compromettere la sicurezza di tutta la nostra rete con risvolti indesiderati, se non si hanno le idee chiare meglio informarsi bene prima di procedere.
Ci sono alcuni punti importanti da tenere presente:
- lasciare password di default su macchine a cui si può accedere da internet è assolutamente da evitare
- tutto ciò che non è necessario va eliminato, ad esempio se abbiamo bisogno di collegarci una sola volta per una necessità una tantum, appena terminata la necessità sconfiguriamo l'inoltro della porta verso il Raspberry
- è consigliabile aumentare il livello di sicurezza disabilitando accesso con password e utilizzando qualche utility automatica per prevenire attacchi bruteforce
- utilizzare un sistema di notifica di tentativi di accesso (riusciti o meno) ci permette di renderci conto meglio della situazione
Prima di tutto
Cambiare le password di default
Cambiate la password dell'utente pi, perchè chiunque ha un raspberry o vuole entrare sulla vostra rete conosce questa password, questo è consigliabile a prescindere dallo scopo di questa pagina.
Controllate se avete configurato altri utenti sul vostro Raspberry a cui avete assegnato password troppo banali, magari solo per una prova e di cui vi siete scordati (vedi punto precedente).
Disabilitare accesso con password (consigliato)
Disabilitare l'accesso con password aumenta il livello di sicurezza e richiede solo due comandi sul pc che usiamo per collegarci al raspberry.
Dobbiamo generare una chiave rsa pubblica:
ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/utente/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/utente/.ssh/id_rsa. Your public key has been saved in /home/utente/.ssh/id_rsa.pub. The key fingerprint is: segue la fingerprint ed una random art
è possibile ed anche consigliato inserire una passphrase che serve a decodificare la chiave e che ci verrà chiesta prima di ogni connessione.
Ora copiamo la chiave pubblica del pc (contenuta nel file id_rsa.pub) dentro al file .ssh/authorized_keys del raspberry si può fare manualmente o con un comodo comando
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@indirizzo_del_RPI
verifichiamo con
ssh pi@indirizzo_del_RPI
se abbiamo settato una passphrase inseriamola. Ora possiamo accedere con chiave pubblica senza digitare la password in quanto usiamo un metodo più sicuro.
Se il passaggio precedente non funziona non procedete oltre e ricontrollate altrimenti rischiate di rimanere chiusi fuori.
Disabilitiamo l'accesso tramite chiave ssh sul server ssh di raspberry
nano /etc/ssh/sshd_config
modifichiamo i parametri di seguito come indicato
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
restartiamo il demone ssh
sudo /etc/init.d/ssh restart
oppure
sudo systemctl restart sshd.service
ora proviamo ad accedere con un altro utente e vedremo che non ci verrà nemmeno richiesta la password perchè non è più tra i metodi di autenticazione accettati.
Bloccare attacchi bruteforce
Qualcuno può cercare di collegarsi al nostro Raspberry Pi provando ad indovinare la password con numerosi tentativi di accesso, per limitare questo problema sono stati creati dei tool che bloccano tentativi ripetuti dallo stesso ip.
Uno di questi software si chiama fail2ban e può essere di aiuto per questo tipo di problemi.
Abilitare una notifica ad ogni accesso
Ultima misura di precauzione abilitare una notifica per ogni tentativo di accesso al nostro Raspberry un pò come succede quando facciamo home banking con l'invio di una mail o altro sistema di notifica.
Anche questa funzione può essere delegata al software fail2ban.
Account FreeDNS
Vari siti internet, a pagamento o gratuiti, ci permettono di memorizzare il nostro indirizzo IP. In questa guida useremo FreeDNS che fornisce questo servizio gratuitamente. Aprendo https://freedns.afraid.org/ creiamo un account e successivamente un "subdomain" per memorizzare il nostro IP.
Ora nella sezione "dynamicDNS" clicchiamo su "quick cron".
Si aprirà lo script da inserire nel crontab. Questo script è già funzionante cosi com'è, nel nostro caso prenderemo solo l'indirizzo che inizia con https://freedns.afraid.org..... per fare la seguente configurazione.
Configurazione Raspberry Pi
Nel RPI lanciare il comando "crontab" da root
sudo crontab -e
Automaticamente si aprirà l'editor di testo "nano" con lo script di configurazione. Aggiungendo la seguente stringa andremo ad aggiornare l'IP della connessione con una cadenza di 5 minuti, mettendo "*/5"
*/5**** ; wget -O - https://freedns.afraid.org/dynamic/update.php?UFIHAJNINZZNIOZOIPZPKZ
Ctrl+x per salvare la configurazione.
configurazione del modem
Entrare nella configurazione del modem, accedere a "firewall" poi selezionare il port "forwarding", questa funzionalità è disponibile in tutti i modem con varie denominazioni.
In questa pagina creiamo l'accesso:
Servizi Personalizzati "ssh" Indirizzo IP locale "l'indirizzo del RPI" Inizio e fine Porta esterna "1022" Protocollo "TCP" Inizio e fine porta interna "22"
Ora il modem è configurato, va abilitata la porta per l'accesso dall'esterno. Per connetterci via SSH ora basterà specificare la porta esterna ed il sub dominio di "afraid"
ssh -p 1022 pi@subdomanis_di_Afraid