Benutzer-Werkzeuge

Webseiten-Werkzeuge


open:it:ssh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
open:it:ssh [2024/07/12 17:06] – [SSH-Zugriff am Server konfigurieren] Kaiopen:it:ssh [2024/12/22 20:15] (aktuell) – [Schutz vor Angriffen mit fail2ban] Kai
Zeile 1: Zeile 1:
 ====== SSH-Verbindungen ====== ====== SSH-Verbindungen ======
 Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke. \\ Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke. \\
 +
 +Hinweise: https://wiki.ubuntuusers.de/SSH/ \\
  
 <WRAP important> <WRAP important>
-Empfehlenswert+Empfehlenswerte Einstellungen für einen Server, der über das Internet erreichbar ist (z.B. ein Webserver)
-  * Direkter Login von root  untersagen +  * Den direkten Zugang für "root" von Außen ausschließen. 
-  * Zugang nur mit Schlüssel -> Login ohne Schlüssel (nur Passwort) unterbinden +  * Den Zugang mit Passwort von Außen generell ausschließen. 
-  * Optional z.B. für Webserver: Beschränkter Zugriff über SFTP auf definierten Bereich (HTML-Files …)+  * Zugang nur mit Schlüssel. 
 +  * Optional z.B. für Webserver: Beschränkter Zugriff über SFTP auf definierte Bereiche (HTML-Files …)
 </WRAP> </WRAP>
-Hinweise: https://wiki.ubuntuusers.de/SSH/ 
  
 ===== SSH-Schlüssel ===== ===== SSH-Schlüssel =====
Zeile 26: Zeile 28:
 Den Schlüssel ohne Passwort zu generieren, vereinfacht das Login, da dann später kein Passwort mehr angegeben werden muss. Wird der private Schlüssel zu einem anderen System transferiert, z.B. per E-Mail – **keine gute Idee!** — birgt das Abhör-Gefahren.  Den Schlüssel ohne Passwort zu generieren, vereinfacht das Login, da dann später kein Passwort mehr angegeben werden muss. Wird der private Schlüssel zu einem anderen System transferiert, z.B. per E-Mail – **keine gute Idee!** — birgt das Abhör-Gefahren. 
  
-<WRAP alert>+<WRAP important>
 **Der private Schlüssel muss unbedingt vor fremdem Zugriff geschützt bleiben!** **Der private Schlüssel muss unbedingt vor fremdem Zugriff geschützt bleiben!**
 </WRAP> </WRAP>
