Wie ermöglichen wir den Zugriff bestimmter privater IP-Adressen per SSH-Anmeldung (RSA-Schlüsselpaar) auf den Linux-Server?
Antwort1
Sie können einschränken, welche Hosts eine Verbindung herstellen können, indem SieTCP-Wrapper oder Filterung des Netzwerkverkehrs (Firewalling) durchiptablesWenn Sie je nach Client-IP-Adresse unterschiedliche Authentifizierungsmethoden verwenden möchten, konfigurieren Sie stattdessen einen SSH-Daemon (Option 3).
Option 1: Filtern mit IPTABLES
Iptables-Regeln werden der Reihe nach ausgewertet, bis die erste Übereinstimmung vorliegt.
Beispielsweise um Datenverkehr vom Netzwerk 192.168.0.0/24 zuzulassen und den Datenverkehr andernfalls zu verwerfen (an Port 22). Die DROP
Regel ist nicht erforderlich, wenn Ihre iptables-Standardrichtlinie auf konfiguriert ist DROP
.
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 SieipsetModul. Es gibt auchIP-BereichModul, das die Verwendung beliebiger IP-Adressbereiche ermöglicht.
Iptables bleiben nach Neustarts nicht persistent. Sie müssen einen Mechanismus konfigurieren, um Iptables beim Booten wiederherzustellen.
iptables
gilt nur für IPv4-Verkehr. Bei Systemen, die SSH verwenden, das auf IPv6-Adressen lauscht, kann die erforderliche Konfiguration mit durchgeführt werden ip6tables
.
Option 2: Verwenden von TCP-Wrappern
Hinweis: Dies ist möglicherweise keine Option für moderne Distributionen, da die Unterstützung für TCPWrapper entfernt wurde ausOpenSSH 6.7
Sie können auch konfigurieren, welche Hosts eine Verbindung über TCP-Wrapper herstellen können. Mit TCP-Wrappern können Sie in Regeln neben IP-Adressen auch Hostnamen verwenden.
Standardmäßig werden alle Hosts abgelehnt.
/etc/hosts.deny
:
sshd : ALL
Listen Sie dann die erlaubten Hosts in hosts.allow auf. Um beispielsweise Netzwerkzugriffe zu erlauben,192.168.0.0/24Undlokaler Host.
/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 so konfigurieren, dass er je nach Clientadresse/Hostname unterschiedliche Authentifizierungsmethoden verwendet. Wenn Sie nur die Verbindung anderer Hosts blockieren möchten, 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
am Ende der Datei hinzu. Die Platzierung Match
am Ende der Datei ist wichtig, da alle darauf folgenden Konfigurationszeilen bis zur nächsten Match
Zeile im Bedingungsblock platziert werden. Beispiel:
Match Address 127.0.0.*
PubkeyAuthentication yes
Andere Clients können zwar noch eine Verbindung herstellen, die Anmeldung schlägt jedoch fehl, da keine Authentifizierungsmethoden verfügbar sind.
Übereinstimmungsargumente und zulässige bedingte Konfigurationsoptionen sind dokumentiert in sshd_config - ManpageÜbereinstimmungsmuster werden dokumentiert inssh_config - Manpage.
Antwort2
Hier einige zusätzliche Konfigurationen für den SSH-Daemon, um die vorherige Antwort zu erweitern:
Benutzerfilterung mit
AllowUsers
Option insshd_config
Datei hinzufügen:AllowUsers [email protected].* [email protected].* otherid1 otherid2
Dies erlaubtJohn DoeUndAdministrator2nur von
192.168.1.*
Adressen undandereID1,andereID2von überall.Beschränken Sie einen SSH-Schlüssel oder einen CA-basierten Schlüssel auf eine Reihe von Adressen in einer
.ssh/authorized_keys
Datei im Home-Verzeichnis 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 angegebenen Adressen aus wirksam.
Antwort3
Wenn Ihnen die Installation von UFW (Uncomplicated FireWall) nichts ausmacht:
sudo ufw allow from 192.168.1.0/24 to any port 22
Bearbeiten: Wie bereits erwähnt, ist es eine gute Praxis, nur mit Schlüsseln statt mit Passwörtern zu authentifizieren, was durch Bearbeiten erfolgen kann/etc/ssh/sshd_config
:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Antwort4
Wenn Sie SSH CA zur Client-Authentifizierung verwenden, können Sie source-address
beim Signieren von Zertifikaten die Option angeben:
ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Das Zertifikat id_rsa-cert.pub
kann nur zum Anmelden bei Hosts von 172.16.0.0/16
Adressen aus verwendet werden (nicht einmal 127.0.0.1
, wenn Sie dies nicht ebenfalls angeben).
man 1 ssh-keygen
ist ein gutes Dokument, wenn Sie weitere Einzelheiten wünschen.