Как ограничить доступ пользователя в интернет на временные интервалы?


12

Я хочу, чтобы один из пользователей (не в списке sudoers) имел доступ в Интернет с 14:00 до 16:00 и с 17:00 до 18:30. Является ли это возможным? Могу ли я установить разные интервалы времени для разных дней недели?


Лучше всего делать это на уровне управления маршрутизатором или шлюзом, а не на самой системе ... насколько я знаю, в Ubuntu нет простой системы для ограничения доступа в Интернет на уровне пользователя.
Томас Уорд

Когда я сделаю это на уровне маршрутизатора, тогда все пользователи будут ограничены ...
cupakob

Afaik (и я ищу решение этой проблемы с 9.04), для этого нет программных решений. Конечно, в моих сетях только один пользователь на компьютер, и все они подключаются через серверную коробку, которая действует как шлюз. В этом ящике есть crontab, который блокирует весь доступ в Интернет в этой системе, а затем удаляет его; впоследствии он также работает в разное время каждый день. Из любопытства, почему вам нужно ограничить доступ к этому строгому периоду времени, и почему вы должны сделать это пользователем?
Томас Уорд

Мне нужно это для пользователя, потому что один компьютер используется двумя пользователями. и я хочу ограничить доступ, потому что второй пользователь должен узнать гораздо больше, а не оставаться в фейсбуке :), но ваша идея с crontab хороша .... что вы используете, чтобы заблокировать доступ? Я могу сделать то же самое для пользователя, когда я блокирую маршрутизатор :)
cupakob

Мой маршрутизатор и мой блок шлюза отделены друг от друга - поскольку блок шлюза назначает статический адрес (и, следовательно, обрабатывает данные) из других блоков, я использую iptables, чтобы заблокировать статический назначенный частный IP-адрес для отправки исходящих или входящих данных, что, таким образом, блокирует ВСЕ интернет-трафик на ящик. Каждый из crontabs использует свою собственную команду iptables для удаления элементов по расписанию. Это несовершенная система, потому что я мог бы просто купить маршрутизатор, который работает лучше: P
Томас Уорд

Ответы:


7

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

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

Теперь вы можете использовать cron для добавления или удаления этих правил (которые могут потребовать немного сценариев оболочки, если у вас уже есть некоторые правила iptable или вы хотите, чтобы они применялись для разных пользователей в разное время).


Ох, я не знал, что существовало: P @Florian: (a) какие модули ядра должны быть загружены для этого? (б) это работает с -j REJECT --reject-with <argument>?
Томас Уорд

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

Я проверю это позже: P Существует ли модуль владельца в справочных страницах iptables, чтобы детализировать его использование? (Примечание: я спросил, какой модуль ядра, потому что мое ядро ​​скомпилировано специально: /)
Томас Уорд

выглядит именно то, что я ищу .... я должен попробовать это :)
cupakob

@EvilPhoenix: Да, это задокументировано в
справочной странице

8
  1. войдите как root:

    судо су

  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 больше не проверяется на наличие следующих правил, которые могли бы DROPped пакет.

  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?
Балу

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