sshd config - gehärtet
Mit Erklärungen:
###############################################################################
# OpenSSH Server – gehärtete Baseline
#
# Zielplattform:
# - Rocky Linux 9 / 10 // Debian 12 / 13 // Ubuntu 24.04 / 26.04
# - OpenSSH 9.9 oder neuer
#
# Sicherheitsmodell:
# - ausschließlich Public-Key-Authentifizierung
# - keine Root-Anmeldung
# - keine Legacy-Algorithmen
# - keine Port-, Agent-, X11- oder Socket-Weiterleitung
# - keine SSH-Tunnel
#
# Vor produktiver Aktivierung:
# sshd -t
# sshd -T
###############################################################################
###############################################################################
# Netzwerk
###############################################################################
# Standardport. Eine Änderung des Ports ist keine wesentliche
# Sicherheitsmaßnahme und erschwert häufig nur Betrieb und Monitoring.
Port 22
# Nur SSH-Protokoll 2 wird von aktuellen OpenSSH-Versionen unterstützt.
# Auf allen IPv4- und IPv6-Adressen lauschen.
# Bei Management-Netzen besser auf konkrete Management-IP-Adressen begrenzen.
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
# Für Systeme mit ausschließlich IPv4 alternativ:
#
# AddressFamily inet
# ListenAddress 192.0.2.10
# Reverse-DNS-Abfragen bei der Anmeldung deaktivieren.
# Verhindert Verzögerungen und Abhängigkeiten von funktionierendem DNS.
UseDNS no
###############################################################################
# Hostschlüssel
###############################################################################
# Ausschließlich Ed25519 als Server-Hostschlüssel.
HostKey /etc/ssh/ssh_host_ed25519_key
# Ausschließlich Ed25519 als Hostkey-Signaturverfahren.
HostKeyAlgorithms ssh-ed25519
# Fingerprints immer als SHA-256 darstellen.
FingerprintHash sha256
# Mindestgröße für eventuell verwendete RSA-Schlüssel.
# Diese Einstellung greift beispielsweise auch bei AuthorizedKeysCommand
# oder abweichenden Match-Blöcken.
RequiredRSASize 3072
###############################################################################
# Kryptografische Verfahren
###############################################################################
# Rekeying nach dem cipherabhängigen Datenlimit und spätestens nach einer Stunde.
RekeyLimit default 1h
# Ausschließlich moderne AEAD-Cipher.
#
# ChaCha20-Poly1305:
# Besonders performant auf Systemen ohne AES-Hardwarebeschleunigung.
#
# AES-GCM:
# Besonders performant auf moderner x86-Hardware mit AES-NI.
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
# MAC-Verfahren sind bei den oben eingesetzten AEAD-Ciphers technisch nicht
# separat erforderlich. Die explizite Liste verhindert jedoch, dass bei einer
# späteren Erweiterung unsichere oder klassische MAC-then-Encrypt-Verfahren
# zugelassen werden.
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
# Ausschließlich moderne Key-Exchange-Verfahren:
#
# mlkem768x25519-sha256:
# Hybrid aus ML-KEM-768 und Curve25519.
#
# sntrup761x25519-sha512:
# Alternatives hybrides Post-Quantum-Verfahren.
#
# curve25519-sha256:
# Klassisches modernes elliptisches Diffie-Hellman-Verfahren als Fallback.
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512,curve25519-sha256
###############################################################################
# Benutzerschlüssel und Signaturverfahren
###############################################################################
# Erlaubte Verfahren für die Benutzerauthentifizierung.
#
# ssh-ed25519:
# normaler Ed25519-Schlüssel
#
# sk-ssh-ed25519@openssh.com:
# FIDO2-/Security-Key-gestützter Ed25519-Schlüssel
#
# Zertifikatsvarianten:
# relevant, falls später eine OpenSSH-CA eingesetzt wird
PubkeyAcceptedAlgorithms ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com
# Standardpfad für autorisierte Benutzerschlüssel.
AuthorizedKeysFile .ssh/authorized_keys
# Besitzer und Berechtigungen von Home-Verzeichnis, .ssh und authorized_keys
# strikt prüfen.
StrictModes yes
###############################################################################
# Authentifizierung
###############################################################################
# Public-Key-Authentifizierung aktivieren.
PubkeyAuthentication yes
# Explizit ausschließlich einen Public Key als Authentifizierungsmethode
# zulassen.
AuthenticationMethods publickey
# Kennwortbasierte Anmeldung vollständig deaktivieren.
PasswordAuthentication no
PermitEmptyPasswords no
# Keyboard-Interactive umfasst unter anderem PAM-basierte Kennwort- und
# Challenge-Response-Verfahren.
KbdInteractiveAuthentication no
# Historische Bezeichnung für Challenge-Response.
ChallengeResponseAuthentication no
# Hostbasierte Authentifizierung deaktivieren.
HostbasedAuthentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
# Kerberos- und GSSAPI-Authentifizierung deaktivieren.
# Nur aktivieren, wenn bewusst eine AD-/Kerberos-Integration genutzt wird.
KerberosAuthentication no
GSSAPIAuthentication no
# PAM bleibt für Account-, Session-, SELinux-, Ressourcenlimit- und
# Zugriffskontrollen aktiv.
#
# UsePAM yes aktiviert nicht automatisch Kennwortauthentifizierung, solange
# PasswordAuthentication und KbdInteractiveAuthentication deaktiviert sind.
UsePAM yes
###############################################################################
# Root und administrative Konten
###############################################################################
# Direkte Root-Anmeldung vollständig verhindern.
PermitRootLogin no
# Anmeldung nur für Mitglieder dieser Gruppe zulassen.
#
# Gruppe vor Aktivierung anlegen:
# groupadd ssh-access
#
# Benutzer hinzufügen:
# usermod -aG ssh-access <benutzer>
#
# ### ACHTUNG: ###
# Erst aktivieren, nachdem mindestens ein funktionierendes Administratorkonto
# Mitglied der Gruppe ist.
AllowGroups ssh-access
# Alternativ könnte eine explizite Benutzerliste verwendet werden:
#
# AllowUsers admin ansible
#
# AllowGroups und AllowUsers wirken kumulativ. Ein Benutzer müsste dann beide
# Bedingungen erfüllen.
###############################################################################
# Anmeldeversuche und Verbindungsbegrenzung
###############################################################################
# Zeitspanne für eine noch nicht authentifizierte Anmeldung.
LoginGraceTime 30
# ### ACHTUNG: ###
# Kann bei Anmeldung über key-agent zu "too many authentication failures" führen,
# wenn mehr als 3 keys geprüft werden müssen!
# Maximale Anzahl fehlerhafter Authentifizierungsversuche pro Verbindung.
MaxAuthTries 3
# Maximal vier parallele Sessions innerhalb einer SSH-Verbindung.
# Relevant bei SSH-Multiplexing.
MaxSessions 4
# Begrenzung paralleler, noch nicht authentifizierter Verbindungen:
#
# 10 = bis zehn Verbindungen ohne zufälliges Verwerfen
# 30 = ab zehn Verbindungen mit 30 % Drop-Wahrscheinlichkeit
# 60 = ab 30 Verbindungen mit 100 % Drop-Wahrscheinlichkeit
MaxStartups 10:30:30
# Maximal drei gleichzeitig nicht authentifizierte Verbindungen
# aus derselben Quelladresse.
PerSourceMaxStartups 3
# IPv4-Adressen einzeln, IPv6-Adressen als /64-Netz bewerten.
PerSourceNetBlockSize 32:64
###############################################################################
# Verbindungserkennung und Keepalive
###############################################################################
# Alle fünf Minuten eine Protokoll-Keepalive-Anfrage senden.
ClientAliveInterval 300
# Verbindung nach zwei unbeantworteten Anfragen beenden.
# Totalausfallzeit damit ungefähr zehn Minuten.
ClientAliveCountMax 2
# Zusätzlich TCP-Keepalives verwenden.
TCPKeepAlive yes
# Bereits authentifizierte Verbindungen ohne geöffneten Channel schließen.
# Verhindert ungenutzte ControlMaster-/Multiplexing-Verbindungen.
UnusedConnectionTimeout 5m
###############################################################################
# Weiterleitungen und Tunnel
###############################################################################
# Global sämtliche SSH-Forwarding-Funktionen deaktivieren.
#
# Umfasst insbesondere:
# - TCP Forwarding
# - Agent Forwarding
# - X11 Forwarding
# - StreamLocal Forwarding
# - Tunnel
DisableForwarding yes
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no
X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes
# Änderungen an Unix-Socket-Zielen nicht zulassen.
StreamLocalBindUnlink no
###############################################################################
# Benutzerumgebung
###############################################################################
# Keine Umgebungsvariablen aus ~/.ssh/environment oder aus environment=
# Optionen in authorized_keys übernehmen.
PermitUserEnvironment no
# Benutzerdefinierte ~/.ssh/rc-Skripte nicht ausführen.
PermitUserRC no
# Keine Client-Umgebungsvariablen übernehmen.
#
# Auch LANG und LC_* werden bewusst nicht übernommen. Dadurch können Programme
# auf dem Server eine andere Sprache oder Locale verwenden als der Client.
#
# Falls benötigt:
# AcceptEnv LANG LC_*
###############################################################################
# Session-Einstellungen
###############################################################################
# Interaktive Terminals zulassen.
# Erforderlich für normale administrative Shell-Sitzungen und häufig auch
# für sudo mit TTY-Anforderungen.
PermitTTY yes
# Benutzer dürfen ihre letzte Anmeldung nicht unterdrücken.
PrintLastLog yes
# MOTD wird z.B. auf RHEL/Rocky normalerweise über PAM ausgegeben.
PrintMotd no
# Keine benutzerdefinierten Umgebungsvariablen aus ~/.ssh/environment
# oder environment= Optionen in authorized_keys übernehmen.
PermitUserEnvironment no
# Kompression deaktivieren.
# Bei verschlüsselten oder bereits komprimierten Daten meist ohne Nutzen.
Compression no
###############################################################################
# Dateirechte und Benutzerprüfungen
###############################################################################
# Konten ohne gültige Login-Shell beziehungsweise gesperrte Konten werden
# zusätzlich durch PAM und die Systemkontenverwaltung behandelt.
# Keine .rhosts- oder hosts.equiv-Dateien berücksichtigen.
IgnoreRhosts yes
# Keine benutzerspezifischen known_hosts-Dateien für Hostbased Authentication
# verwenden.
IgnoreUserKnownHosts yes
###############################################################################
# Logging und Auditing
###############################################################################
# Authentifizierungsnachrichten in AUTHPRIV schreiben.
SyslogFacility AUTHPRIV
# VERBOSE protokolliert unter anderem Fingerprints verwendeter Schlüssel.
# Das ist für Auditierung und Incident Response sinnvoll.
LogLevel VERBOSE
# Keine zusätzlichen Authentifizierungsinformationen in einer
# benutzersichtbaren Datei bereitstellen.
ExposeAuthInfo no
###############################################################################
# Banner
###############################################################################
# Optionaler rechtlicher beziehungsweise organisatorischer Login-Banner.
# Die Datei darf keine vertraulichen Systemdetails enthalten.
Banner /etc/issue.net
###############################################################################
# SFTP
###############################################################################
# Internen SFTP-Server verwenden.
# Vermeidet einen separaten externen Prozess und ist für Chroot-Konfigurationen
# besser geeignet.
Subsystem sftp internal-sftp
###############################################################################
# Distributionseigene Drop-ins
###############################################################################
# Bewusst am Ende eingebunden:
#
# OpenSSH verwendet bei vielen Parametern den zuerst gefundenen Wert.
# Dadurch haben die Werte dieser Hauptdatei Vorrang vor später eingebundenen
# Drop-ins.
#
# ACHTUNG:
# Match-Blöcke in Drop-ins können weiterhin benutzerabhängige Einstellungen
# setzen.
Include /etc/ssh/sshd_config.d/*.conf
Komprimiert ohne Erklärungen:
###############################################################################
# OpenSSH Server – gehärtete Baseline
###############################################################################
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
UseDNS no
HostKey /etc/ssh/ssh_host_ed25519_key
HostKeyAlgorithms ssh-ed25519
FingerprintHash sha256
RequiredRSASize 3072
RekeyLimit default 1h
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512,curve25519-sha256
PubkeyAcceptedAlgorithms ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com
AuthorizedKeysFile .ssh/authorized_keys
StrictModes yes
PubkeyAuthentication yes
AuthenticationMethods publickey
PasswordAuthentication no
PermitEmptyPasswords no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
KerberosAuthentication no
GSSAPIAuthentication no
UsePAM yes
PermitRootLogin no
# AllowGroups ssh-access
LoginGraceTime 30
# MaxAuthTries 3
MaxSessions 4
MaxStartups 10:30:30
PerSourceMaxStartups 3
PerSourceNetBlockSize 32:64
ClientAliveInterval 300
ClientAliveCountMax 2
TCPKeepAlive yes
UnusedConnectionTimeout 5m
DisableForwarding yes
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no
X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes
StreamLocalBindUnlink no
PermitUserEnvironment no
PermitUserRC no
PermitTTY yes
PrintLastLog yes
PrintMotd no
Compression no
SyslogFacility AUTHPRIV
LogLevel VERBOSE
ExposeAuthInfo no
Banner /etc/issue.net
Subsystem sftp internal-sftp
Include /etc/ssh/sshd_config.d/*.conf
Zuletzt aktualisiert am 19.08.2026
·
7
Aufrufe
No comments to display
No comments to display