So beschränken Sie den Internetzugang für einen bestimmten Benutzer im LAN mithilfe von iptables unter Linux


11

Angenommen, es gibt zwei Benutzer im LAN, A und B. Wie kann ich Benutzer A mithilfe von iptables-Regeln vom Internetzugang abhalten und die Regeln speichern, damit sie nach dem Neustart weiterhin wirksam sind? Angenommen, ich möchte diesem Benutzer irgendwann Zugriff gewähren. Wie aktiviere ich es wieder? Ich benutze Ubuntu Linux 10.04. Es wäre schön, wenn mir jemand über die Befehlszeile zeigen würde, wie es geht, da ich mich oft mit einem lokalen SSH-Login am Computer anmelde.

Antworten:


17

Ich gehe davon aus, dass Benutzer A und B dieselben Linux-Computer verwenden, auf denen Sie der Administrator sind. (Aus Ihrer Frage geht nicht ganz klar hervor. Wenn A und B über eigene Computer verfügen, auf denen sie Administratoren sind, ist dies ein völlig anderes Problem.)

Der folgende Befehl verhindert, dass der Benutzer mit der UID 1234 Pakete auf der Schnittstelle sendet eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Ich empfehle, das Ubuntu iptables-Handbuch zu lesen , um sich mit dem Tool vertraut zu machen (und auf der Manpage finden Sie erweiterte Informationen wie die Mangle-Tabelle).

Der Benutzer kann weiterhin Ping ausführen (da es sich um setuid root handelt), aber sonst nichts. Der Benutzer kann weiterhin eine Verbindung zu einem lokalen Proxy herstellen, wenn dieser Proxy von einem anderen Benutzer gestartet wurde.

Fügen Sie -Dden obigen Befehl hinzu , um diese Regel zu entfernen .

Um die Regel dauerhaft zu machen, fügen Sie sie hinzu /etc/network/if-up.d/my-user-restrictions(machen Sie das zu einem ausführbaren Skript, das mit beginnt #!/bin/sh). Oder verwenden Sie iptables-save( weitere Informationen finden Sie im Ubuntu iptables-Handbuch ).


Vielen Dank. Und ja, Ihre Annahmen sind wahr. Basierend auf Ihrer Antwort und dem erwähnten Ubuntu-Leitfaden ist dies die richtige Vorgehensweise, wenn ich dem eingeschränkten Benutzer auch SSH-Zugriff gewähren möchte (manchmal möchte ich mich mit seinem Konto über SSH anmelden): iptables -t mangle -A OUTPUT - o eth0 -m Besitzer --uid-Besitzer 1234 -p tcp --dport ssh -j AKZEPTIEREN iptables -t mangle -A OUTPUT -o eth0 -m Besitzer --uid-Besitzer 1234 -j DROP Ich habe diese Regeln so gesetzt, wie sie sind Die erwähnte Datei und die Dinge scheinen gut zu funktionieren.
Marwan Tanager

@ Marwan Ich denke das ist richtig. Beachten Sie, dass Sie, wenn Sie den SSH-Zugriff zulassen, so ziemlich alles zulassen, da SSH andere Protokolle trivial tunneln kann.
Gilles 'SO - hör auf böse zu sein'

0

Ich würde dafür keine iptables verwenden.

Ich gehe davon aus, dass A und B den festen IPs ClientA und ClientB zugeordnet sind. Ich gehe davon aus, dass Ihr Internet-Proxy ServerI ist (Ihr Ubuntu-Server?).

Daher würde ich einen Verweigerungs- / Lösch-Routing-Eintrag von ClientA zu ServerI hinzufügen.

Ich verwende Ubuntu nicht - daher kann ich Ihnen nicht sagen, welche Konfigurationsdatei verwendet werden soll, um diese Einstellung dauerhaft zu machen (nach einem Neustart).

Vielleicht kann jemand dieses Detail hinzufügen?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.