Zeile 65: Zeile 67:
   - Load an existing private key file   - Load an existing private key file
   - Save private key >> jetzt mit Endung .ppk   - Save private key >> jetzt mit Endung .ppk
 +
 +===== Server konfigurieren =====
 +==== SSH-Zugriffe ====
 +Ggf. vorher Installieren
 +  sudo apt-get install openssh-server
 +
 +  sudo nano /etc/ssh/sshd_config
 +
 +  ClientAliveInterval 1200
 +  ClientAliveCountMax 3
 +  
 +  PermitRootLogin no
 +  PasswordAuthentication no
 +  Subsystem sftp internal-sftp
 +
 +<WRAP important>
 +Um sich nicht selber auszusperren: \\
 +PermitRootLogin nur deaktivieren, sofern ein anderer User Zugriff hat und PasswordAuthentication nur abschalten, sofern der Zugriff mit dem Key-File auch klappt! \\
 +
 +Möglicherweise gibt es Parameter in einem Unterordner, die die Regeln überschreiben. Möglich, dass dort in einer *.conf-Datei, \\
 +z.B. /etc/ssh/sshd_config.d/50-cloud-init.conf, hinterlegt ist: **PasswordAuthentication yes** \\
 +Das muss dann angepasst werden.
 +</WRAP>
 +The **ClientAliveInterval** parameter specifies the time in seconds that the server will wait before sending a null packet to the client system to keep the connection alive. \\
 +The **ClientAliveCountMax** parameter defines the number of client alive messages which are sent without getting any messages from the client. \\
 +Timeout value = ClientAliveInterval * ClientAliveCountMax \\
 +Beispiel: 1200 x 3 = 3600 ~ 1 Stunde. \\
 +Nach Änderungen muss der SSH-Service neu gestartet werden.
 +  sudo systemctl reload ssh
 +
 +==== Schutz vor Angriffen mit fail2ban ====
 +[[https://schroederdennis.de/tutorial-howto/ssh-login-schuetzen-mit-fail2ban-server-absichern-anleitung-brute-force/|SSH Login schützen mit fail2ban]] \\
 +[[https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-debian-11|How To Protect SSH with Fail2Ban on Debian 11]] \\
 +[[https://www.howtoforge.de/anleitung/installation-und-verwendung-von-fail2ban-unter-debian-12/|Installation und Verwendung von Fail2ban unter Debian 12]] \\
 +[[https://wiki.ubuntuusers.de/fail2ban/|fail2ban bei Ubuntu-Users]] \\
 +
 +fail2ban installieren
 +  sudo apt update
 +
 +  sudo apt install fail2ban
 +
 +Conf-Dateien kopieren
 +  sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
 +
 +  sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
 +
 +nur die .local-Dateien bearbeiten
 +  sudo nano /etc/fail2ban/jail.local
 +
 +Ändern (nach [sshd]) suchen: \\
 +[sshd]
 +  backend=systemd
 +  enabled = true
 +  port = ssh
 +  filter = sshd
 +  logpath = /var/log/auth.log
 +  maxretry = 3
 +
 +Über die Zeit-Parameter in der Datei /etc/fail2ban/jail.local lässt es sich steuern: \\
 +# "bantime" is the number of seconds that a host is banned. \\
 +# Beispiel: Sperrung(banned) für 1 Stunde, wenn maxrtry innerhalb findtime erreicht wurde \\
 +**bantime = 3600** \\
 +# A host is banned if it has generated "maxretry" during the last "findtime" \\
 +# Beispiel: Zeit (hier 3 Minuten). \\
 +**findtime = 180** \\
 +# "maxretry" is the number of failures before a host get banned. \\
 +**maxretry = 5** \\
 +
 +Installieren
 +  sudo apt install python3-systemd
 +
 +fail2ban neu starten
 +  sudo systemctl restart fail2ban
 +Autostart mit System
 +  sudo systemctl enable fail2ban
 +
 +Protokoll der (temporär) verbanten IP-Adressen
 +  sudo zgrep 'Ban' /var/log/fail2ban.log*
 +
 +==== Verbindungs-Protokolle ====
 +Quelle: https://www.strongdm.com/blog/view-ssh-logs \\
 +
 +If you want to view ssh logs from a specific time range, you can use the since and until flags. Some examples:
 +  sudo journalctl -u ssh --since yesterday
 +
 +  sudo journalctl -u ssh --since -3d --until -2d # logs from three days ago
 +
 +  sudo journalctl -u ssh --since -1h # logs from the last hour
 +
 +  sudo journalctl -u ssh --until "2024-12-20 07:00:00"
 +
 +To watch the ssh logs in realtime, use the follow flag:
 +  sudo journalctl -fu ssh
 +
 +Use Ctrl-C to exit out of the log monitor.
  
 ===== Login ===== ===== Login =====
Zeile 106: Zeile 203:
 Verbindungsart: **Schlüsseldatei**. Verbindungsart: **Schlüsseldatei**.
  
-===== SSH-Zugriff am Server konfigurieren ===== 
  
-  sudo nano /etc/ssh/sshd_config 
- 
-  ClientAliveInterval 1200 
-  ClientAliveCountMax 3 
-   
-  PermitRootLogin no 
-  PasswordAuthentication no 
-  Subsystem sftp internal-sftp 
- 
-<WRAP alert> 
-Um sich nicht selber auszusperren: \\ 
-PermitRootLogin nur deaktivieren, sofern ein anderer User Zugriff hat und PasswordAuthentication nur abschalten, sofern der Zugriff mit dem Key-File auch klappt! \\ 
-Möglicherweise gibt es Parameter in einem Unterordner, der die Regeln überschreibt. Möglich, dass dort z.B. in einer *.conf-Datei hinterlegt ist: **PasswordAuthentication yes** \\ 
-Das muss dann angepasst werden. 
-</WRAP> 
-The **ClientAliveInterval** parameter specifies the time in seconds that the server will wait before sending a null packet to the client system to keep the connection alive. \\ 
-The **ClientAliveCountMax** parameter defines the number of client alive messages which are sent without getting any messages from the client. \\ 
-Timeout value = ClientAliveInterval * ClientAliveCountMax \\ 
-Beispiel: 1200 x 3 = 3600 ~ 1 Stunde. \\ 
-Nach Änderungen muss der SSH-Service neu gestartet werden. 
- 
-  sudo systemctl reload ssh 
 ===== Dateien kopieren über SSH ===== ===== Dateien kopieren über SSH =====
 Dafür __nicht__ vorab auf dem Remote-Server einloggen, sondern vom lokalen Rechner ausführen. Dafür __nicht__ vorab auf dem Remote-Server einloggen, sondern vom lokalen Rechner ausführen.
Zeile 142: Zeile 216:
 Kopieren des Verzeichnisses “foo” vom lokalen Rechner in das Verzeichnis “bar” eines entfernten Rechners. Kopieren des Verzeichnisses “foo” vom lokalen Rechner in das Verzeichnis “bar” eines entfernten Rechners.
   scp -r foo <USER>@<REMOTEHOST>:/some/remote/directory/bar   scp -r foo <USER>@<REMOTEHOST>:/some/remote/directory/bar
 +
 Quelle: https://www.davidkehr.com/linux-kopieren-von-und-zu-einem-computer-per-scp-ssh/ Quelle: https://www.davidkehr.com/linux-kopieren-von-und-zu-einem-computer-per-scp-ssh/
-~~DISCUSSION~~ 
- 
  
open/it/ssh.1720796800.txt.gz · Zuletzt geändert: 2024/07/12 17:06 von Kai