Wie kann der Zugriff des Benutzers auf das Internet für bestimmte Zeitintervalle eingeschränkt werden?

12

Ich möchte, dass einer der Benutzer (nicht in der Sudoers-Liste) von 14:00 bis 16:00 Uhr und von 17:00 bis 18:30 Uhr über einen Internetzugang verfügt. Ist es möglich? Kann ich verschiedene Zeitintervalle für verschiedene Wochentage einstellen?

Cupakob
quelle
Sie tun dies am besten auf Router- oder Gateway-Steuerungsebene und nicht auf dem System selbst. Soweit ich weiß, gibt es in Ubuntu kein einfaches System, um den Internetzugang auf Benutzerebene einzuschränken.
Thomas Ward
Wenn ich es auf Router-Ebene schaffe, werden alle Benutzer eingeschränkt ...
Cupakob
Afaik (und ich habe seit 9.04 nach einer Lösung dafür gesucht), dafür gibt es keine Softwarelösungen. Zugegeben, auf meinen Netzen gibt es nur einen Benutzer pro Computer, und alle stellen eine Verbindung über eine Serverbox her, die als Gateway fungiert. Diese Box verfügt über eine Crontab, die den gesamten Internetzugang auf diesem System blockiert und zu einem späteren Zeitpunkt entfernt. anschließend läuft es auch jeden Tag zu unterschiedlichen Zeiten. Warum müssen Sie aus Neugier den Zugriff auf diesen strengen Zeitraum beschränken und warum müssen Sie dies vom Benutzer tun?
Thomas Ward
Ich brauche es vom Benutzer, weil ein PC von zwei Benutzern verwendet wird. und ich möchte den zugang einschränken, weil der zweite benutzer viel mehr lernen muss und nicht auf facebook bleiben soll :) aber deine idee mit der crontab ist gut .... was benutzt du um den zugang zu blockieren? Ich kann das gleiche für den Benutzer machen, wenn ich den Router blockiere :)
cupakob
Mein Router und meine Gateway-Box sind getrennt. Da die Gateway-Box eine statische Adresse (und damit die Daten) von den anderen Boxen zuweist, verwende ich iptables, um zu verhindern, dass die statisch zugewiesene private IP-Adresse ausgehende oder eingehende Daten sendet blockiert den gesamten Internetverkehr zur Box. Die Crontabs verwenden jeweils ihren eigenen Befehl iptables, um Elemente in einem Zeitplan zu entfernen. Es ist ein unvollkommenes System, weil ich einfach einen Router kaufen könnte, der besser funktioniert: P
Thomas Ward

Antworten:

7

Sie können die ownerErweiterung von iptables verwenden , um einen Benutzer daran zu hindern, auf das Netz zuzugreifen

 sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT

Jetzt können Sie cron verwenden, um diese Regeln hinzuzufügen oder zu entfernen (was möglicherweise ein wenig Shell-Scripting erfordert, wenn Sie bereits einige iptable-Regeln haben oder dies für verschiedene Benutzer zu unterschiedlichen Zeiten möchten).

Florian Diesch
quelle
Ooh, ich wusste nicht, dass es das gibt: P @Florian: (a) Welche Kernelmodule müssen dafür geladen werden? (b) funktioniert das mit -j REJECT --reject-with <argument>?
Thomas Ward
(a) xt_owner wird automatisch geladen. (b) Ich sehe keinen Grund, warum --reject-with damit nicht funktionieren sollte, es aber nie versucht hat.
Florian Diesch
Ich werde dies später testen: P Existiert das Besitzermodul in den iptables-Manpages, um seine Verwendung detailliert zu beschreiben? (Randnotiz: Ich fragte, welches Kernelmodul, weil mein Kernel benutzerdefiniert kompiliert wurde: /)
Thomas Ward
sieht genau so aus, wie ich es suche .... ich muss es versuchen :)
cupakob
@ EvilPhoenix: Ja, es ist in der iptables Manpage dokumentiert
Florian Diesch
8
  1. Login als root:

    sudo su

  2. Überprüfen Sie den Status Ihrer Firewall:

    ufw status
    

    Wenn die Firewall inaktiv ist , gehen Sie wie folgt vor :

    ufw enable
    
  3. um Benutzer zu beschränken Wilhelm - Internetzugang auf Sonntag, Dienstag, Mittwoch und Freitag , um die zulässigen Zeitintervalle (14: 00-16: 00 & 17: 00-18: 30):

    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 00:00:01 --timestop 14:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 16:00:00 --timestop 17:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 18:30:00 --timestop 23:59:59 -j DROP 
    

    Randnotiz : * Bitte beachten Sie die Verwendung des -ISchalters anstelle des -ASchalters des iptablesBefehls. Der -ISchalter fügt die oben genannten Regeln (3.) am Anfang (oben) der OUTPUT-Regelkette und nicht am Ende der Kette ein. Das Platzieren der manuell angehängten Regeln über den regulären Firewall-Richtlinien ist wichtig, da Regeln von oben nach unten verarbeitet werden. Wenn die obersten Regeln ein Paket AKZEPTIEREN, wird die Kette OUTPUT nicht mehr auf die folgenden Regeln überprüft, die das Paket möglicherweise fallen gelassen haben.

  4. Bitte stellen Sie sicher, dass die Regeln tatsächlich korrekt eingegeben wurden:

    iptables -L OUTPUT
    

    Um eine unangemessene Regel zu löschen, sagen Sie Regel Nr. 1 (1-basierte Anzahl von oben iptables -v -L OUTPUT) iptables -D OUTPUT 1.

  5. Speichern Sie iptables für die Wiederherstellung beim nächsten Start:

    iptables-save > /etc/iptables.rules
    
  6. in /etc/rc.localdie Zeile anhängen:

    iptables-restore < /etc/iptables.rules
    

erledigt

- -

getestet auf Ubuntu 11.10 (oneiric), Gebietsschema: he

user56231
quelle
1
Tolle Antwort mit einer perfekten Lösung! Beachten Sie jedoch, dass alle Zeiten als UTC interpretiert werden , sodass sie möglicherweise manuell für die Ortszeit versetzt werden müssen - in meinem Fall central european summer time -2 hours.
Präziser Pinguin
Ich habe alle Schritte ausgeführt und sie haben funktioniert (der Internetzugang war eingeschränkt), aber nach dem Neustart war das Internet wieder verfügbar. Ich habe iptables -L OUTPUT überprüft und die von mir hinzugefügten Regeln nicht gefunden ...
Lawand
1
Was ist der Grund, warum Sie aktivieren ufw, obwohl Sie später verwenden iptables?
Balu
@PrecisePenguin, der mit der --kerneltzOption ("Verwenden Sie die Kernel-Zeitzone anstelle von UTC")
behoben werden kann