Як обмежити доступ користувача до Інтернету на часові інтервали?


12

Я хочу, щоб хтось із користувачів (не в списку sudoers) отримав доступ до Інтернету з 14:00 до 16:00 та з 17:00 до 18:30. Це можливо? Чи можна встановити різні часові інтервали для різних тижневих днів?


Вам краще за все це робити на рівні керування маршрутизатором або шлюзом, а не на самій системі ... наскільки я знаю, в Ubuntu немає простої системи, яка обмежувала б доступ до Інтернету на рівні користувача.
Thomas Ward

Коли я
встигаю

Afaik (і я шукав рішення для цього з 9.04), програмного рішення для цього немає. Зрозуміло, в моїх мережах є лише один користувач на комп'ютер, і всі вони підключаються через серверний ящик, який виступає шлюзом. У цьому вікні є кронтаб, який блокує весь доступ до Інтернету в цій системі, а потім видаляє його згодом; згодом він також працює в різний час кожного дня. З цікавості, чому вам потрібно обмежувати доступ до цього строгого періоду часу і чому це потрібно робити користувачеві?
Thomas Ward

мені це потрібно користувачеві, тому що один ПК використовується двома користувачами. і я хочу обмежити доступ, тому що другий користувач повинен дізнатися набагато більше, а не залишатися у фейсбуці :), але ваша ідея із crontab хороша .... що ви використовуєте для блокування доступу? Я можу зробити те ж саме для користувача, коли я блокую роутер :)
cupakob

Мій маршрутизатор і вікно шлюзу є окремими, оскільки ящик шлюзу призначає статичну адресу (і, таким чином, обробляє дані) з інших ящиків, я використовую iptables для блокування статично призначеної приватної IP-адреси від надсилання вихідних або вхідних даних, що таким чином блокує ВСЕ Інтернет-трафік до коробки. Кожен crontabs використовує власну команду iptables для того, щоб видалити елементи з розкладу. Це недосконала система, тому що я міг просто купити маршрутизатор, який працює краще: P
Thomas Ward

Відповіді:


7

Ви можете використовувати ownerрозширення iptables, щоб заблокувати доступ користувача до мережі, наприклад

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

Тепер ви можете використовувати cron, щоб додати або видалити ці правила (для яких може знадобитися трохи сценаріїв оболонок, якщо у вас вже є деякі правила iptable або ви хочете, щоб це робилося для різних користувачів у різний час).


О, я не знав, що існує: P @Florian: (а) які модулі ядра потрібно завантажити для цього? (b) чи працює це -j REJECT --reject-with <argument>?
Thomas Ward

(a) xt_owner завантажується автоматично. (b) Я не бачу жодної причини, чому --reject-with не повинен працювати з цим, але ніколи не намагався.
Флоріан Дієш

Я перевіряю це пізніше: P Чи існує модуль власника у вікнах iptables для деталізації його використання? (Бічна примітка: Я запитав, який модуль ядра, оскільки моє ядро ​​спеціально складено: /)
Thomas Ward

виглядає саме те, що я шукаю .... я мушу спробувати :)
cupakob

@EvilPhoenix: Так, це задокументовано на сторінці iptables
Флоріан Дієш

8
  1. Логін як корінь:

    судо су

  2. перевірити стан вашого брандмауера:

    ufw status
    

    якщо брандмауер неактивний , видайте:

    ufw enable
    
  3. з метою обмеження доступу користувачів до Інтернету Вільгельма у неділю, вівторок, середу та п’ятницю до дозволених інтервалів часу (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 
    

    бічна примітка : * Будь ласка, зверніть увагу на використання -Iперемикача, а не -Aперемикання iptablesкоманди. -Iперемикач вставляє зазначені вище правила (3.) на початку (вгорі) вихідна правило ланцюга , а не в нижній частині ланцюга. розміщення доданих вручну правил поверх звичайних політик брандмауера є важливим, оскільки правила обробляються зверху вниз. якщо найвищі правила приймають пакет, ланцюг OUTPUT більше не перевіряється на наступні правила, які, можливо, перервали пакет.

  4. переконайтесь, що правила справді були правильно введені:

    iptables -L OUTPUT
    

    для того , щоб видалити невідповідне правило, говорять (кількість 1 на основі з верхньої частини правила № 1, iptables -v -L OUTPUT) питання: iptables -D OUTPUT 1.

  5. збережіть iptables для відновлення наступного завантаження:

    iptables-save > /etc/iptables.rules
    
  6. у /etc/rc.localдодати рядок:

    iptables-restore < /etc/iptables.rules
    

зроблено

-

перевірено на Ubuntu 11.10 (oneiric), локаль: він


1
Чудова відповідь із ідеальним рішенням! Але зауважте, що всі часи трактуються як UTC , тому, можливо, доведеться їх вручну компенсувати за місцевий час - у моєму випадку central european summer time -2 hours.
Точний пінгвін

Я зробив усі кроки, і вони спрацювали (доступ до Інтернету був обмежений), але після перезавантаження Інтернет знову повернувся. Я перевірив iptables -L OUTPUT і не знайшов правил, які я додав ...
Lawand

1
У чому причина включення, ufwнавіть якщо ви згодом використовуєте iptables?
balu

@PrecisePenguin, яку можна виправити за допомогою --kerneltzпараметра ("Використовувати часовий пояс ядра замість UTC")
waldyrious
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.