GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

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 in sshd_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.


Linux
  1. Posix Find auf bestimmte Tiefe beschränken?

  2. Ssh – Ssh-Zugriffsversuche protokollieren?

  3. Wie man in ein bestimmtes Verzeichnis ssh?

  4. Beenden Sie alle Prozesse eines bestimmten Benutzers über SSH

  5. Beschränken Sie die SSH-Anmeldung auf eine bestimmte IP oder einen bestimmten Host

Wie können wir den SSH-Zugriff mit UFW unter Linux Mint 20 einschränken

So deaktivieren Sie die SSH-Anmeldung für einen bestimmten Benutzer in Linux

Betrieb von zwei SSH-Servern

Wie man iptables oder tc verwendet, um Pakete pro Client zu begrenzen.

Zugriff nur über SSH-Tunneling

Beschränken Sie den passwortbasierten SSH-Zugriff pro Benutzer, erlauben Sie jedoch die Schlüsselauthentifizierung