Ограничить доступ в интернет для приложений в Linux

Январь17

Access-Denied-Feanor

Часто в работе сталкиваюсь с ситуацией, когда бывает нужно запускать программу таким образом, чтобы она не имела доступа в интернет. Делается это по разным причинам. Эту задачу можно решить несколькими способами. В статье будет описан один из вариантов решения.

При запуске приложения мы можем присвоить ему  ID особой группы — по которому будем блокировать доступ в интернет через netfilter.

 Создаём группу-маркер

Создаём группу (назовем ее NO_INTERNET ):
sudo groupadd NO_INTERNET

Добавляем в неё текущего пользователя:
sudo gpasswd -a `id -un` NO_INTERNET

Создаём правило для 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 NO_INTERNET -j DROP

Нужно сделать его исполняемым:
sudo chmod +x /etc/network/if-pre-up.d/inet_access_blocking_rule

Далее создаём скрипт запуска, в котором устанавливаем саму группу по которой будем блокировать

Разместим скрипт в /usr/local/bin
sudo vim /usr/local/bin/NO_INTERNET

Содержимое скрипта будет таким:
#!/bin/bash
sg NO_INTERNET "$*"

Делаем его исполняемым
sudo chmod +x /usr/local/bin/NO_INTERNET

Перезагружаем систему.

Использование данного маркера простое:
NO_INTERNET ping ya.ru
NO_INTERNET firefox

Поделиться в соц. сетях


Copyright © 2013-2017. All rights reserved.

Опубликованно Январь 17, 2015 by Feanor184 в категории Linux

Об Авторе

Постигаю Linux, учу Python, пытаюсь программировать)

5 комментарий(ев) к записи “Ограничить доступ в интернет для приложений в Linux

  1. imatvey

    Сделал себе все наоборот. По умолчанию для всех -A OUTPUT -j DROP, а ACCEPT только для polipo, через который у меня идут в интернет только те приложения, которые мне нужны, включая apt (у меня ubuntu). Спасибо, класный блог! (в первую очередь контент, а не из-за dofollow ;))

    1. Feanor184 Автор поста

      imatvey, ну да, действительно логичнее сделать -A OUTPUT -j DROP для всех) как-то даже сразу в голову не пришло)

  2. Artur

    а как узнать какое приложения использует интернет? и возможно ли сделать лог файл для слежки за такими приложениями (что и куда они подключаются)?

  3. Матвей

    Я как-то долго пытался вникнуть и запомнить все ключи iptables, и более-менее получалось. Но т.к. я не админ линукс сервера, а пользователь десктопного пингвина, для меня открытием стал FWBuilder, с тех пор не парюс с таблицами и ключами iptaiptables, а в фвбилдере мышой составляю правила и генерю скрипт, на который стоит симлинк в /etc/network/if-up.d/ :) В случае нкобходимости внесения изменений все занимает не более пары минут сгенерить новый скрипт и перезапустить сеть для применения, чего нельзя было бы добиться каждый раз вспоминая ключи для iptables

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

=

Перед тем, как оставить комментарий, убедитесь, что вы ознакомились с правилами комментирования этого блога.