Cosa fa#
Dimostra il pattern jump server: Mac→Ubuntu→Kali in catena SSH. Ubuntu è il bastion host esposto, Kali è il server interno raggiungibile solo tramite salto. Usa ProxyJump per fare tutto in un comando.
TL;DR#
Senza jump server: Mac ─SSH─▶ Kali (Kali esposta direttamente)
Con jump server: Mac ─SSH─▶ Ubuntu ─SSH─▶ Kali
↑
Bastion host — unico punto esposto, hardened| Vantaggio | Perché |
|---|---|
| Superficie ridotta | Solo il jump server è esposto su internet — gli altri server non hanno SSH raggiungibile dall'esterno |
| Audit centralizzato | Tutti gli accessi loggati sul jump server |
| Segmentazione | I server interni sono raggiungibili solo dalla rete interna |
Il vantaggio del jump server non è nel numero di chiavi — le chiavi pubbliche stanno su ogni server come sempre. Il vantaggio è che solo 1 porta SSH è esposta su internet invece di N. Con UFW su Kali (ufw allow from 192.168.64.3 to any port 22) è fisicamente impossibile raggiungerla dall'esterno senza passare per Ubuntu.
Fase 1 — Verifica prerequisiti#
Task 1.1 — SSH attivo su Ubuntu
# Dal Mac ssh utente@192.168.64.3- Come sai che hai finito: sei dentro Ubuntu
Task 1.2 — SSH attivo su Kali
# Da Kali (verifica che sshd sia in ascolto) sudo systemctl status ssh sudo systemctl start ssh # se non attivo- Come sai che hai finito:
ss -tlnp | grep 22mostra sshd in ascolto
- Come sai che hai finito:
Task 1.3 — Verifica IP Kali
ip a | grep 192.168 # Deve essere 192.168.64.200
Fase 2 — Catena manuale: Mac → Ubuntu → Kali#
Task 2.1 — SSH dal Mac a Ubuntu
ssh utente@192.168.64.3Task 2.2 — Da Ubuntu, SSH a Kali
# Ora sei dentro Ubuntu — salta a Kali ssh kali@192.168.64.200- Come sai che hai finito: sei dentro Kali
Task 2.3 — Verifica da dove vieni
# Da Kali — chi si è connesso? who last | head -5- Come sai che hai finito: Kali vede la connessione proveniente da 192.168.64.3 (Ubuntu) — non dal Mac (192.168.64.1)
- Questa è l'essenza del jump server: il server finale non vede mai il client originale
Fase 3 — ProxyJump: un comando solo dal Mac#
ProxyJump fa la catena automaticamente senza dover fare SSH manuale in due step.
Task 3.1 — ProxyJump inline
# Dal Mac — un comando solo, passa per Ubuntu e arriva a Kali ssh -J utente@192.168.64.3 kali@192.168.64.200- Come sai che hai finito: sei dentro Kali con un comando solo dal Mac
Task 3.2 — Configura ~/.ssh/config per ProxyJump permanente
# Sul Mac — edita o crea ~/.ssh/config nano ~/.ssh/configAggiungi:
Host jump HostName 192.168.64.3 User utente Host kali-interno HostName 192.168.64.200 User kali ProxyJump jump# Ora basta: ssh kali-interno- Come sai che hai finito:
ssh kali-internoti porta direttamente su Kali passando per Ubuntu
- Come sai che hai finito:
Fase 4 — Hardening del jump server (concetti)#
Task 4.1 — Limita gli IP che possono connettersi al jump server
# Su Ubuntu — permetti SSH solo dal Mac sudo ufw allow from 192.168.64.1 to any port 22 sudo ufw deny 22 sudo ufw enable- Come sai che hai finito: SSH funziona dal Mac, non da altri IP
Task 4.2 — Verifica i log di accesso
# Su Ubuntu — chi si è connesso? sudo tail -20 /var/log/auth.log | grep sshd # Su Kali — journald, non auth.log journalctl -u ssh | tail -20Output reale del lab (24/05/2026):
May 24 15:52:14 kali sshd-session[1515]: Failed password for invalid user kali from 192.168.64.3 port 50926 ssh2 May 24 15:52:17 kali sshd-session[1515]: Connection closed by invalid user kali 192.168.64.3 port 50926 [preauth] May 24 15:52:39 kali sshd-session[1521]: Accepted password for barno from 192.168.64.3 port 53100 ssh2 May 24 15:52:39 kali sshd-session[1521]: pam_unix(sshd:session): session opened for user barno(uid=1000) by barno(uid=0)Osservazione chiave: il log mostra
from 192.168.64.3(Ubuntu) — non192.168.64.1(Mac). Il Mac si è connesso da.1ma Kali non lo vede mai: vede solo il jump server. Questo è esattamente il comportamento corretto del bastion host.Il primo tentativo fallito (
invalid user kali) è il tentativo con username sbagliato prima di usarebarno.
Scenario Reale#
Un amministratore deve accedere a 50 server nella LAN interna. Invece di esporre SSH su tutti e 50, espone solo il jump server (hardened, MFA obbligatorio, ogni accesso loggato). Dall'esterno entra sul jump server, da lì raggiunge i server interni. Se un attaccante compromette un server interno, non ha accesso diretto dall'esterno — deve passare per il jump server che è monitorato.
Risorse#
man ssh_config— ProxyJump e opzioni avanzate- Gibson SY0-701 Cap 3 — Jump Server
Collegato a#
- cap-03-security-architecture — jump server / bastion host


