Come limitare l'accesso dell'utente a Internet per intervalli di tempo?


12

Voglio che uno degli utenti (non nell'elenco dei sudoers) abbia accesso a Internet dalle 14:00 alle 16:00 e dalle 17:00 alle 18:30. È possibile? Posso impostare intervalli di tempo diversi per giorni della settimana diversi?


Faresti meglio a farlo a livello di controllo di router o gateway, piuttosto che a livello del sistema stesso ... per quanto ne so, in Ubuntu non esiste un sistema semplice per limitare l'accesso a Internet a livello di utente.
Thomas Ward

Quando lo farò a livello di router, allora tutti gli utenti saranno limitati ...
Cupakob

Afaik (e ho cercato una soluzione a questo dal 9.04), non ci sono soluzioni software per questo. Certo, sulle mie reti, c'è solo un utente per computer, e tutti si collegano tramite un server box che funge da gateway. Quella casella ha un crontab che blocca tutti gli accessi a Internet su quel sistema, quindi lo rimuove in un secondo momento; successivamente funziona anche in orari diversi ogni giorno. Per curiosità, perché è necessario limitare l'accesso a tale periodo di tempo rigoroso e perché è necessario farlo dall'utente?
Thomas Ward

ne ho bisogno dall'utente, perché un PC viene utilizzato da due utenti. e voglio limitare l'accesso, perché il secondo utente deve imparare molto di più e non rimanere su Facebook :) ma la tua idea con crontab è buona .... cosa stai usando per bloccare l'accesso? Posso fare lo stesso per l'utente, quando blocco il router :)
Cupakob,

Il mio router e la mia casella gateway sono separati - poiché la casella gateway assegna un indirizzo statico (e quindi gestisce i dati) dalle altre caselle, utilizzo iptables per bloccare l'indirizzo IP privato assegnato statico dall'invio di dati in uscita o in entrata, che quindi blocca TUTTO il traffico Internet verso la casella. Ognuno dei crontab utilizza il proprio comando iptables per rimuovere gli elementi in base a una pianificazione. È un sistema imperfetto, perché potrei semplicemente acquistare un router che funzioni meglio: P
Thomas Ward

Risposte:


7

Puoi usare l' ownerestensione di iptables per impedire a un utente di accedere alla rete, ad esempio

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

Ora puoi usare cron per aggiungere o rimuovere quelle regole (che potrebbero richiedere un po 'di scripting della shell se hai già alcune regole iptable o vuoi che lo facciano per utenti diversi in momenti diversi).


Ooh, non sapevo che esistesse: P @Florian: (a) quali moduli del kernel devono essere caricati per questo? (b) funziona con -j REJECT --reject-with <argument>?
Thomas Ward

(a) xt_owner viene caricato automaticamente. (b) Non vedo alcun motivo per cui --reject-with non dovrebbe funzionare con questo ma non lo abbia mai provato.
Florian Diesch,

Lo proverò più avanti: P Il modulo proprietario esiste nelle manpage di iptables, per dettagliarne l'utilizzo? (Nota a margine: ho chiesto quale modulo del kernel perché il mio kernel è compilato in modo personalizzato: /)
Thomas Ward

sembra esattamente quello che sto cercando .... devo provarlo :)
cupakob

@EvilPhoenix: Sì, è documentato nella manpage di iptables
Florian Diesch,

8
  1. accedi come root:

    sudo su

  2. controlla lo stato del tuo firewall:

    ufw status
    

    se il firewall è inattivo , emettere:

    ufw enable
    
  3. al fine di limitare l' accesso a Internet di Wilhelm dell'utente la domenica, il martedì, il mercoledì e il venerdì agli intervalli di tempo consentiti (14: 00-16: 00 e 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 
    

    nota a margine : * si prega di notare l'uso di -Iswitch anziché -Aswitch del iptablescomando. lo -Iswitch inserisce le regole di cui sopra (3.) all'inizio (in alto) della catena di regole OUTPUT anziché nella parte inferiore della catena. posizionare le regole aggiunte manualmente in cima alle normali politiche del firewall è importante poiché le regole vengono elaborate dall'alto verso il basso. se la maggior parte delle regole ACCETTA un pacchetto, la catena, OUTPUT, non viene più controllata per le seguenti regole che potrebbero aver DROPped il pacchetto.

  4. assicurati che le regole siano state effettivamente inserite correttamente:

    iptables -L OUTPUT
    

    al fine di eliminare una regola inadeguato, dire (conteggio 1-based dalla parte superiore della regola n ° 1, iptables -v -L OUTPUT) problema: iptables -D OUTPUT 1.

  5. salva iptables per il ripristino al prossimo avvio:

    iptables-save > /etc/iptables.rules
    
  6. in /etc/rc.localappend la riga:

    iptables-restore < /etc/iptables.rules
    

fatto

-

testato su Ubuntu 11.10 (onirico), locale: lui


1
Ottima risposta con una soluzione perfetta! Ma nota che tutti i tempi sono interpretati come UTC , quindi potrebbe essere necessario compensarli manualmente per l'ora locale - nel mio caso central european summer time -2 hours.
Precise Penguin

Ho fatto tutti i passaggi e hanno funzionato (l'accesso a Internet era limitato) ma dopo il riavvio, Internet era di nuovo attivo. Ho controllato iptables -L OUTPUT e non ho trovato le regole che ho aggiunto ...
Lawand

1
Qual è il motivo per cui stai abilitando ufwanche se in seguito lo utilizzerai iptables?
balu,

@PrecisePenguin che può essere risolto con l' --kerneltzopzione ("Usa il fuso orario del kernel anziché UTC")
waldyrious
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.