Linux Server setup

SSH-Port ändern

Die Umstellung des SSH-Ports bietet keinen wesentlichen zusätzlichen Schutz, denn Portscanner finden Dienste auch auf abweichenden Ports. Sie kann aber wahllose automatisierte Anmeldeversuche reduzieren und die SSH-Logdateien übersichtlicher halten. Fail2ban reagiert auf passende Einträge in überwachten Logdateien; allgemeine Portscans stoppt es nicht. Die eigentliche Absicherung bleiben daher die schlüsselbasierte Anmeldung, die deaktivierte Passwortanmeldung und die Firewall.

Als optionalen, anschaulichen Schritt ändere ich den Port von 22 auf 22123. Du kannst einen anderen unbenutzten Port zwischen 1024 und 65535 wählen. Bei einem fünfstelligen Port ist eine Überschneidung mit einem gängigen Dienst weniger wahrscheinlich. Bei Wikipedia gibt es dazu eine Liste von standardisierten Ports.

Im Kapitel Firewall aktivieren hat der Name ssh den Standardport 22 freigegeben. Dieses UFW-Profil folgt einer Portänderung nicht automatisch. Deshalb müssen wir den neuen Port ausdrücklich freigeben, bevor wir SSH neu starten.

SSH Regeln in UFW überprüfen

Rufen wir zur Sicherheit die aktuellen Firewall Regeln ab:


__$ sudo ufw status verbose
 

Ausgabe:


Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

Wir geben zunächst den neuen Port in der Firewall frei und lassen die bestehende SSH-Verbindung geöffnet:


__$ sudo ufw allow 22123/tcp
 

SSH-Port ändern

Erst ändern wir den Standardport 22 vom SSH-Dienst. Öffnen wir dazu die SSH-Konfigurationsdatei:


__$ sudo nano /etc/ssh/sshd_config
 

Die Option Port kommentieren wir ein und stellen den Wert auf 22123:

Auszug aus /etc/ssh/sshd_config


...
Port 22123
...
 

Die folgende vollständige Datei dient nur zur Orientierung. Standardwerte und Kommentare können sich zwischen OpenSSH-Versionen unterscheiden; ersetze deine gesamte Datei deshalb nicht durch dieses Beispiel. Für diesen Schritt müssen nur die oben gezeigten relevanten Direktiven geändert werden.

/etc/ssh/sshd_config


#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

Port 22123
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile     %h/.ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem sftp  /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

Vor dem Neustart prüfen wir die Konfiguration. Ubuntu 24.04 verwendet für OpenSSH standardmäßig die Socket-Aktivierung von systemd. Deshalb erfordert ein geänderter Port zusätzlich ein daemon-reload:


__$ sudo sshd -t
__$ sudo systemctl daemon-reload
__$ sudo systemctl restart ssh.service
 

Lass die aktuelle Verbindung geöffnet und teste zuerst in einem zweiten Fenster eine Verbindung über Port 22123. Erst wenn sie funktioniert, löschen wir die alte Firewallregel:


__$ sudo ufw delete allow ssh
 

Schauen wir uns die Regelliste nochmal an:


__$ sudo ufw status
 

Ausgabe:


Status: active

To                         Action      From
--                         ------      ----
22123/tcp                  ALLOW IN    Anywhere
22123/tcp (v6)             ALLOW IN    Anywhere (v6)

Wie die einzelnen Regeln gelöscht werden, kann unter ufw nachgeschlagen werden.

Ab jetzt müssen wir bei der Anmeldung den neuen Port mitgeben.

Unter Windows mit PuTTY

In PuTTY stellen wir dazu den Port um. Bestenfalls laden wir unsere Session, ändern den Port und speichern die Session auch wieder ab:

PuTTY Port ändern

Unter Windows mit Cygwin

Bei Cygwin ergänzen wir den Parameter -p und die Portnummer:


__$ ssh tom@116.203.69.89 -p 22123 -i /cygdrive/d/linux-server/keys/private-key
 

Unter Mac und Linux im Terminal

Wir ergänzen den Parameter -p und die Portnummer. Der vollständige SSH-Befehl sieht im Terminal dann so aus:


__$ ssh tom@116.203.69.89 -p 22123 -i ~/linux-server/id_rsa