SSH mit MAC-basierter Filterung unter Verwendung von iptables – empfohlen?

SSH mit MAC-basierter Filterung unter Verwendung von iptables – empfohlen?

Ich habe einen Server in einem internen Netzwerk (Anmeldung dort über VPN), von dem aus ich mich über SSH mit OpenSSH Public/Private Key-Authentifizierung am Server anmelde. Aus Sicherheitsgründen möchte ich die MAC-Adressen meiner drei verwendeten Clients über den Server binden, iptablesdamit sich nur diese Clients damit anmelden können.

iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP

Ist es dennoch empfehlenswert, dies auf diese Weise zu tun? Welche anderen (besseren) Methoden kann ich verwenden, um den SSH-Login an die verwendeten Clients zu binden?

(Wenn jemand 2FA anfordern möchte, ist 2FA als mögliche Lösung leider nicht möglich.)

Danke.

Antwort1

Ich nehme an, Sie möchten verhindern, dass Ihr SSH-Server Verbindungen von nicht vertrauenswürdigen Hosts akzeptiert, auch wenn diese gültige Benutzeranmeldeinformationen liefern. Ist das richtig?

Eine mögliche Lösung, um die Public-Key-Authentifizierung von Benutzern an ausgewählte Client-Hosts zu binden, ist die hostbasierte Authentifizierung. Richten Sie die hostbasierte Authentifizierung ein und definieren Sie AuthenticationMethodsParameter in /etc/ssh/sshd_configeiner der folgenden Optionen:

AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password

Oder:

AuthenticationMethods hostbased,publickey

Dadurch wird der SSH-Daemon angewiesen, Clients aufzufordern, die Hosts zu authentifizieren, von denen aus sie eine Verbindung herstellen, bevor die Schlüssel oder Passwörter der Benutzer überprüft werden. Die erste Alternative ermöglicht eine passwortbasierte Authentifizierung, während die zweite sie nur auf öffentliche Schlüssel beschränkt. Da die hostbasierte Authentifizierung auf Schlüsselpaaren basiert, kann der SSH-Server Clients mit dynamischen IP-Adressen authentifizieren.


Hier folgen vollständige Anweisungen. Die Dokumentation, wie SSH die hostbasierte Authentifizierung durchführt, finden Sie inssh(1)man-Seite. Beachten Sie, wie SSH Benutzer identifiziert und prüfen Sie, ob dies in Ihrem Fall zutrifft.

Die hostbasierte Authentifizierung funktioniert folgendermaßen: Wenn der Rechner, von dem aus sich der Benutzer anmeldet, in /etc/hosts.equivoder /etc/ssh/shosts.equivauf dem Remote-Rechner aufgeführt ist unddie Benutzernamen auf beiden Seiten gleich sindoder wenn die Dateien im Home-Verzeichnis des Benutzers auf dem Remote-Rechner vorhanden sind ~/.rhostsund~/.shostsenthält eine Zeile mit dem Namen des Client-Rechners und dem Namen des Benutzers auf diesem Rechner, wird der Benutzer für die Anmeldung berücksichtigt. Darüber hinaus muss der Server den Hostschlüssel des Clients überprüfen können, damit die Anmeldung zulässig ist. Diese Authentifizierungsmethode schließt Sicherheitslücken durch IP-Spoofing, DNS-Spoofing und Routing-Spoofing. [Hinweis für den Administrator: /etc/hosts.equiv, ~/.rhosts, und das rlogin/rsh-Protokoll im Allgemeinen sind von Natur aus unsicher und sollten deaktiviert werden, wenn Sicherheit gewünscht wird.]

So aktivieren Sie die hostbasierte Authentifizierung in OpenSSH:

# /etc/ssh/sshd_config

HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes

# AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
AuthenticationMethods hostbased,publickey
  • Um eine hostbasierte Authentifizierung durchzuführen, können Sie den von den Clients bereitgestellten Hostnameninformationen vertrauen, indem Sie Folgendes festlegen HostbasedUsesNameFromPacketOnly yes:/etc/ssh/sshd_config:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly yes
  • Alternativ können Sie den SSH-Daemon auch so konfigurieren, dass Hostnamen durch Auflösung der IP-Adressen der Clients mithilfe von in /etc/hostsDateien oder PTR-Einträgen auf dem DNS-Server des Netzwerks gespeicherten Informationen identifiziert werden:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly no
UseDNS yes
# /etc/ssh/shosts.equiv

ssh-client-alpha
ssh-client-bravo
ssh-client-charlie
  • Listen Sie die öffentlichen Schlüssel der autorisierten Hosts in /etc/ssh/ssh_known_hostseiner Datei auf. Eine bequeme Möglichkeit hierfür ist überssh-keyscan:
[root@ssh-server ~]# ssh-keyscan ssh-client-alpha >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-bravo >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-charlie >> /etc/ssh/ssh_known_hosts

Nachdem der OpenSSH-Server so konfiguriert wurde, dass er hostbasierte Authentifizierungsanforderungen akzeptiert, müssen auch die Clients so konfiguriert werden, dass sie eine hostbasierte Authentifizierung anfordern:

# /etc/ssh/ssh_config

Host *
    HostbasedAuthentication yes
    EnableSSHKeySign yes
  • Stellen Sie sicher, dass SUID/SGID Bits inssh-keysignausführbare Datei erteilt Leseberechtigung für die privaten Schlüsseldateien des Hosts:
[root@ssh-client-alpha ~]# find /usr -name ssh-keysign -ls
 16517300    616 -r-xr-sr-x   1  root     ssh_keys   630344 Feb  4 16:01 /usr/libexec/openssh/ssh-keysign

[root@ssh-client-alpha ~]# ls -l /etc/ssh/ssh_host_*key
-rw-r----- 1 root ssh_keys  480 Apr 13 06:51 /etc/ssh/ssh_host_ecdsa_key
-rw-r----- 1 root ssh_keys  387 Apr 13 06:51 /etc/ssh/ssh_host_ed25519_key
-rw-r----- 1 root ssh_keys 2578 Apr 13 06:51 /etc/ssh/ssh_host_rsa_key

verwandte Informationen