In questo breve tutorial, vedremo cos'è SSLH, come installare SSLH e come configurare SSLH per condividere una stessa porta per https e ssh in sistemi operativi simili a Linux e Unix.
Cos'è SSLH?
Alcuni provider di servizi Internet e società aziendali potrebbero aver bloccato la maggior parte delle porte e consentito solo a poche porte specifiche come la porta 80 e 443 per rafforzare la loro sicurezza.
In questi casi, non abbiamo scelta, ma utilizzare la stessa porta per più programmi, ad esempio la porta HTTPS 443 , che è raramente bloccato. Ecco dove SSLH , un multiplexer SSL/SSH, viene in aiuto.
SSLH ascolterà le connessioni in entrata su una porta 443. Per dirla in modo più semplice, SSLH ci consente di eseguire diversi programmi o servizi sulla porta 443 su un sistema Linux. Quindi, puoi utilizzare sia SSL che SSH utilizzando la stessa porta contemporaneamente.
Se ti sei mai trovato in una situazione in cui la maggior parte delle porte è bloccata dai firewall, puoi utilizzare SSLH per accedere al tuo server remoto.
Installa SSLH in Linux
SSLH è incluso in un pacchetto per la maggior parte delle distribuzioni Linux, quindi puoi installarlo utilizzando i gestori di pacchetti predefiniti.
Su Debian , Ubuntu , Linux Mint e sistema operativo pop , esegui:
$ sudo apt install sslh
Durante l'installazione di SSLH, ti verrà chiesto se desideri eseguire sslh come servizio da inetd o come server autonomo.
Ogni scelta ha i suoi vantaggi. Con poche connessioni al giorno, probabilmente è meglio eseguire sslh da inetd per risparmiare risorse.
D'altra parte, con molte connessioni, sslh dovrebbe essere eseguito come server autonomo per evitare di generare un nuovo processo per ogni connessione in entrata.
Su Arch Linux e derivati come Antergos, Manjaro Linux, installalo usando Pacman come mostrato di seguito.
$ sudo pacman -S sslh
Su RHEL , CentOS , AlmaLinux e Rocky Linux , devi aggiungere EPEL repository e quindi installare SSLH come mostrato di seguito.
$ sudo dnf install epel-release
$ sudo dnf install sslh
Su Fedora :
$ sudo dnf install sslh
Se non è disponibile nei repository predefiniti, puoi compilare e installare manualmente SSLH come descritto qui .
Configura i server web Apache o Nginx
Come già sai, i server web Apache e Nginx ascolteranno su tutte le interfacce di rete (ad esempio 0.0.0.0:443
) per impostazione predefinita. Dobbiamo modificare questa impostazione per dire al server web di ascoltare solo sull'interfaccia localhost (ad esempio 127.0.0.1:443
o localhost:443
).
Per farlo, modifica il file di configurazione del server web (nginx o apache) e trova la seguente riga:
listen 443 ssl;
E cambialo in:
listen 127.0.0.1:443 ssl;
Se stai usando Virutalhosts in Apache, assicurati di aver cambiato anche quello.
VirtualHost 127.0.0.1:443
Salva e chiudi i file di configurazione. Non riavviare i servizi. Non abbiamo ancora finito.
Configura SSLH
Dopo aver impostato i server Web in ascolto solo sull'interfaccia locale, modificare il file di configurazione SSLH:
$ sudo vi /etc/default/sslh
Trova la riga seguente:
Run=no
E cambialo in:
Run=yes
Quindi, scorri un po' verso il basso e modifica la riga seguente per consentire a SSLH di essere in ascolto sulla porta 443 su tutte le interfacce disponibili (es. 0.0.0.0:443
).
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
Dove,
--user sslh
:richiede l'esecuzione con questo nome utente specificato.--listen 0.0.0.0:443
:SSLH è in ascolto sulla porta443
su tutte le interfacce disponibili.--sshs 127.0.0.1:22
:instrada il traffico SSH alla porta22
sull'host locale.--ssl 127.0.0.1:443
:instrada il traffico HTTPS/SSL alla porta443
sull'host locale.
Salva e chiudi il file.
Infine, abilita e avvia sslh
servizio per aggiornare le modifiche.
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
Test
Controlla se il demone SSLH sta ascoltando 443
.
$ ps -ef | grep sslh sslh 2746 1 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sslh 2747 2746 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sk 2754 1432 0 15:51 pts/0 00:00:00 grep --color=auto sslh
Ora puoi accedere al tuo server remoto tramite SSH utilizzando la porta 443
:
$ ssh -p 443 [email protected]
Risultato di esempio:
Password di[email protected]'s password: Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Wed Aug 14 13:11:04 IST 2019 System load: 0.23 Processes: 101 Usage of /: 53.5% of 19.56GB Users logged in: 0 Memory usage: 9% IP address for enp0s3: 192.168.225.50 Swap usage: 0% IP address for enp0s8: 192.168.225.51 * Keen to learn Istio? It's included in the single-package MicroK8s. https://snapcraft.io/microk8s 61 packages can be updated. 22 updates are security updates. Last login: Wed Aug 14 13:10:33 2019 from 127.0.0.1
Vedere? Ora posso accedere al server remoto tramite SSH anche se la porta SSH predefinita 22
è bloccato. Come vedi nell'esempio sopra, ho usato la porta https 443
per la connessione SSH. Inoltre, possiamo usare la stessa porta 443
anche per connessioni openVPN.
Ho testato SSLH sul mio server Ubuntu 18.04 LTS e ha funzionato perfettamente come descritto sopra. Ho testato SSLH in una rete locale protetta, quindi non sono a conoscenza dei problemi di sicurezza. Se lo stai utilizzando in produzione, facci sapere i vantaggi e gli svantaggi dell'utilizzo di SSLH nella sezione commenti qui sotto.
Per maggiori dettagli, controlla la pagina ufficiale di GitHub riportata di seguito.