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

20

Недавно я столкнулся с проблемой ограничения доступа в Интернет к конкретным программам. Кто-нибудь может порекомендовать хороший способ сделать это, без использования какого-либо конкретного программного обеспечения?

Илья Ростовцев
источник

Ответы:

31

Решение для меня оказалось простым.

  1. Создать, проверить новую группу ; добавить необходимых пользователей в эту группу:
    • Создайте: groupadd no-internet
    • Проверка: grep no-internet /etc/group
    • Добавить пользователя: useradd -g no-internet username

      Примечание: если вы изменяете уже существующего пользователя, вы должны запустить: usermod -a -G no-internet userName проверьте с помощью:sudo groups userName

  2. Создайте скрипт на своем пути и сделайте его исполняемым:
    • Создайте: nano /home/username/.local/bin/no-internet
    • Исполняемые: chmod 755 /home/username/.local/bin/no-internet
    • Содержание: #!/bin/bash
                    sg no-internet "$@"

  3. Добавьте правило iptables для отбрасывания сетевой активности для группы без интернета :


   4. Проверьте это, например, в Firefox, запустив:

  • no-internet "firefox"

Если вы хотите сделать исключение и разрешить программе доступ к локальной сети :

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

ПРИМЕЧАНИЕ: в случае нереста правила будут соблюдены. Например, если вы запустите программу с правилом отсутствия интернета, и эта программа откроет окно браузера, все равно правила будут применены.

Илья Ростовцев
источник
2
Несколько заметок Илия: Объявление 1: - изменить существующего пользователя: usermod -a -G groupName userName - проверить с помощью: sudo groups userName Объявление 3: - У меня уже есть много правил в iptables, Положение нового правила крайне важно , должно быть первым правилом в цепочке OUTPUT. Поэтому я использую insert: iptables -I OUTPUT 1 -m owner --gid-owner no-internet -j DROP Чтобы разрешить доступ к локальной сети: убедитесь, что правила ACCEPT выше правила DENY. Работает как шарм. Используйте это, например, на Wifiguard. Прога проверяет wlan на наличие неизвестных устройств, но "звонит домой" при каждом запуске.
Скрипт только передаст команду. Если вы пытаетесь запустить программу с параметрами, вы должны использовать «$ @» вместо «$ 1». По какой-то причине мне пришлось временно сохранить его в переменной для bash, чтобы правильно его обработать: cmd = "$ @"; sg no-internet "$ {cmd}"
15:15
используйте «nointernet» вместо «no-internet». По какой-то причине Ubuntu 14.04 не может обработать тире, когда вы пытаетесь использовать sg или chgrp (он запрашивает пароль, но не работает).
1
unshare -n YourAppToBlock> используйте «nointernet» вместо «no-internet». возможно, нет интернета?
SarK0Y
Я попробовал это, как описано, но для меня, после добавления меня в "no-internet" и установки ip-таблиц, я больше не могу подключаться к Интернету (с и без скрипта bash no-internet).
Viatorus