sshd config - gehärtet
###############################################################################
# OpenSSH Server – gehärtete Baseline
#
# Zielplattform:
# - Rocky Linux 10 / RHEL 10
# - 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
# 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
No comments to display
No comments to display