Beschränken Sie den SSH-Zugriff auf bestimmte Clients anhand der IP-Adresse

Beschränken Sie den SSH-Zugriff auf bestimmte Clients anhand der IP-Adresse

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 DROPRegel 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.

iptablesgilt 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 Addressam Ende der Datei hinzu. Die Platzierung Matcham Ende der Datei ist wichtig, da alle darauf folgenden Konfigurationszeilen bis zur nächsten MatchZeile 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 AllowUsersOption in sshd_configDatei 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_keysDatei 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-addressbeim 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.pubkann nur zum Anmelden bei Hosts von 172.16.0.0/16Adressen aus verwendet werden (nicht einmal 127.0.0.1, wenn Sie dies nicht ebenfalls angeben).

man 1 ssh-keygenist ein gutes Dokument, wenn Sie weitere Einzelheiten wünschen.

verwandte Informationen