Sie können einschränken, welche Hosts eine Verbindung herstellen können, indem Sie TCP-Wrapper konfigurieren oder den Netzwerkverkehr (Firewalling) mithilfe von iptables filtern. Wenn Sie abhängig von der Client-IP-Adresse unterschiedliche Authentifizierungsmethoden verwenden möchten, konfigurieren Sie stattdessen den SSH-Daemon (Option 3).
Option 1:Filtern mit IPTABLES
Iptables-Regeln werden der Reihe nach ausgewertet, bis zum ersten Treffer.
Zum Beispiel, um Datenverkehr vom Netzwerk 192.168.0.0/24 zuzulassen und ansonsten den Datenverkehr zu verwerfen (an Port 22). Der DROP
Regel ist nicht erforderlich, wenn Ihre iptables-Standardrichtlinie auf DROP
konfiguriert ist .
iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Sie können vor der Drop-Regel weitere Regeln hinzufügen, um mehr Netzwerke/Hosts abzugleichen. Wenn Sie viele Netzwerke oder Hostadressen haben, sollten Sie ipset verwenden Modul. Es gibt auch iprange Modul, das die Verwendung eines beliebigen Bereichs von IP-Adressen ermöglicht.
Iptables sind über Neustarts hinweg nicht persistent. Sie müssen einen Mechanismus konfigurieren, um iptables beim Booten wiederherzustellen.
iptables
gelten nur für IPv4-Datenverkehr. Bei Systemen, die ssh auf IPv6-Adressen hören, kann die notwendige Konfiguration mit ip6tables
durchgeführt werden .
Option 2:Verwenden von TCP-Wrappern
Hinweis:Dies ist möglicherweise keine Option für moderne Distributionen, da die Unterstützung für tcpwrappers aus OpenSSH 6.7 entfernt wurde
Sie können auch konfigurieren, welche Hosts mithilfe von TCP-Wrappern eine Verbindung herstellen können. Mit TCP-Wrappern können Sie neben IP-Adressen auch Hostnamen in Regeln verwenden.
Standardmäßig alle Hosts ablehnen.
/etc/hosts.deny
:
sshd : ALL
Listen Sie dann die zulässigen Hosts in hosts.allow auf. Zum Beispiel, um das Netzwerk 192.168.0.0/24 zuzulassen und localhost .
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
Option 3:SSH-Daemon-Konfiguration
Sie können den ssh-Daemon in sshd_config konfigurieren, um je nach Client-Adresse/Hostname unterschiedliche Authentifizierungsmethoden zu verwenden. Wenn Sie nur andere Hosts daran hindern möchten, sich zu verbinden, sollten Sie stattdessen iptables oder TCP-Wrapper verwenden.
Entfernen Sie zuerst die Standardauthentifizierungsmethoden:
PasswordAuthentication no
PubkeyAuthentication no
Fügen Sie dann die gewünschten Authentifizierungsmethoden nach einem Match Address
hinzu am Ende der Datei. Platziere Match
am Ende der Datei ist wichtig, da alle nachfolgenden Konfigurationszeilen bis zum nächsten Match
innerhalb des Bedingungsblocks platziert werden Linie. Zum Beispiel:
Match Address 127.0.0.*
PubkeyAuthentication yes
Andere Clients können weiterhin eine Verbindung herstellen, aber die Anmeldung schlägt fehl, da keine Authentifizierungsmethoden verfügbar sind.
Übereinstimmungsargumente und zulässige bedingte Konfigurationsoptionen sind auf der Manpage sshd_config dokumentiert. Übereinstimmungsmuster sind in der Manpage ssh_config dokumentiert.
Hier einige zusätzliche Konfigurationen für den SSH-Daemon, um die vorherige Antwort zu erweitern:
-
Fügen Sie die Benutzerfilterung mit
AllowUsers
hinzu Option insshd_config
Datei:AllowUsers [email protected]* [email protected]* otherid1 otherid2
Dies ermöglicht johndoe und admin2 nur ab
192.168.1.*
Adressen und otherid1 , otherid2 von überall. -
Beschränken Sie einen ssh-Schlüssel oder einen ca-basierten Schlüssel auf einen Satz von Adressen in
.ssh/authorized_keys
Datei des Heimatverzeichnisses eines bestimmten Benutzers:from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
In diesem Beispiel ist der öffentliche Schlüssel für den Benutzeralias nur von bestimmten Adressen aus wirksam.