open:it:ssh
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
open:it:ssh [2024/07/12 17:06] – [SSH-Zugriff am Server konfigurieren] Kai | open: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:// | ||
<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 | + | * Den direkten Zugang für "root" von Außen ausschließen. |
- | * Zugang nur mit Schlüssel | + | * Den Zugang mit Passwort von Außen generell ausschließen. |
- | * Optional z.B. für Webserver: Beschränkter Zugriff über SFTP auf definierten Bereich | + | * Zugang nur mit Schlüssel. |
+ | * Optional z.B. für Webserver: Beschränkter Zugriff über SFTP auf definierte Bereiche | ||
</ | </ | ||
- | Hinweise: https:// | ||
===== 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, | 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, | ||
- | < | + | < |
**Der private Schlüssel muss unbedingt vor fremdem Zugriff geschützt bleiben!** | **Der private Schlüssel muss unbedingt vor fremdem Zugriff geschützt bleiben!** | ||
</ | </ | ||
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 / | ||
+ | |||
+ | ClientAliveInterval 1200 | ||
+ | ClientAliveCountMax 3 | ||
+ | | ||
+ | PermitRootLogin no | ||
+ | PasswordAuthentication no | ||
+ | Subsystem sftp internal-sftp | ||
+ | |||
+ | <WRAP important> | ||
+ | Um sich nicht selber auszusperren: | ||
+ | PermitRootLogin nur deaktivieren, | ||
+ | |||
+ | Möglicherweise gibt es Parameter in einem Unterordner, | ||
+ | z.B. / | ||
+ | Das muss dann angepasst werden. | ||
+ | </ | ||
+ | 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:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | fail2ban installieren | ||
+ | sudo apt update | ||
+ | |||
+ | sudo apt install fail2ban | ||
+ | |||
+ | Conf-Dateien kopieren | ||
+ | sudo cp / | ||
+ | |||
+ | sudo cp / | ||
+ | |||
+ | nur die .local-Dateien bearbeiten | ||
+ | sudo nano / | ||
+ | |||
+ | Ändern (nach [sshd]) suchen: \\ | ||
+ | [sshd] | ||
+ | backend=systemd | ||
+ | enabled = true | ||
+ | port = ssh | ||
+ | filter = sshd | ||
+ | logpath = / | ||
+ | maxretry = 3 | ||
+ | |||
+ | Über die Zeit-Parameter in der Datei / | ||
+ | # " | ||
+ | # Beispiel: Sperrung(banned) für 1 Stunde, wenn maxrtry innerhalb findtime erreicht wurde \\ | ||
+ | **bantime = 3600** \\ | ||
+ | # A host is banned if it has generated " | ||
+ | # Beispiel: Zeit (hier 3 Minuten). \\ | ||
+ | **findtime = 180** \\ | ||
+ | # " | ||
+ | **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 ' | ||
+ | |||
+ | ==== Verbindungs-Protokolle ==== | ||
+ | Quelle: https:// | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | 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: | Verbindungsart: | ||
- | ===== SSH-Zugriff am Server konfigurieren ===== | ||
- | sudo nano / | ||
- | |||
- | ClientAliveInterval 1200 | ||
- | ClientAliveCountMax 3 | ||
- | | ||
- | PermitRootLogin no | ||
- | PasswordAuthentication no | ||
- | Subsystem sftp internal-sftp | ||
- | |||
- | <WRAP alert> | ||
- | Um sich nicht selber auszusperren: | ||
- | PermitRootLogin nur deaktivieren, | ||
- | Möglicherweise gibt es Parameter in einem Unterordner, | ||
- | Das muss dann angepasst werden. | ||
- | </ | ||
- | 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 < | scp -r foo < | ||
+ | |||
Quelle: https:// | Quelle: https:// | ||
- | ~~DISCUSSION~~ | ||
- | |||
open/it/ssh.1720796800.txt.gz · Zuletzt geändert: 2024/07/12 17:06 von Kai