Linux запретить программе доступ в интернет
Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.
1. Показать статус.
Примерный вывод команды для неактивного файрвола:
Для активного файрвола:
Где:
-L : Показать список правил.
-v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы 'K', 'M' or 'G'.
-n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
2. Отобразить список правил с номерами строк.
Вы можете использовать номера строк для того, чтобы добавлять новые правила.
3. Отобразить INPUT или OUTPUT цепочки правил.
4. Остановить, запустить, перезапустить файрвол.
Где:
-F : Удалить (flush) все правила.
-X : Удалить цепочку.
-t table_name : Выбрать таблицу (nat или mangle) и удалить все правила.
-P : Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).
5. Удалить правила файрвола.
Где:
-D : Удалить одно или несколько правил из цепочки.
6. Добавить правило в файрвол.
Вывод станет таким:
7. Сохраняем правила файрвола.
8. Восстанавливаем правила.
9. Устанавливаем политики по умолчанию.
10. Блокировать только входящие соединения.
11. Сбрасывать адреса изолированных сетей в публичной сети.
Список IP адресов для изолированных сетей:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
12. Блокировка определенного IP адреса.
13. Заблокировать входящие запросы порта.
14. Заблокировать запросы на исходящий IP адрес.
Вывод:
CIDR: 69.171.224.0/19
15. Записать событие и сбросить.
Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:
16. Записать событие и сбросить (с ограничением на количество записей).
16. Сбрасывать или разрешить трафик с определенных MAC адресов.
17. Разрешить или запретить ICMP Ping запросы.
18. Открыть диапазон портов.
19. Открыть диапазон адресов.
20. Закрыть или открыть стандартные порты.
Заменить ACCEPT на DROP, чтобы заблокировать порт.
21. Ограничить количество параллельных соединений к серверу для одного адреса.
Где:
--connlimit-above 3 : Указывает, что правило действует только если количество соединений превышает 3.
--connlimit-mask 24 : Указывает маску сети.
Помощь по iptables.
Для поиска помощи по iptables, воспользуемся man:
$ man iptables
Проверка правила iptables.
Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.
Iptables отличный инструмент в руках администратора. Если нужно легко и просто защититься в десктопной Ubuntu, то стоит знать, что есть удобная консольная надстройка над iptables под названием UFW, а к ней есть графическая программа GUFW. Сделать свою Ubuntu ещё более защищённой поможет видеоматериал.
Ни разу не настраивал файрвол или другие подобные вещи в линукс. Есть ли простой и надежный способ запретить приложению выходить в сеть? Какой вообще способы бывают?
Вдогонку вопрос: Есть ли какая-нибудь разница, установлено ли это приложение через стандартный менеджер ubuntu - apt, или оно скачано и запускается из Appimage?
На примере того же keepassxc, надо запретить ему выход в сеть. И можно ли как-то потом удостовериться, что выход в сеть действительно ему перекрыт?
Можно наверное запускать приложение от специально отведенного пользователя а в правилах разруливать по uid/gid.
Но в другой теме говорят про какие-то namespaces, тоже начинаю читать.
Я просто пытаюсь понять, вроде типовая задача - ограничить/запретить доступ в сеть приложению в Linux. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что приложение не найдет обходной путь в сеть. Когда это менеджер паролей с сетевыми функциями (по умолчанию правда не используются), то всегда хочется перестраховаться.
Насколько это надежная и проверенная утилита? Не занимается ли она сама перехватом инфы?
Я просто пытаюсь понять, вроде типовая задача - ограничить/запретить доступ в сеть приложению в Linux. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что приложение не найдет обходной путь в сеть.
Я вот пытаюсь понять, вроде типовая задача - построить ракету/засеять поле пшеницей/посадить человека в тюрьму. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что она/он выведет груз на орбиту/взойдёт/не сбежит.
Не так вопрос прочитал. В общем, и тут iptables вроде может помочь. В сторона модуля owner надо копать, если не ошибаюсь.
Попробую осмыслить, спасибо. Как-раз хотелось какое-то встроенное проверенное решение, но почему-то не все считают что iptables можно настроить так, чтобы программа все-равно не нашла обход. Но я все равно попробую, этот вариант мне как-то ближе. Может еще с namespaces разберусь.
самое простое, что приходит на ум - запусти его в пустом network namespace.
iptables имеет достаточно ограниченные возможности
IMHO самое простое - запуск в отдельном netns без сети.
Ни разу не настраивал файрвол или другие подобные вещи в линукс.
Не лезь сразу в скрипты. Запусти fwbuilder и поиграй с ним. К тому же он как раз типовые возможности и покрывает.
Ну и да - по-умолчанию всё должно быть запрещено. Нужно открывать доступ. И то только к конкретным адресам.
Большинство программ в linux имеют открытый исходный код и не совершают неконтролируемых действий. Кроме того графическая подсистема часто может отсутствовать. А многие программы написаны из расчёта на автоматическую работу и поэтому лишены лишней интерактивности. То есть подход уровня «открыть окошко уведомления и спросить пользователя пускать ли программу в сеть» - это просто варварство. Ибо у пользователя может не быть графической подсистемы что бы открыть окошко или пользователем может быть скрипт в котором не будет прописана адекватная реакция на такой запрос.
Исторически в linux не было запроса на контроль сетевой активности отдельных программ. Был запрос на сложную маршрутизацию и закрывание всех портов кроме нужных для конкретных сервисов.
Поэтому тебе нужны всякие новомодные хипстерские средства вроде тюрем и песочниц.
В данной статье хочу рассказать, как я строил систему ограничения входящего и исходящего трафика в Linux.
Как и учет трафика, ограничение полосы пропускания в сети является очень важной задачей, хотя первое с каждым годом всё быстрее отходит на второй план, шейпинг трафика остается необходимой задачей каждого системного/сетевого администратора.
Какие есть способы ограничения трафика?
Для того, чтобы ответить на этот вопрос нужно определиться для чего этот трафик ограничивать вообще.
Взяв за основу мою сеть из, примерно, 50 рабочих мест, которые выходят в интернет через шлюз, под управлением ОС Ubuntu и некоторые из пользователей пользуются локальными ресурсами на этом сервере по протоколу SMB.
Моя цель ограничить пользователям скорость передачи данных в Интернет со справедливым разделением полосы пропускания между ними.
Исходя из моих задач, для ограничения полосы пропускания можно использовать следующие методы:
1. Ограничение с помощью прокси-сервера Squid.
Данный метод позволяет довольно гибко контролировать весь www,ftp трафик пользователей с возможностью гибкого ограничения скорости пропускания.
2. Использование traffic control из iproute2.
Очень гибкий и оптимальный метод ограничения трафика, но не предоставляющий контроля над WWW трафиком, как в предыдущем методе.
3. Конечно возможно ограничить скорость путём использования модуля –m limit для iptables – но считаю это неприемлемым.
В общем я решил остановиться на методе ограничения трафика с помощью пакета iproute2.
Что, где и как?
Как уже упоминал, я использую сервер: OS Ubuntu 10.04, ядро 2.6.32-30. В сервере 3 интерфейса: eth0 – внутренняя сеть, eth1 — провайдер 1, eth2 – провайдер 2.
Задача: ограничить скорость входящего и исходящего трафика пользователей с приоритезацией трафика по классам, исходя из некоторых условий. Локальный трафик не ограничивать.
Немного теории
Естественно, что при отсутствии системы ограничения трафика этот пользователь займёт весь канал и остальным пользователям не будет предоставлена нормальная скорость работы с Интернет. Но мы не может ограничить скорость отправки данных пользователем на внешнем интерфейсе сервера, т.к. для доступа пользователей в Интернет используется NAT, а, учитывая, что шейпинг трафика выполняется после преобразования адресов, то на внешнем интерфейсе сервера уже не будет пакетов с внутренними адресами сети.
Для решения проблемы ограничения исходящего от клиента трафика я использовал устройство IFB, на которое перенаправлял весь исходящий от клиента трафик.
В теории управления трафиком мы можем ограничивать только исходящий трафик. Следовательно, трафик, который направляется к пользователю внутренней сети, будет исходящим относительно внутреннего интерфейса eth0, а трафик, направляющийся от пользователя внутренней сети – исходящим относительно внешнего интерфейса eth1.
Исходя из вышеизложенного, я ограничивал входящий к пользователю трафик на интерфейсе внутренней сети — eth0, а исходящий от пользователя трафик – на виртуальном интерфейсе ifb0.
Для того чтобы во время занятия пользователем всей полосы пропускания, ограниченной ему на шлюзе, для скачивания какого-нибудь большого объема данных и при этом мог нормально пользоваться ssh и чтобы у него работал ping – я использовал приоритезацию трафика.
- icmp
- udp,ssh
- tcp sport 80
- остальной неклассифицированный трафик
Дисциплины, классы, фильтры
Как уже было мной отмечено, входящий к пользователям трафик будет ограничиваться на интерфейсе eth0, а исходящий от пользователей – на виртуальном интерфейсе ifb0.
Для инициализации интерфейса ifb0 нужно сначала загрузить модуль управления интерфейсом:
/sbin/modprobe ifb
После успешной загрузки модуля нужно включить интерфейс:
/sbin/ip link set dev ifb0 up
Затем, после того, как интерфейс будет поднят, нужно организовать переадресацию всего исходящего трафика от пользователей на этот интерфейс:
/sbin/tc qdisc add dev eth0 ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Теперь можно смело начинать строить классы и фильтры для входящего к пользователям трафика на интерфейсе eth0, а исходящего – на интерфейсе ifb0.
- На интерфейсе создается, так называемый корневой обработчик очереди
- К этой дисциплине прикрепляется класс, который одержит информацию о максимальной пропускной способности данных, которые в этот класс попадут
- Добавляется фильтр, который, с помощью определенных параметров, относит каждый пакет к тому или иному классу
Ограничиваем входящий к пользователям трафик
Все манипуляции с трафиком будем проводить на интерфейсе eth0.
Для начала создадим корневой обработчик очереди на интерфейсе:
/sbin/tc qdisc add dev eth0 root handle 1: htb default 900
Тем самым мы привязали корневой обработчик очереди к интерфейсу eth0, присвоили ему номер 1: и указали на использование планировщика HTB с отправкой всего неклассифицированного трафика в класс с номером 900.
Затем создадим дочерний класс 1:1 с шириной канала, равной скорости интерфейса:
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit burst 15k
Все последующие классы будут подклассами только что созданного нами класса. Это дает нам более точную приоритезацию и обработку скорости потока данных.
Создадим класс для локального трафика, адресом назначения или исходным адресом которого будет являться внутренний адрес сервера. Это нужно для удобства пользования ресурсами сервера, такими как SSH, SMB, FTP, WWW и так далее. Скорость, описанная классом – 50Mbit, но в случае, если скорость потока родительского класса не меньше 100Mbit, то разрешаем использовать 80Mbit, в качестве максимальной скорости передачи данных.
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k
Далее создаем класс, скорость которого будет равно ширине полосы пропускания, которую нам предоставляет провайдер. В моем случае – это 15Mbit.
/sbin/tc class add dev eth0 parent 1:1 classid 1:100 htb rate 15Mbit burst 15k
Даже если провайдер предоставляет большую скорость, к примеру 18Mbit, я рекомендую снижать эту скорость для шейпера на 1-2 Mbit для более «мягкого» ограничения трафика.
Далее создадим класс, в который будут отправляться все пакеты данных, которые не попадут ни в один из созданных ранее классов.
/sbin/tc class add dev eth0 parent 1:1 classid 1:900 htb rate 56Kbit ceil 128Kbit
Для каждого пользователя я создавал отдельный подкласс, с выделенной полосой пропускания, а затем создавал подклассы этого класса для приоритезации трафика:
/sbin/tc class add dev eth0 parent 1:100 classid 1:101 htb rate 4Mbit ceil 6Mbit
Данной командой мы указали на создание класса с номером 1:101, который является подклассом класса с номером 1:100 и указали пропускную способность класса в 4Mbit, а в случае свободной полосу пропускания у родительского класса, разрешить максимальное прохождение данных по классу на скорости 6Mbit.
После создания классов пришло время создания фильтров, которые будут классифицировать трафик по определенным критериям.
Есть несколько способов классифицировать трафик.
Самые удобные из них – это u32 классификаторы, позволяющие классифицировать пакеты исходя из адреса назначения или отправителя, используемого протокола, номера порта и так далее, и классификаторы на основе меток iptables. Для использования последних необходимо сначала маркировать пакеты при помощи iptables в цепочке PREROUTING, на основе каких-либо условий, а затем при помощи tc направлять пакеты с соответствующей меткой в нужные классы.
Я предпочел использовать u32 классификатор.
Присваиваем icmp-трафику самый низкий приоритет и отправляем его в класс 1:102
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.10.78 \
match ip protocol 1 0xff flowid 1:102
UDP и SSH трафик отправляем в класс 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78 \
match ip protocol 17 0xff flowid 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78 \
match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:103
WWW-трафик, пришедший с tcp-порта 80 отправляем в класс 1:104
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.10.78 \
match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:104
Трафик, не соответствующий ни одному из условий отправляем в класс 1:105
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 4 u32 match ip dst 192.168.10.78 flowid 1:105
Приоритезация работает по такому принципу, что каждому классу выделяется по минимальной полосе пропускания с возможностью заимствования у родительского класса максимальной полосы пропускания, в зависимости от приоритета трафика, поэтому, если класс будет забит WWW-трафиком с tcp-порта 80, при прохождении icmp пакета с более низким приоритетом, чем у WWW-трафика, он будет пропущен вне очереди, учитывая его приоритет.
Ограничиваем исходящий трафик
Для ограничения исходящего от пользователей трафика выполняются такие же действия как и для входящего, только в ход идет виртуальный интерфейс ifb0. Также нужно изменить назначение следования трафика: вместо dst 192.168.10.78 – нужно указать src 192.168.10.78 соответственно.
Автоматизация и принцип работы скриптов
Для начала, для автоматизации процесса ограничения скорости нужно создать файл, в котором будет перечислены адреса пользователей, для которых нужно устанавливать ограничения с указанием этих ограничений.
Файл представляет из себя поля, разделенный знаком табуляции либо пробелом со следующими значениями:
CLIENT – Имя пользователя. Нужно для удобства предоставления данных
IP – адрес пользователя в сети
DOWN – скорость потока данных к пользователю
CEIL – максимальная скорость входящего трафика к пользователю при доступности данной полосы у родительского класса
UP — скорость потока данных от пользователя
CEIL – то же, что и у CEIL для входящего трафика к пользователю
PROVIDER – какой из провайдеров используется для обслуживания запросов пользователя (при наличии нескольких)
ID – номер класса для пользователя. Подробнее о номерах классов ниже.
Также я использую несколько bash-скриптов.
TC="/sbin/tc"
DEV_P1_DOWN="eth0"
DEV_P1_UP="ifb0"
Далее код, который подгружается:
Классы
И фильтры:
Данные скрипты нужно положить в один каталог, Выполнить:
chmod +x ./rc.shape
Я описал один из методов ограничения трафика. Утилита tc – очень мощная вещь в вопросах об ограничениях трафика. Рекомендую ознакомиться с документом: LARTC-HOWTO для более глубокого изучения данного вопроса.
В масдае замыкал прогу на локалку в хост-файле. Есть ли что то наподобие в линуксе? Ubuntu 10.04. И для примера, как замкнуть файл iw4sp.exe?
Группы, файрволл, /etc/hosts.
Слышал, что на стандартный файрвол можно установить гуй, следовательно вопрос: как?
>Слышал, что на стандартный файрвол можно установить гуй, следовательно вопрос: как?
Как вариант предлагаю воспользоваться webmin. Это web-интерфейс для удаленного администрирования unix-подобной операционной системы.
Вот еще как вариант, но люди критикуют.
> Группы, файрволл, /etc/hosts.
так это ж только по порту можно будет ограничить, не?
мне кажется этот вариант вас тоже устроит
>так это ж только по порту можно будет ограничить, не?
Автор не уточнил требований к путям обхода. Я думаю что файрволл вполне подойдет, учитывая что большинство программ использует определенные порты.
Можно глупый вопрос, а точнее просьбу? Как запретить выход в сеть файлу iw4sp.exe? Мне это необходимо, чтоб не выскакивало ошибок типо iwnet_invalidverion. Поподробнее пжлст :)
ты сейчас точно про линукс?
уверяю, он прочно изолирован от интернета невозможностью запуска.
> Автор не уточнил требований к путям обхода. Я думаю что файрволл вполне подойдет, учитывая что большинство программ использует определенные порты.
я когда-то фильтровал по пользователю в iptables, но топикстартер на iptables (судя по ответам) может голову нечаянно сломать.
в принципе, кейз у него очень стандартный. Наверняка есть какая-нибудь софтинка, которая автоматически делает всю эту грязь, и не нужно ничего писать ручками.
1) смотришь (в гугле, или через netstat, или через что умеешь) какие порты использует прога
2) открываешь /etc/hosts.deny и добавляешь туда строчку аналогично уже имеющимся. если там ничего нет, то ищешь в гугле, что писать в hosts.deny и пишешь.
.
3) профит!
>Можно глупый вопрос, а точнее просьбу? Как запретить выход в сеть файлу iw4sp.exe? Мне это необходимо, чтоб не выскакивало ошибок типо iwnet_invalidverion. Поподробнее пжлст :)
Это, судя по всему, программа которую ты намереваешься запустить под wine. Тут я, скорее всего, бессилен, ибо с wine сталкивался три с половиной раза за жизнь.
>я когда-то фильтровал по пользователю в iptables, но топикстартер на iptables (судя по ответам) может голову нечаянно сломать.
Я в свое время не раз ломал голову над iptables, даже не будучи новичком.
в принципе, кейз у него очень стандартный. Наверняка есть какая-нибудь софтинка, которая автоматически делает всю эту грязь, и не нужно ничего писать ручками.
Я считаю что автору необходимо поискать готовые скрипты-решения для данной задачи. Ибо ни мы, ни ЛОР ему не способны помочь без подробной постановки задачи. Насколько я понял, нужно запретить программе запускаемой в wine обращаться к интернету. Я, к сожалению, не в силах помочь здесь.
Запускаешь программу, затем делаешь `netstat -p | grep имя_программы`, затем порт закрываешь в фаерволе.
Терминал требует права рута. После запуска под sudo ничего не происходит.. Пишется новая строка, как ни в чем не бывало
мне кажется этот вариант вас тоже устроит"
В терминале писал 'LD_PRELOAD=nonet.so iw4sp.exe'
Вот, что получил в результате: 'ld.so: object 'nonet.so' from LD_PRELOAD cannot be preloaded: ignored. iw4sp.exe: command not found'
полный путь к nonet.so надо указывать
LD_PRELOAD=/home/f1xman/nonet.so wine iw4sp.exe
> В терминале писал 'LD_PRELOAD=nonet.so iw4sp.exe'
[code]LD_PRELOAD=nonet.so wine ./iw4sp.exe[/code]
>Вот, что получил в результате: 'ld.so: object 'nonet.so' from LD_PRELOAD cannot be preloaded: ignored. iw4sp.exe: command not found'
facepalm
Кто тебе линукс поставил…
В масдае замыкал прогу на локалку в хост-файле.
В линуксе есть /etc/hosts. Точно такой же как C:\Windows\system32\drivers\etc\hosts. Сюрприз?
Терминал или команда требует права рута? Не должна как бы. Ну `sudo -s` сделай, а потом уже далее.
Часто требуется лишить программу возможности работы с сетью. То есть для отдельного приложения создать иллюзию, что сети нет и тем самым запретить ей передавать какие-либо данные.
Запрет программе доступа в сеть через iptables
Есть такой трюк через файрвол iptables. Любым доступным вам способом нужно добавить правило, которое сбрасывает (DROP) пакеты, основываясь на имени пользователя.
sudo iptables -A OUTPUT -p tcp -m owner --uid-owner NAME_USER_NO_INET -j DROP .
Саму программу нужно запускать от имени пользователя, который будет символом запрета.
sudo -u NAME_USER_NO_INET программа
То есть у вас в системе нужно создать отдельного пользователя и запускать программы от его имени, а iptables будет лишать программу доступа в сеть.
Но есть и другой способ.
Запрет программе доступа в сеть через AppArmor
Можно создать профиль AppArmor для данной программы и в профиле лишить программу сетевых возможностей. Так как цель - запрет выхода в сеть программе, то тонкая настройка профиля для программы это отдельная история и она рассматривается в статье Правила AppArmor.
В данном случае, нам достаточно только запретить сеть, разрешив всё остальное. "Разрешив всё" имеется в виду, что мандатный доступ AppArmor не работает для программы и вся защита основывается на классических правах доступа.
Что делает скрипт и как?
Так как AppArmor - это мандатный доступ основанный на путях, то для AppArmor крайне важен путь к программе. Для примера и наглядности продемонстрируем запрещение доступа для утилиты wget.
В переменной PROGRAM="/usr/bin/wget" указан полный путь к wget. Подсказать путь к бинарнику программы поможет команда whereis -b имя_программы .
В переменной NAME_PROFILE=`echo $PROGRAM| tr "/" "." | cut -c 2-` будет имя будущего профиля wget, которое создаётся из /usr/bin/wget в usr.bin.wget. То есть / заменяется на точку, кроме первого символа.
В RELOAD_APPARMOR="sudo service apparmor reload" укажите как нужно перегружать в вашей системе AppArmor.
DIR_AA_PROFILES="/etc/apparmor.d/" указывает на каталог с профилями AppArmor.
Запустив скрипт sudo sh ./deny-app-net.sh вы создадите файл $NAME_PROFILE в каталоге $DIR_AA_PROFILES.
Содержимое файла /etc/apparmor.d/usr.bin.wget будет таким
profile "/usr/bin/wget" deny network,
deny capability net_bind_service,
deny capability net_broadcast,
deny capability net_admin,
deny capability net_raw,
capability chown,
. сокращено .
/** rwmlkux,
/ rwmlkux,
>
Мы лишаем wget сети, указывая deny network. Так же отключаем возможности (capability) сети, указав deny capability net_*.
Остальные возможности разрешаем, так как не знаем какой программе и что понадобится.
Конструкция вида
/** rwmlkux,
/ rwmlkux,
не мешает программе получить доступ ко всем файлам и папкам (/**) в системе и даёт ей возможность их прочесть (r), записать (w), отобразить в память (m), создать ссылку (l), заблокировать файл (k), ЕСЛИ это позволяют классические права доступа!
С помощью ux мы указываем неконтролируемое AppArmor выполнение программы, так как наша цель была просто лишить программу сети.
Многих испугает фраза, что /** rwmlkux даёт такие широкие возможности программе, НО не забывайте, что речь идёт о мандатном доступе в AppArmor и только! Проще говоря, если классические права доступа не дают программе прочесть некоторый файл, то /** rwmlkux и не даст их.
AppArmor - это дополнительная защита к классическим правам доступа (rwxr-xr-x), а не его замена!
Если вы хотите более тонко настроить профиль и одновременно лишить программу доступа в сеть, то вам придётся освоить синтаксис AppArmor и указать в профиле ваши пожелания. В данной статье это не рассматривается.
Как вернуть программе доступ в сеть?
Удалите созданный профиль и заставьте AppArmor перечитать профили.
Читайте также: