Piero V.

Dropbear 77 + ECDSA su OpenWRT 18.06.1

Da un po’ di tempo, su uno dei miei computer, avevo creato una chiave SSH con ECDSA, per poi scoprire di non poterla usare per connettermi al mio router che ha OpenWRT. Infatti, per impostazione predefinita di OpenWRT, Dropbear viene compilato senza supporto a questo algoritmo, per risparmiare una cosa come 23KiB.

Normalmente la cosa può avere senso, perché lo spazio sulle flash è sempre estremamente limitato. Tuttavia, io ho già una chiave ECDSA basata su curve NIST e ho una extroot, quindi ho deciso di provare a ricompilare il Dropbear di OpenWRT e posto qui le istruzioni per chi fosse interessato all’argomento, incluso un futuro me.

Come ulteriore nota, vorrei evidenziare che il supporto a ed25519 non è attualmente esistente in Dropbear! C’è la possibilità di usare curve25519-donna per lo scambio di chiavi, ed è anche abilitata di default, ma non c’è nient’altro che riguardi ed25519.

Ho provato personalmente queste impostazioni su OpenWRT 18.06.1 (non ho ancora fatto l’aggiornamento alla minor successiva), sul mio TD-W8970.

Tuttavia, ho deciso di installare l’ultima versione di Dropbear, il che ha reso il tutto un po’ più difficile. … [Leggi il resto]

Adwaita+Tango for PuTTY

Recently I have started using PuTTY more and more. It is a very nice program that has lots of features but it has also a big problem: with the default settings, fonts and colors are a bit ugly and in some case the text is even difficult to read.

Luckily PuTTY has lots of customization possibilities. My first idea was to use Solarized (Light), because I use it also on my phone with JuiceSSH and on Gedit. However, almost immediately I realized this problem:

ls using the Solarized Light theme: the image shows that it is difficult to tells directories from files

As you can see, directories, files and links have almost the same color and are very difficult to distinguish. Notice that I have enabled the bold as font, which by default is disabled, otherwise directories and links would have normal weight, and it would be even more difficult to what is what. … [Leggi il resto]

OpenSSH: disattivare la password per le sessioni remote

Da quasi un anno ho una Raspberry Pi e ho più volte questo trucchetto, solo che mi sono reso conto di non averlo ancora mai condiviso.

Per ragioni di sicurezza, ho deciso di disabilitare l’autenticazione tramite password per quando mi connetto tramite Internet, ma di lasciarla per quando mi connetto dalla stessa rete locale della Raspberry.

Ci sono diversi metodi per implementare questa cosa, tutti basati sull’istruzione Match che, citando le manpages, introduce un blocco condizionale.

Le condizioni che può verificare riguardano utenti, gruppi, host, indirizzi e la porta locale.

In particolare io ho scelto di fare una distinzione in base a quest’ultima: una strategia spesso suggerita per aumentare la sicurezza di SSH è quella di cambiare porta e, per esempio, metterlo in ascolto sulla porta 22022. Io ho quindi deciso di ascoltare sulla porta 22 per la LAN e sulla porta 22022 per le sessioni remote e di disabilitare l’autenticazione tramite password per queste ultime.

Il procedimento è molto facile. Serve solo modificare il file /etc/ssh/sshd_config. Per prima cosa bisogna esplicitare entrambe le porte su cui ascoltare:

Port 22
Port 22022

Dopodiché bisogna aggiungere la parte di matching solo per la porta secondaria:

Match LocalPort 22022
	PasswordAuthentication no

In alternativa si potrebbe disabilitare l’autenticazione tramite password sempre e riabilitarla solo se l’indirizzo del peer appartiene alla classe della rete LAN.

La live della salvezza

Sabato sono andato ad aiutare con un po’ di manutenzione di un laboratorio di una scuola dotato di computer vecchiotti riportati in vita con Linux Mint.

In base alle mie esperienze avute finora con le diverse distribuzioni Linux, fare l’aggiornamento da Linux Mint Rosa a Linux Mint Sarah mi è sembrata una buona idea.

In effetti su due-tre macchine è andato tutto liscio, ma in una si è verificato un problema: l’aggiornamento si è interrotto, non so ancora il motivo preciso, e il successivo riavvio non si è mai completato, a causa di un Kernel Panic.

A peggiorare la situazione poi c’era un altro mix di fattori:

  • non mi ero portato la mia attrezzatura solita (computer, chiavette varie etc…), quindi non avevo alcun modo di avviare un ambiente di rispristino
  • era sabato alle 10:30 di mattina, un’ora dopo avevo un impegno e lunedì sarei stato a decine di km di distanza
  • in quel computer c’erano dei dati che sarebbero serviti ad inizio della settimana.

La soluzione allora è stata di sfruttare il server SSH della mia Raspberry Pi, accessibile da Internet, e una live dotata di server e client SSH configurati in modo da fare reverse SSH - la live della salvezza per l’appunto. Avendo una shell nel PC guasto, il recupero dei file diventa triviale e far ripartire la postazione non è più un miraggio. … [Leggi il resto]

Python SSH Tunnel Server

SSH tunnels are great!

They allow to bypass firewalls and NAT problems, and you can use as unprivileged user, since you don’t have to install virtual network devices such as TUN or TAP.

Another good reason to chose SSH is that it is a standard protocol, so there are many implementations: OpenSSH on most Unices, PuTTY on Windows and cross platform libraries (Java, Python…).

However there is a great disadvantage: the SSH server. If you have a server you probably already use SSH, therefore you don’t want to share your custom port and grant access to your server, or create accounts to allow it.

A solution could be creating a chroot or something like that, but I wasn’t really confident in it, therefore I looked for an alternative SSH server, and I’ve come up with this library: TunnelServer.

Python already has a brilliant SSH library: Paramiko. It’s very transparent: it manages the packages for you, but you are the one who should manage the rest (login check, shell comunication, PTY allocation…, socket-ssh channel synchronization). That’s great, but sometimes unhandy, so I’ve written this class, which is a middleware: the class user still has to check login, but you don’t have to create threads to listen on forwards etc… … [Leggi il resto]