TCP-Wrapper ist ein hostbasiertes Open-Source-ACL-System (Access Control List), das verwendet wird, um die TCP-Netzwerkdienste basierend auf dem Hostnamen, der IP-Adresse, der Netzwerkadresse usw. einzuschränken. Es entscheidet, welcher Host auf einen bestimmten Netzwerkdienst zugreifen darf. TCP Wrapper wurde von einem holländischen Programmierer und Physiker Wietse Zweitze Venema entwickelt 1990 an der Technischen Universität Eindhoven. Er pflegte es bis 1995 und veröffentlichte es dann 2001 unter der BSD-Lizenz. In dieser kurzen Anleitung werde ich erklären, wie man den Zugriff auf Linux-Server mit Hilfe von TCP-Wrappern einschränkt.
Bitte beachten Sie, dass TCP Wrapper kein vollständiger Ersatz für eine richtig konfigurierte Firewall ist . Es ist nur eine wertvolle Ergänzung, um die Sicherheit Ihres Linux-Servers zu verbessern. Es wird empfohlen, es in Verbindung mit einer vollständig konfigurierten Firewall und anderen Sicherheitsmechanismen und -tools zu verwenden.
TCP-Wrapper installieren
TCP Wrappers ist in den offiziellen Repositories der meisten Linux-Betriebssysteme verfügbar.
Abhängig von der von Ihnen verwendeten Linux-Distribution kann sie wie unten gezeigt installiert werden.
Auf Arch-basierten Systemen:
$ sudo pacman -S tcp_wrappers
Auf YUM-basierten Systemen:
$ sudo yum install tcp_wrappers
Auf APT-basierten Systemen:
$ sudo apt-get install tcp_wrappers
Auf SUSE/openSUSE-Systemen:
$ sudo zypper in tcp_wrappers
Beschränken Sie den Zugriff auf Linux-Server mithilfe von TCP-Wrappern
Konfiguration
TCP Wrappers implementiert die Zugriffskontrolle mit Hilfe von zwei Konfigurationsdateien:/etc/hosts.allow und /etc/hosts.deny . Diese beiden Zugriffskontrolllistendateien entscheiden, ob bestimmte Clients auf Ihren Linux-Server zugreifen dürfen oder nicht.
Die /etc/hosts.allow-Datei
Diese Datei enthält die Liste der erlaubten oder nicht erlaubten Hosts oder Netzwerke. Das bedeutet, dass wir Verbindungen zu Netzwerkdiensten sowohl zulassen als auch verweigern können, indem wir Zugriffsregeln in dieser Datei definieren.
Die Datei /etc/hosts.deny
Diese Datei enthält die Liste der Hosts oder Netzwerke, die nicht auf Ihren Linux-Server zugreifen dürfen. Die Zugriffsregeln in dieser Datei können auch in /etc/hosts.allow mit einem 'deny' eingerichtet werden Option.
Die typische Syntax zum Definieren einer Zugriffsregel lautet:
daemon_list : client_list : option : option ...
Wo,
- daemon_list - Der Name eines Netzwerkdienstes wie SSH, FTP, Portmap etc.
- clients_list - Die durch Kommas getrennte Liste gültiger Hostnamen, IP-Adressen oder Netzwerkadressen.
- Optionen - Eine optionale Aktion, die angibt, was getan werden soll, wenn eine Regel zutrifft.
Die Syntax ist für beide Dateien gleich.
Regeln zum Merken
Bevor Sie TCP-Wrapper verwenden, müssen Sie die folgenden wichtigen Regeln kennen. Bitte beachten Sie, dass der TCP Wrapper nur diese beiden Dateien (hosts.allow und hosts.deny) konsultiert.
- Die Zugriffsregeln in der Datei /etc/hosts.allow werden zuerst angewendet. Sie haben Vorrang vor Regeln in der Datei /etc/hosts.deny. Wenn also der Zugriff auf einen Dienst in /etc/hosts.allow erlaubt ist Datei und eine Regel, die den Zugriff auf denselben Dienst in /etc/hosts.deny verweigert wird ignoriert.
- Nur eine Regel pro Dienst ist in beiden Dateien erlaubt (hosts.allow und hosts.deny).
- Die Reihenfolge der Regeln ist sehr wichtig. Nur die erste Übereinstimmungsregel für einen bestimmten Dienst wird berücksichtigt. Gleiches gilt für beide Dateien.
- Wenn in keiner der Dateien übereinstimmende Regeln für einen Dienst vorhanden sind oder keine Datei vorhanden ist, wird allen Remote-Hosts der Zugriff auf den Dienst gewährt.
- Alle Änderungen in beiden Dateien werden sofort wirksam, ohne dass die Netzwerkdienste neu gestartet werden müssen.
Der empfohlene Ansatz zur Sicherung Ihres Servers
Im Allgemeinen besteht die beste Vorgehensweise zum Sichern eines Linux-Servers darin, alle eingehenden Verbindungen zu blockieren und nur einige wenige bestimmte Hosts oder Netzwerke zuzulassen. Bearbeiten Sie dazu /etc/hosts.deny Datei:
$ sudo vi /etc/hosts.deny
Fügen Sie die folgende Zeile hinzu. Diese Leitung verweigert Verbindungen zu ALLEN Diensten und ALLEN Netzwerken.
ALL: ALL
Bearbeiten Sie dann /etc/hosts.allow Datei:
$ sudo vi /etc/hosts.allow
und erlauben Sie die spezifischen Hosts oder Netzwerke Ihrer Wahl.
sshd: 192.168.43.192 192.168.43.193
Außerdem können Sie gültige Hostnamen anstelle der IP-Adresse angeben, wie unten gezeigt.
sshd: server1.ostechnix.lan server2.ostechnx.lan
Alternativ können Sie dasselbe tun, indem Sie alle Regeln (sowohl erlauben als auch verweigern) in der Datei /etc/hosts.allow selbst definieren.
Bearbeiten Sie /etc/hosts.allow Datei und fügen Sie die folgenden Zeilen hinzu.
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
Sie müssen keine Regel in /etc/hosts.deny angeben Datei.
Gemäß obiger Regel werden alle eingehenden Verbindungen für alle Hosts außer den beiden Hosts 192.168.43.192, 192.168.43.193 abgelehnt.
Versuchen Sie nun, von allen Hosts außer den oben genannten Hosts eine SSH-Verbindung zu Ihrem Linux-Server herzustellen. Sie erhalten die folgende Fehlermeldung.
ssh_exchange_identification: read: Connection reset by peer
Sie können dies anhand der Protokolldateien Ihres Linux-Servers überprüfen, wie unten gezeigt.
$ cat /var/log/secure
Beispielausgabe:
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
Ebenso können Sie Regeln für andere Dienste, zB vsftpd, in /etc/hosts.allow definieren Datei wie unten gezeigt.
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
Auch hier brauchen Sie keine Regeln in /etc/hosts.deny zu definieren Datei. Gemäß der obigen Regel darf ein Remote-Host mit der IP-Adresse 192.168.43.192 über FTP auf den Linux-Server zugreifen. Alle anderen Hosts werden abgelehnt.
Außerdem können Sie die Zugriffsregeln in verschiedenen Formaten in der Datei /etc/hosts.allow definieren, wie unten gezeigt.
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
Alle Hosts außer einem bestimmten Host zulassen
Sie können eingehende Verbindungen von allen Hosts zulassen, jedoch nicht von einem bestimmten Host. Sagen wir zum Beispiel, eingehende Verbindungen von allen Hosts in 192.168.43 zuzulassen Subnetz, aber nicht vom Host 192.168.43.192 , fügen Sie die folgende Zeile in /etc/hosts.allow hinzu Datei.
ALL: 192.168.43. EXCEPT 192.168.43.192
Im obigen Fall müssen Sie keine Regeln in der Datei /etc/hosts.deny hinzufügen.
Oder Sie können den Hostnamen anstelle der IP-Adresse angeben, wie unten gezeigt.
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
Weitere Einzelheiten finden Sie in den Manpages.
$ man tcpd
Lesen Sie auch:
- SSH-Zugriff für einen bestimmten Benutzer oder eine bestimmte Gruppe in Linux zulassen oder verweigern
- Begrenzen Sie die Anzahl der SSH-Anmeldungen pro Benutzer/Gruppe/System
Lassen Sie uns noch einmal nicht vergessen, dass TCP Wrapper kein Ersatz für eine Firewall ist. Es sollte in Verbindung mit Firewalls und anderen Sicherheitstools verwendet werden.