You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Installiert pip für Python 3.
apt install ssh-audit -y
# SSH-Security-Scan
ssh-audit localhost:22
# Re-generate the RSA and ED25519 keys
rm /etc/ssh/ssh_host_*
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""# Remove small Diffie-Hellman moduli
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe
mv /etc/ssh/moduli.safe /etc/ssh/moduli
# Restrict supported key exchange, cipher, and MAC algorithms
echo -e "# Restrict key exchange, cipher, and MAC algorithms, as per sshaudit.com\n# hardening guide.\n KexAlgorithms curve25519-sha256,[email protected],gss-curve25519-sha256-,diffie-hellman-group16-sha512,gss-group16-sha512-,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256\n\nCiphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr\n\nMACs [email protected],[email protected],[email protected]\n\nHostKeyAlgorithms [email protected],[email protected],[email protected],[email protected],[email protected],ssh-ed25519,rsa-sha2-512,rsa-sha2-256\n\nRequiredRSASize 3072\n\nCASignatureAlgorithms [email protected],ssh-ed25519,rsa-sha2-512,rsa-sha2-256\n\nGSSAPIKexAlgorithms gss-curve25519-sha256-,gss-group16-sha512-\n\nHostbasedAcceptedAlgorithms [email protected],[email protected],[email protected],ssh-ed25519,[email protected],rsa-sha2-512,[email protected],rsa-sha2-256\n\nPubkeyAcceptedAlgorithms [email protected],[email protected],[email protected],ssh-ed25519,[email protected],rsa-sha2-512,[email protected],rsa-sha2-256\n\n" > /etc/ssh/sshd_config.d/ssh-audit_hardening.conf
# Generiert einen sicheren SSH-Key (ed25519) - mit y Bestätigen.
ssh-keygen -o -a 100 -t ed25519 -N "" -f /etc/ssh/ssh_host_ed25519_key -C "$(hostname)-$(date -I)"# Öffentlichen Schlüssel dem root verfügbar machen
cat /etc/ssh/ssh_host_ed25519_key.pub >>~/.ssh/authorized_keys
# Öffentlichen Schlüssel dem neu erstellten User verfügbar machen
cat /etc/ssh/ssh_host_ed25519_key.pub >> /home/erik/.ssh/authorized_keys
# Privaten Schlüssel anzeigem
cat /etc/ssh/ssh_host_ed25519_key
# Inhalt im C:\Users\erikw\.ssh in eine neue Datei schreibem# Dateiname: 20240929-pve-ed25519_key# In der 8. Zeile muss eine Leerzeile sein und Format LF!!# Verhindert das anmelden mittels Passwort.
sed -ri 's/#?PasswordAuthentication\s.*$/PasswordAuthentication no/' /etc/ssh/sshd_config
# Erlaubt das anmelden mittels SSH-Schlüsselpaare.
sed -ri 's/#?PubkeyAuthentication\s.*$/PubkeyAuthentication yes/' /etc/ssh/sshd_config
# Begrenzt die Authentifizierungsversuche !der Wert hier ist 3, kann angepasst werden.
sed -ri 's/#?MaxAuthTries\s.*$/MaxAuthTries 3/' /etc/ssh/sshd_config
# Einstellungen übernehmen.
systemctl reload sshd
# Wir ändern den Port auf 62253 - ! Kann angepasst werden.
sed -ri 's/#?Port\s.*$/Port 62253/' /etc/ssh/sshd_config
# aktiviert das sicherer Protocol 2.
sed -i '/^.*Port.*/a Protocol 2' /etc/ssh/sshd_config
# lässt nur IPv4 zu. !Kann angepasst werden - "any" (IPv4 & IPv6), "inet" (nur IPv4) oder "inet6" (nur IPv6).
sed -ri 's/#?AddressFamily\s.*$/AddressFamily inet/' /etc/ssh/sshd_config
# Gibt die verfügbaren KEX (Key Exchange)-Algorithmen an.
sed -i '/^.*Ciphers.*/a KexAlgorithms [email protected]' /etc/ssh/sshd_config
# Gibt die verfügbaren MAC-Algorithmen (Message Authentication Code) an.
sed -i '/^.*KexAlgorithms.*/a MACs [email protected],hmac-sha2-512' /etc/ssh/sshd_config
# Gibt die zulässigen Verschlüsselungen an.
sed -i '/^.*MACs.*/a Ciphers [email protected],[email protected]' /etc/ssh/sshd_config
# Gibt die vom Server angebotenen Algorithmen für die Schlüsselsignatur des Hosts an.
sed -i '/^.*Ciphers chacha20.*/a HostKeyAlgorithms [email protected],ssh-ed25519' /etc/ssh/sshd_config
# stellt das LogLevel auf "INFO" und das SyslogFacility auf "AUTHPRIV".
sed -ri 's/#?SyslogFacility\s.*$/SyslogFacility AUTHPRIV/' /etc/ssh/sshd_config
sed -ri 's/#?LogLevel\s.*$/LogLevel INFO/' /etc/ssh/sshd_config
# Anmeldezeitraum zur Authentifizierung !Kann angepasst werden.
sed -ri 's/#?LoginGraceTime\s.*$/LoginGraceTime 30/' /etc/ssh/sshd_config
# Verhindert Konfigurationsfehler.
sed -ri 's/#?StrictModes\s.*$/StrictModes yes/' /etc/ssh/sshd_config
# Deaktiviert die hostbasierte Authentifizierung.
sed -ri 's/#?HostbasedAuthentication\s.*$/HostbasedAuthentication no/' /etc/ssh/sshd_config
# Gibt an, dass .rhosts- und .shosts-Dateien nicht verwendet werden.
sed -ri 's/#?IgnoreRhosts\s.*$/IgnoreRhosts yes/' /etc/ssh/sshd_config
# Deaktiviert das einloggen mit leeren Passwörtern.
sed -ri 's/#?PermitEmptyPasswords\s.*$/PermitEmptyPasswords no/' /etc/ssh/sshd_config
# Deaktiviert die Kerberos-Authentifizierung.
sed -ri 's/#?KerberosAuthentication\s.*$/KerberosAuthentication no/' /etc/ssh/sshd_config
sed -ri 's/#?GSSAPIAuthentication\s.*$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
# Deaktiviert die Agentenweiterleitung/-tunnelung.
sed -ri 's/#?AllowAgentForwarding\s.*$/AllowAgentForwarding no/' /etc/ssh/sshd_config
# Deaktiviert die TCP-Weiterleitung/Tunneling.
sed -ri 's/#?AllowTcpForwarding\s.*$/AllowTcpForwarding no/' /etc/ssh/sshd_config
# Deaktiviert das Remote-Port-Forwarding.
sed -ri 's/#?GatewayPorts\s.*$/GatewayPorts no/' /etc/ssh/sshd_config
# Deaktiviert die X11-Weiterleitung/Tunneling (GUI).
sed -ri 's/#?X11Forwarding\s.*$/X11Forwarding no/' /etc/ssh/sshd_config
# Deaktiviert das Motd-Banner "Message of the Day".
sed -ri 's/#?PrintMotd\s.*$/PrintMotd no/' /etc/ssh/sshd_config
# Zeigt das Datum und Uhrzeit der letzten Benutzeranmeldung an.
sed -ri 's/#?PrintLastLog\s.*$/PrintLastLog yes/' /etc/ssh/sshd_config
# Verhindert, dass die Verbindung zum Server unterbrochen wird.
sed -ri 's/#?TCPKeepAlive\s.*$/TCPKeepAlive yes/' /etc/ssh/sshd_config
# Deaktiviert die User Environment Files.
sed -ri 's/#?PermitUserEnvironment\s.*$/PermitUserEnvironment no/' /etc/ssh/sshd_config
# Deaktiviert die Komprimierung und sorgt für mehr Sicherheit.
sed -ri 's/#?Compression\s.*$/Compression no/' /etc/ssh/sshd_config
# Beendet die Verbindung nach 30 Minuten Inaktivität - !Kann angepasst werden.
sed -ri 's/#?ClientAliveInterval\s.*$/ClientAliveInterval 1800/' /etc/ssh/sshd_config
# Sendet 2 Mal eine ClientAlive-Nachricht bevor die Verbindung abbricht - !Kann angepasst werden.
sed -ri 's/#?ClientAliveCountMax\s.*$/ClientAliveCountMax 2/' /etc/ssh/sshd_config
# Deaktiviert DNS-Lookup, dadurch wird die Verbindung schneller hergestellt.
sed -ri 's/#?UseDNS\s.*$/UseDNS no/' /etc/ssh/sshd_config
# Deaktiviert die Weiterleitung von tun-Geräten bei SSH-Verbindugen.
sed -ri 's/#?PermitTunnel\s.*$/PermitTunnel no/' /etc/ssh/sshd_config
# Deaktiviert das SSH-Protokollbanner.
sed -ri 's/#?VersionAddendum\s.*$/VersionAddendum none/' /etc/ssh/sshd_config
# Beschränkt den Zugang auf folgende Benutzer – !ACHTUNG bitte Namen anpassen.
sed -i '/^.*AddressFamily.*/a AllowUsers erik' /etc/ssh/sshd_config
# Prüft die Konfiguration auf Fehler.
sshd -t
# startet den OpenSSH-Server neu.
service ssh restart
# Powershell SSH Config anpassen - zukünftig SSH Connect via "ssh proxmox"
Add-Content -Path "$env:USERPROFILE\.ssh\config" -Value @"Host proxmox HostName 10.0.0.200 Port 62253 User erik IdentityFile C:/Users/erikw/.ssh/20240929-pve-ed25519_key IdentitiesOnly yes"@
# SSH Zugang in einer NEUEN Shell überprüfen
ssh proxmox
# UFW installieren
apt install ufw -y
# IPv6 deaktivieren
sudo sed -i 's/^IPV6=yes/IPV6=no/' /etc/default/ufw
# eingehende Verbindungen werden abgelehnt und ausgehende Verbindungen zugelassen.
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH für 10.0.0.0/24 erlauben
sudo ufw allow from 10.0.0.0/24 to any port 62253 proto tcp comment 'SSH zulassen für 10.0.0.0/24'# Proxmox Web-UI für 10.0.0.0/24 erlauben
sudo ufw allow from 10.0.0.0/24 to any port 8006 proto tcp comment 'Proxmox Web-UI zulassen für 10.0.0.0/24'# VNC Web-Console für 10.0.0.0/24 erlauben
sudo ufw allow from 10.0.0.0/24 to any port 5900:5999 proto tcp comment 'VNC Web-Console zulassen für 10.0.0.0/24'# SPICE Proxy für 10.0.0.0/24 erlauben
sudo ufw allow from 10.0.0.0/24 to any port 3128 proto tcp comment 'SPICE Proxy zulassen für 10.0.0.0/24'# DNS-Abfragen (TCP) von 10.0.0.0/24 zu 1.1.1.1 erlauben
sudo ufw allow from 10.0.0.0/24 to 1.1.1.1 port 53 proto tcp comment 'Erlaube TCP-DNS-Abfragen von 10.0.0.0/24 zu 1.1.1.1'# DNS-Abfragen (UDP) von 10.0.0.0/24 zu 1.1.1.1 erlauben
sudo ufw allow from 10.0.0.0/24 to 1.1.1.1 port 53 proto udp comment 'Erlaube DNS-Abfragen von 10.0.0.0/24 zu 1.1.1.1'# DNS über TLS von 10.0.0.0/24 zu 1.1.1.1 erlauben
sudo ufw allow from 10.0.0.0/24 to 1.1.1.1 port 853 proto tcp comment 'Erlaube DNS-Anfragen über TLS von 10.0.0.0/24 zu 1.1.1.1'# Proxmox Web-UI für 10.0.20.0/24 über eth0 erlauben
sudo ufw allow in on eth0 from 10.0.20.0/24 to any port 8006 proto tcp comment 'Proxmox Web-UI zulassen für 10.0.20.0/24'# SSH für 10.0.20.0/24 erlauben
sudo ufw allow from 10.0.20.0/24 to any port 62253 proto tcp comment 'SSH zulassen für 10.0.20.0/24'# Proxmox Web-UI für 10.0.20.0/24 erlauben
sudo ufw allow from 10.0.20.0/24 to any port 8006 proto tcp comment 'Proxmox Web-UI zulassen für 10.0.20.0/24'# VNC Web-Console für 10.0.20.0/24 erlauben
sudo ufw allow from 10.0.20.0/24 to any port 5900:5999 proto tcp comment 'VNC Web-Console zulassen für 10.0.20.0/24'# UFW-Regeln überprüfen
sudo ufw status verbose
sudo ufw enable