Firewall oder /etc/hosts.allow, wenn ssh w / TCP-Wrapper oder / etc / ssh / sshd_config-Dateiregeln kompiliert.
Rui F Ribeiro
mehr als eine Art und Weise beziehen sich auf zu tun, linux.die.net/man/5/sshd_config , die alles in erklärt/etc/ssh/sshd_config
ron
Antworten:
42
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-Dämon (Option 3).
Option 1: Filtern mit IPTABLES
Iptables-Regeln werden bis zur ersten Übereinstimmung nacheinander ausgewertet.
Zum Beispiel, um Datenverkehr vom Netzwerk 192.168.0.0/24 zuzulassen und andernfalls den Datenverkehr zu löschen (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 Netzwerken / Hosts zu entsprechen. Wenn Sie viele Netzwerke oder Hostadressen haben , sollten Sie das ipset- Modul verwenden. Es gibt auch ein iprange- Modul, das die Verwendung eines beliebigen IP-Adressbereichs ermöglicht.
Iptables sind bei Neustarts nicht persistent. Sie müssen einen Mechanismus konfigurieren, um iptables beim Booten wiederherzustellen.
iptablesgilt nur für IPv4-Verkehr. Systeme, bei denen ssh IPv6-Adressen abhört, können die erforderliche Konfiguration vornehmen ip6tables.
Option 2: Verwenden von TCP-Wrappern
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.
Verweigern Sie standardmäßig alle Hosts.
/etc/hosts.deny:
sshd : ALL
Dann liste erlaubte Hosts in hosts.allow auf. Zum Beispiel, um das Netzwerk 192.168.0.0/24 und localhost zuzulassen .
Sie können den ssh-Daemon in sshd_config so konfigurieren, dass abhängig von der Clientadresse / dem Hostnamen unterschiedliche Authentifizierungsmethoden verwendet werden. Wenn Sie nur verhindern möchten, dass andere Hosts eine Verbindung herstellen, sollten Sie stattdessen iptables oder TCP-Wrapper verwenden.
Entfernen Sie zuerst die Standardauthentifizierungsmethoden:
PasswordAuthentication no
PubkeyAuthentication no
Fügen Sie dann nach a Match Addressam Ende der Datei die gewünschten Authentifizierungsmethoden hinzu . Das Platzieren Matcham Ende der Datei ist wichtig, da alle darauf folgenden Konfigurationszeilen bis zur nächsten MatchZeile im bedingten Block stehen . Beispielsweise:
Match Address 127.0.0.*
PubkeyAuthentication yes
Andere Clients können weiterhin eine Verbindung herstellen, die Anmeldung schlägt jedoch fehl, da keine Authentifizierungsmethoden verfügbar sind.
Was ist mit dem Hinzufügen einer ListenAddress-Direktive in / etc / ssh / sshd_config?
Jerome
In bestimmten Situationen (z. B. beim Abhören der privaten Netzwerkadresse) ist dies abhängig von Ihrer Netzwerkkonfiguration und den Hosts, die Sie zulassen möchten.
27.
2
Darüber hinaus kann sshd_config Filterungen mit der AlowUsers-Direktive festlegen, und außerdem können die authorized_keys mit "from IP or subnet" festgelegt werden, um auch zu filtern.
tonioc
@tonioc Tolle Lösung für meinen Anwendungsfall. Bitte erweitern Sie diesen Vorschlag zu einer Antwort.
Simlev
Wenn Sie eine Netzwerkkarte mit 4 Ports haben, die jeweils zu einem anderen Netzwerk wechseln, weist die Standardeinstellung #ListenAddress ::in /etc/ssh/sshd_configden SSH-Server an, eingehende Daten von einem dieser Netzwerke zu akzeptieren. Ansonsten tu ListenAddress <ip address>wo <ip address>ist das von den NIC Ports die du haben willst erlaubt. Meine eth0ist 192.168.3.4daher ListenAddress 192.168.3.4ergibt SSH nur auf Netzwerk 192.168.3.4 arbeiten , die auf eth0 ist; und eth1 eth2 eth3 wird verweigert.
Ron
5
Hier eine zusätzliche Konfiguration für den SSH-Daemon, um die vorherige Antwort zu erweitern:
Benutzerfilterung mit AllowUsersOption in sshd_configDatei hinzufügen:
Dies erlaubt johndoe und admin2 nur von 192.168.1.*Adressen und otherid1 , otherid2 von überall.
Beschränken Sie einen ssh-Schlüssel oder einen ca-basierten Schlüssel auf eine Reihe von Adressen in der .ssh/authorized_keysDatei des Basisverzeichnisses eines bestimmten Benutzers:
/etc/ssh/sshd_config
Antworten:
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-Dämon (Option 3).
Option 1: Filtern mit IPTABLES
Iptables-Regeln werden bis zur ersten Übereinstimmung nacheinander ausgewertet.
Zum Beispiel, um Datenverkehr vom Netzwerk 192.168.0.0/24 zuzulassen und andernfalls den Datenverkehr zu löschen (an Port 22). Die
DROP
Regel ist nicht erforderlich, wenn Ihre iptables-Standardrichtlinie auf konfiguriert istDROP
.Sie können vor der Drop-Regel weitere Regeln hinzufügen, um mehr Netzwerken / Hosts zu entsprechen. Wenn Sie viele Netzwerke oder Hostadressen haben , sollten Sie das ipset- Modul verwenden. Es gibt auch ein iprange- Modul, das die Verwendung eines beliebigen IP-Adressbereichs ermöglicht.
Iptables sind bei Neustarts nicht persistent. Sie müssen einen Mechanismus konfigurieren, um iptables beim Booten wiederherzustellen.
iptables
gilt nur für IPv4-Verkehr. Systeme, bei denen ssh IPv6-Adressen abhört, können die erforderliche Konfiguration vornehmenip6tables
.Option 2: Verwenden von TCP-Wrappern
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.
Verweigern Sie standardmäßig alle Hosts.
/etc/hosts.deny
:Dann liste erlaubte Hosts in hosts.allow auf. Zum Beispiel, um das Netzwerk 192.168.0.0/24 und localhost zuzulassen .
/etc/hosts.allow
:Option 3: Konfiguration des SSH-Dämons
Sie können den ssh-Daemon in sshd_config so konfigurieren, dass abhängig von der Clientadresse / dem Hostnamen unterschiedliche Authentifizierungsmethoden verwendet werden. Wenn Sie nur verhindern möchten, dass andere Hosts eine Verbindung herstellen, sollten Sie stattdessen iptables oder TCP-Wrapper verwenden.
Entfernen Sie zuerst die Standardauthentifizierungsmethoden:
Fügen Sie dann nach a
Match Address
am Ende der Datei die gewünschten Authentifizierungsmethoden hinzu . Das PlatzierenMatch
am Ende der Datei ist wichtig, da alle darauf folgenden Konfigurationszeilen bis zur nächstenMatch
Zeile im bedingten Block stehen . Beispielsweise:Andere Clients können weiterhin eine Verbindung herstellen, die Anmeldung schlägt jedoch fehl, da keine Authentifizierungsmethoden verfügbar sind.
Übereinstimmungsargumente und zulässige bedingte Konfigurationsoptionen sind in der Manpage sshd_config dokumentiert . Übereinstimmungsmuster sind in der Manpage ssh_config dokumentiert .
quelle
#ListenAddress ::
in/etc/ssh/sshd_config
den SSH-Server an, eingehende Daten von einem dieser Netzwerke zu akzeptieren. Ansonsten tuListenAddress <ip address>
wo<ip address>
ist das von den NIC Ports die du haben willst erlaubt. Meineeth0
ist192.168.3.4
daherListenAddress 192.168.3.4
ergibt SSH nur auf Netzwerk 192.168.3.4 arbeiten , die auf eth0 ist; und eth1 eth2 eth3 wird verweigert.Hier eine zusätzliche Konfiguration für den SSH-Daemon, um die vorherige Antwort zu erweitern:
Benutzerfilterung mit
AllowUsers
Option insshd_config
Datei hinzufügen:Dies erlaubt johndoe und admin2 nur von
192.168.1.*
Adressen und otherid1 , otherid2 von überall.Beschränken Sie einen ssh-Schlüssel oder einen ca-basierten Schlüssel auf eine Reihe von Adressen in der
.ssh/authorized_keys
Datei des Basisverzeichnisses eines bestimmten Benutzers:In diesem Beispiel ist der öffentliche Schlüssel für Useralias nur ab angegebenen Adressen wirksam.
quelle