Иногда бывает необходимо запустить программу, предварительно заблокировав для неё доступ в интернет. Существует довольно простой трюк для решения этой задачи.
Итак, идея заключается в том, чтобы при запуске приложения устанавливать особый ID группы, который будет сигналом блокировки доступа для netfilter.
Создаём группу (В нашем случае группа будет называться
Добавляем в неё текущего пользователя:
Создадим файл в директории /etc/network/if-pre-up.d
со следующим содержимым:
Не забываем сделать его исполняемым:
Разместим скрипт в /usr/local/bin
Содержимое скрипта несложное:
Опять же, не забываем сделать его исполняемым
Наверняка это можно сделать проще, но в случае с karmic out-of-box ситуация выглядит следующим образом:
restart: Unknown instance:
initctl: Unknown instance:
Ignoring unknown interface eth0=eth0
К тому же, чтобы добавление пользователя в группу вступило в силу вам придётся перелогиниться (это как минимум перезапуск DE —
В общем, если вы просто перезагрузитесь, то все настройки выполнены и вступили в силу.
Использование простое:
Хардкорные линуксоиды шаг 3 могут опустить и использовать всё это так :)
Итак, идея заключается в том, чтобы при запуске приложения устанавливать особый ID группы, который будет сигналом блокировки доступа для netfilter.
Шаг 1. Создаём группу-маркер и добавляем себя в неё
Создаём группу (В нашем случае группа будет называться
noinet
):sudo groupadd noinet
Добавляем в неё текущего пользователя:
sudo gpasswd -a `id -un` noinet
Шаг 2. Создаём правило для iptables, которое будет выполняться перед каждым подъёмом сетевого интерфейса
Создадим файл в директории /etc/network/if-pre-up.d
sudo vim /etc/network/if-pre-up.d/inet_access_blocking_rule
со следующим содержимым:
#!/bin/bash
iptables -A OUTPUT -m owner --gid-owner noinet -j DROP
Не забываем сделать его исполняемым:
sudo chmod +x /etc/network/if-pre-up.d/inet_access_blocking_rule
Шаг 3. Создаём скрипт запуска, устанавливающий группу-признак
Разместим скрипт в /usr/local/bin
sudo vim /usr/local/bin/noinet
Содержимое скрипта несложное:
#!/bin/bash
sg noinet "$*"
Опять же, не забываем сделать его исполняемым
sudo chmod +x /usr/local/bin/noinet
Шаг 4. Перезагрузка системы
Наверняка это можно сделать проще, но в случае с karmic out-of-box ситуация выглядит следующим образом:
sudo service networking restart
сообщает: restart: Unknown instance:
sudo initctl restart networking
сообщает: initctl: Unknown instance:
sudo invoke-rc.d networking restart
сообщает: Ignoring unknown interface eth0=eth0
К тому же, чтобы добавление пользователя в группу вступило в силу вам придётся перелогиниться (это как минимум перезапуск DE —
sudo restart gdm
).В общем, если вы просто перезагрузитесь, то все настройки выполнены и вступили в силу.
Использование
Использование простое:
noinet ping habrahabr.ru
noinet firefox
Хардкорные линуксоиды шаг 3 могут опустить и использовать всё это так :)
sg noinet "ping habrahabr.ru"
sg noinet "firefox"