Blockieren Sie den Zugriff eines Benutzers auf das Internet unter Linux

6385
random

Wie kann ich verhindern, dass ein Benutzer unter Linux auf das Internet zugreift?

Ich versuche folgendes:

iptables -A OUTPUT -p tcp --dport 80,443 -m owner --uid-owner $USERNAME -j DROP 

Ist das die richtige Syntax oder der richtige Befehl?

5
Wenn Sie mit -m Besitzer nicht vertraut sind, können Sie wahrscheinlich -p tcp --dport 80,443 entfernen und ALLEN TCP / IP-Zugriff verhindern xenoterracide vor 14 Jahren 0
Wenn Sie die Kontrolle über ihren Zugangspunkt (z. B. Router) haben, können Sie die physischen Adressen des Computers und so weiter blockieren. iglvzx vor 12 Jahren 1
@iglvzx Das würde die gesamte Maschine blockieren und nicht einen bestimmten Benutzer, so wie es aussieht, wurde gefragt. killermist vor 11 Jahren 0

3 Antworten auf die Frage

4
Piskvor

Und dann mache ich ssh myhost.somewhere.onthe.internet.example.com -D 12345meinen Browser, um SOCKS Proxy zu verwenden localhost:12345, und weiter geht es auf meinem lustigen Weg.

Mit anderen Worten, eine schwarze Liste bestimmter Ports ist nicht ausreichend. Sie möchten möglicherweise den gesamten Netzwerkzugriff blockieren :

iptables -A OUTPUT -m owner --uid-owner $USERNAME -j DROP 

Beachten Sie, dass möglicherweise auf bestimmte Netzwerkressourcen (z. B. lokale Netzwerkfreigaben) zugegriffen werden muss. Daher müssen Sie möglicherweise eine Whitelist (oder eine Whitelist des lokalen Netzwerkblocks) durchführen.

0
Etienne Dechamps

Dieser Befehl blockiert nur den Zugriff des Benutzers auf das World Wide Web und nicht das gesamte Internet.

Abgesehen davon sollte es funktionieren, vorausgesetzt, dass es auf der gleichen Maschine $USERNAMEläuft, auf der gearbeitet wird.

Dies gilt nur für Webserver, die auf Standardports ausgeführt werden. Dies ist bei den meisten Webservern der Fall, aber im Allgemeinen kann ein Webserver jeden Port abhören. Daher kann dieser Benutzer einen Remote-Webserver einrichten, der auf einem nicht standardmäßigen Port ausgeführt wird, ein CGI-Proxy-Webskript dort hosten und über das Internet surfen. geek vor 14 Jahren 5
0
Anjalis

Zuerst

iptablesist der richtige Befehl, um die Arbeit zu erledigen. Im Allgemeinen würden Sie jedoch eine vernünftige Anzahl von Befehlen verwenden, um eine vollständige Tabelle einzurichten. Ein Befehl ist eine Alternative zur Tabelle.

Um herauszufinden, welche Tabellen bereits vorhanden sind, und die Standardrichtlinie, wenn keine Regeln übereinstimmen, verwenden Sie diese iptables -L. Normalerweise würde ine ein Bash-Skript schreiben, das alle iptables-Einstellungen enthält. Wo spülen Sie zuerst alle Ketten und setzen dann alles auf einmal ein. Dies soll verhindern, dass Sie den Überblick darüber verlieren, was ein- und ausgeschaltet ist.

Überprüfen Sie auch Ihre Init- Implementierung, ob Init-Skripte verfügbar sind, damit Ihre Änderungen auch nach dem Aus- und Wiedereinschalten erhalten bleiben . (Normalerweise gehen Ihre Tabellen nach dem Neustart verloren).

Erstellen Sie einfach ein Skript, das alle Ihre iptables-Befehle enthält:

#!/bin/bash # Flush all chains iptables -F  #Set defaults policies iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP  # Don't block localhost traffic iptables -A INPUT -i lo -j ACCEPT # Don't re-evaluate already accepted connections iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  #Allowed incomming tcp ports iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # SSH # Add watherver you wish to allow more 

In diesem Artikel finden Sie weitere Tipps zu den Standardregeln für iptable.

Nun, um deine Frage zu beantworten

Zuerst mussten wir sicherstellen, dass eine grundlegende Firewall installiert ist. Jetzt können Sie Ihre Regel zu Ihrem Skript hinzufügen, um wirksam zu werden. Bitte berücksichtigen Sie die Vorschläge aus den anderen Antworten: Ein Benutzer kann zwei gesperrte Ports mit einem Proxy oder alternativen Ports problemlos umgehen.

Außerdem war Ihre Syntax nicht korrekt. --dport kann nur einen Port verwenden. Dazu müssen Sie das Multi-Port- Modul verwenden oder mehrere Regeln verketten.

Das Blockieren aller ausgehenden Verbindungen für diesen Benutzer führt jedoch dazu, dass viele Anwendungen fehlschlagen, da sie von der lokalen Verbindung unter localhost oder 127.0.0.1 abhängen . (Wenn Sie beispielsweise KDM / KDE verwenden, wird Ihr System während der Anmeldung blockiert.)

So müssen Sie das ausschließen lo Netzwerk - Schnittstelle von Ihrer Regel. Wenn Sie dem Benutzer immer noch Zugriff auf bestimmte Dienste gewähren möchten, erstellen Sie einfach eine Regel vor der DROP-Regel, die diese Ports zulässt . Ich würde folgendes vorschlagen:

# Don't re-evaluate already ACCEPTed connections: iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  # Allow an outgoing connection, like SSH iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner $USERNAME -j ACCEPT  # Drop anything else that not on localhost iptables -A OUTPUT ! -o lo -m owner --uid-owner $USERNAME -j DROP