igorp1024 03.02.2010 12:11

Tips & tricksБлокировка доступа к интернету для произвольного приложения на примере Ubuntu Karmic

Это НЕ копипаст с хабра. Смотрите комменты.

Иногда бывает необходимо запустить программу, предварительно заблокировав для неё доступ в интернет. Существует довольно простой трюк для решения этой задачи.

Итак, идея заключается в том, чтобы при запуске приложения устанавливать особый 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 ситуация выглядит следующим образом (поскольку начиная с karmic убунта использует upstart):
sudo /etc/init.d/networking restart сообщает:
Ignoring unknown interface eth0=eth0.

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

Можно сделать sudo initctl restart network-interface INTERFACE=eth0, но в данном случае скрипт из /etc/network/if-pre-up.d/ не выполнится.
Наверняка можно попробовать sudo ifdown -a && sudo ifup -a или применить iptables-правило вручную.

К тому же, чтобы добавление пользователя в группу вступило в силу вам придётся перелогиниться, а это как минимум перезапуск DE. Например,
sudo restart gdm
В общем, если вы просто перезагрузитесь, то все настройки выполнены и вступили в силу.

Использование
Использование простое:
noinet ping welinux.ru
noinet firefox

Хардкорные линуксоиды шаг 3 могут опустить и использовать всё это так :)

sg noinet "ping welinux.ru"
sg noinet "firefox"

Откат всех этих изменений
sudo rm /etc/network/if-pre-up.d/inet_access_blocking_rule
sudo rm /usr/local/bin/noinet
sudo groupdel noinet

И, по вкусу, либо перезагрузка, либо удаление iptables-правила вручную
sudo iptables -D OUTPUT 1
но вместо 1 может быть другой номер добавленного нами ранее правила (уточнить можно с помощью sudo iptables -L --line-numbers; наше правило будет в цепочке OUTPUT)


Тэги: 9.10 internet iptables karmic ubuntu
+ 5 -
Похожие Поделиться

booley 03.02.2010 12:19 #
Хардкорные линуксоиды шаг 3 могут опустить и использовать всё это так :)

sg noinet "ping welinux.ru"
sg noinet "firefox"

Такое ощущение, что скоро в тред десантируется muhas и процитирует свой .zhrc, где обязательно будет подобный функционал.

Я так понимаю, вы это дело на своей убунте 9.10 протестировали?

Жалко, что с upstart'ом не разобрались
igorp1024 03.02.2010 12:31 #
Жалко, что с upstart'ом не разобрались

Ну, я же написал, что апстарту нужно сказать:
sudo initctl restart network-interface INTERFACE=eth0

Но только вот, скрипт из /etc/network/if-pre-up.d/ не запустится.
Думаю, он запустится при ifup, но имхо сие некрасиво.
Лучше уже сразу iptables -A OUTPUT -m owner --gid-owner noinet -j DROP

Тестировал и на своей, и на чистой поставленной в виртуалку.
booley 03.02.2010 14:05 #
Ну, я же написал, что апстарту нужно сказать:
sudo initctl restart network-interface INTERFACE=eth0

Это не особо понятно из текста статьи, т.к.
sudo initctl restart networking сообщает:
initctl: Unknown instance:
muhas 03.02.2010 14:20 #
Такое ощущение, что скоро в тред десантируется muhas и процитирует свой .zhrc, где обязательно будет подобный функционал.
не понял при чем здесь zsh. максимум нормальный алиас (функцию)
noinet(){
sg noinet -с "$@"
}
а для гламурности что AppArmor =)
igorp1024 03.02.2010 14:30 #
А apparmor сможет накладывать ограничения в зависимости от желания пользователя? (это вопрос, это не наезд)
Например, для java: хочу одному приложению дать доступ в инет. а другому - нет. Бинарник-то один...
muhas 03.02.2010 14:36 #
вроде именно для этого apparmor и предназночается - сам не интересовался подробностями (ток скайп в песочнице когда-то запускал и то по гайдам не разбираясь в подробностях)
xT 03.02.2010 12:30 #
тупо копипаста с хабра
igorp1024 03.02.2010 12:38 #
:)
У меня договор с муравьём.
Я ему статью, он публикует её на хабре (МОЮ статью) и даёт мне инвайт. :)
booley 03.02.2010 14:01 #
Палево!
igorp1024 04.02.2010 07:58 #
xT 03.02.2010 14:04 #
значит нужно было оформлять как пост ссылку
booley 03.02.2010 14:06 #
xT, здесь оригинал, на хабре - копипаст.
(есть ли на хабре пост-ссылка - не знаю)
xT 03.02.2010 14:16 #
Время создания

Хабр: 3 февраля 2010, 01:10
Вилинукс: 03.02.10 15:11

Назад в будущее?
igorp1024 03.02.2010 14:28 #
Ну, постили-то 2 разных человека :)
Я видел, что кто-то так поступал уже неоднократно: статью и сюда и на хабр.
А тут в правилах, вроде, запрещено чужое копипастить.
Ладно, в будущем постараюсь так не делать.
igorp1024 03.02.2010 14:32 #
А тут в правилах, вроде, запрещено чужое копипастить.

В смысле чужое нельзя, а своё - нет.
igorp1024 03.02.2010 14:31 #
Думаю, за ссылку инвайт не дадут. :)
ZogG 03.02.2010 21:20 #
ну и зачем тебе туда инвайт? там троллей и псевдоинтеллегентов хватает, что с умным лицом и умными словами говорят глупости в комментах, а все им верят. А интересные вещи(их там не мало) можно и без инвайта почитать.
booley 03.02.2010 22:10 #
Эх, я тоже хочу с умным лицом говорить глупости на Хабре.
Может кто поделится инвайтом?
:)
igorp1024 04.02.2010 08:00 #
igorp1024 04.02.2010 07:59 #
В принципе, да.
Но иногда спросить у кого-нить в комментах бывает интересно, или результаты опроса увидеть.
igorp1024 03.02.2010 12:38 #
Кстати, при внимательном просмотре тут инфы чуток больше, чем на хабре. :))
booley 03.02.2010 14:01 #
xT, помни про презумпцию некопипасты!
Username 03.02.2010 20:32 #
можт тоже ввести инвайты?
И продавать их?
Глядишь, спекулятивно интересу подобьем, илитизму напустим
booley 03.02.2010 21:01 #
Хехей, я смогу заработать в Интернете себе на ручки и тетрадки!
ZogG 03.02.2010 21:21 #
а я все собираюсь купить себе сборник для наклеек со спайдерменом 3
igorp1024 04.02.2010 08:02 #
Ну понятно, что это способ на пустом месте повысить статус сайта.
Хотя, в случае с хабром это, наверное, традиция: если не ошибаюсь, то хабр, дёрти и лепра созданы одними и теми же людьми и все эти сайты invite-only.
fun 04.02.2010 09:31 #
не всегда таковыми они были.
igorp1024 04.02.2010 10:25 #
Предположу, что, тогда, наверное, раскрутить сайт (подняв качество контента), ввести инвайты и пускать только тех, кто сможет принести пользу сообществу сайта.