изоляция Max
May. 25th, 2018 08:50 pmпосмотреть
установка
https://download.max.ru/linux-repos
sudo apt update
sudo apt install max
изолировать десктопный клиент linux
есть qemu и docker, то есть virbr0 и docker0 надо запустить, чтобы оно не видело мою сеть
sudo apt install firejail
даём доступ в сеть
запустить в песочнице
уровень изоляции
Вот что именно он НЕ СМОЖЕТ передать:
Ваши файлы: Благодаря --private=~/max_data приложение «думает», что в вашем домашнем каталоге пусто. Оно не увидит ваши документы, фото, SSH-ключи, переписку в Telegram или историю браузера Chrome.
Ваше окружение (LAN): Благодаря --net=docker0 клиент видит только виртуальную сеть Docker. Он не узнает, какие устройства (умные лампы, NAS, другие ПК) есть в вашей домашней сети 192.168.x.x.
Ваш реальный MAC-адрес: Он увидит только виртуальный MAC-адрес интерфейса Docker, а не аппаратный адрес вашей Wi-Fi или сетевой карты.
Список установленных программ: Firejail по умолчанию скрывает содержимое многих системных директорий, мешая составить профиль вашего софта.
Что он ВСЁ ЕЩЕ МОЖЕТ передать:
Ваш внешний IP-адрес: Поскольку трафик уходит в интернет через ваш роутер, сервер MAX увидит ваш реальный публичный IP (если вы не используете VPN на уровне всей системы или внутри контейнера).
Сведения о «железе»: Даже в песочнице приложение может прочитать модель процессора (/proc/cpuinfo), объем оперативной памяти и версию ядра Linux.
Ваш часовой пояс и язык системы: Эти данные обычно доступны через переменные окружения, если их не подменить принудительно.
Метаданные внутри приложения: Номер телефона (при регистрации), ID вашего аккаунта и время активности в сети.
Как сделать изоляцию «абсолютной»?
Если вы хотите скрыть даже внешний IP, запускайте команду через VPN-интерфейс (если он у вас поднят в системе как отдельное устройство, например tun0):
firejail --net=tun0 --dns=1.1.1.1 --private=~/max_data --env=DISPLAY=$DISPLAY max
проверка изоляции
1. Проверка сетевого адреса (IP и MAC)
firejail --noprofile --net=docker0 --private=~/max_data bash -c "ip addr"
2. Проверка DNS-утечек
firejail --noprofile --net=docker0 --dns=1.1.1.1 --private=~/max_data bash -c "cat /etc/resolv.conf"
3. Видит ли он соседей по сети?
firejail --noprofile --net=docker0 --private=~/max_data ping -c 2 192.168.1.1
4. Проверка файловой системы
firejail --noprofile --private=~/max_data bash -c "ls -a ~"
5. Мониторинг в реальном времени
firejail --top
6. Проверка маршрутов
firejail --noprofile --net=docker0 --private=~/max_data ip route
Изоляция через Docker
Размер образа будет зависеть от того, насколько «чистым» вы его сделаете. Если использовать Ubuntu или Debian в качестве базы, то итоговый образ займет примерно 400–700 МБ.
Вот из чего складывается этот объем:
Базовый слой (Base Image): ubuntu:22.04 весит около 75 МБ.
Зависимости (Библиотеки): MAX — это графическое приложение (скорее всего, на базе Electron или Qt), ему нужны библиотеки X11, GTK/Qt, Mesa (для графики) и звуковые драйверы. Это добавит еще 200–300 МБ.
Сам клиент MAX: Его .deb пакет весит около 80–120 МБ.
Это создаст полностью изолированную файловую систему и сетевой стек.
Создайте Dockerfile ubuntu:22.04
dockerfile
или debian:13-slim
dockerfile
сборка
docker build -t max-client .
разрешение доступа
xhost +local:docker
варианты запуска
возможные ошибки
ls -la /usr/bin/firejail
Если в начале строки нет буквы s (например, -rwxr-xr-x), выполните:
sudo chmod u+s /usr/bin/firejail
если нет звука
Иногда приложению нужны права на низкоуровневые протоколы. Добавьте в команду:
--protocol=unix,inet,inet6
Cannot open netlink socket: Operation not supported
ping: socktype: SOCK_RAW
ping: socket: Операция не позволена
ping: => missing cap_net_raw+p capability or setuid?
Разрешите создание namespaces
Выполните команду (как root):
sudo sysctl -w kernel.unprivileged_userns_clone=1
(Чтобы настройка сохранилась после перезагрузки, добавьте строку kernel.unprivileged_userns_clone=1 в файл /etc/sysctl.d/99-sysctl.conf).
изоляция на android
Чтобы пресечь сканирование сети и контактов в обычном Android-приложении (по аналогии с вашим конфигом Firejail), используйте следующие инструменты:
1. Защита контактов (Аналог --private / No-Access)
В Android нельзя просто «подсунуть» пустой файл контактов через конфиг, но можно обмануть приложение:
Настройки системы: Самый простой путь — Настройки -> Приложения -> Max -> Разрешения -> Контакты -> Запретить.
Shelter / Insular (Рекомендую): Установите Max в Рабочий профиль через Shelter. В этом профиле список контактов по умолчанию пуст. Приложение будет думать, что у вас 0 знакомых, и не получит доступа к вашей основной книге.
App Ops (через Shizuku): Позволяет установить режим Ignore. Приложение будет запрашивать контакты, система скажет «ок», но вернет пустой список вместо ошибки (это предотвращает вылеты приложения).
2. Защита сети (Аналог --net=docker0 и --dns)
Сканирование локальной сети (LAN) в Android обычно происходит через mDNS или перебор IP в подсети.
RethinkDNS / NetGuard:
Установите это приложение (оно работает как локальный VPN).
В настройках для приложения Max включите Isolate (Изоляция). Это запретит ему любые соединения, кроме тех, что вы разрешите.
Там же можно принудительно задать DNS 1.1.1.1, как в вашей команде.
GrapheneOS / CalyxOS: Если у вас кастомная прошивка, там есть переключатель "Network". Если его выключить, приложение вообще не увидит сетевой стек (полный аналог net none).
3. Защита от сканирования Wi-Fi/Bluetooth
Приложения часто сканируют сеть через поиск соседних Wi-Fi точек или Bluetooth-устройств.
Зайдите в Настройки -> Местоположение -> Поиск сетей Wi-Fi и устройств Bluetooth -> Выключить оба.
Обязательно отзовите у приложения Max разрешение на Местоположение (Location). В Android доступ к списку Wi-Fi сетей неразрывно связан с GPS-разрешением.
Итоговый рецепт «Max-Android-Jail»:
Создаете рабочий профиль через Shelter.
Клонируете туда Max.
В основном профиле удаляете Max.
Ставите RethinkDNS, включаете в нем DNS 1.1.1.1 и блокируете для Max все, кроме нужных адресов.
Хотите подробнее узнать, как настроить RethinkDNS, чтобы приложение видело только интернет, но не вашу локальную сеть?
1. Установка и базовый DNS
Установите RethinkDNS (лучше версию с F-Droid или сайта разработчика, там больше функций, чем в Play Store).
Откройте приложение, нажмите на плитку DNS.
Выберите Configure -> Cloudflare (это и есть ваш 1.1.1.1) или введите вручную через «Custom DNS».
2. Изоляция от локальной сети (Аналог --net)
Чтобы приложение max не могло «пинговать» ваш роутер, умные лампочки или другие устройства в домашней сети:
В главном меню RethinkDNS зайдите в раздел Firewall.
Найдите пункт Universal Firewall Rules (Общие правила).
Включите переключатель Block LAN connections (Блокировать соединения в локальной сети).
Это запретит всем приложениям доступ к IP-адресам типа 192.168.x.x, 10.x.x.x и т.д.
3. Настройка конкретно для приложения Max
Если вы не хотите ограничивать всю систему, а только max:
В главном меню нажмите Apps (Приложения).
Найдите в списке приложение Max.
Нажмите на него, чтобы открыть индивидуальные настройки.
Убедитесь, что для него включен режим Firewall on.
Если нужно, чтобы оно работало только когда вы его видите, включите Block when screen is off.
(Опционально) В разделе Log вы сможете увидеть, куда именно max пытается «стучаться» (IP и домены), и заблокировать конкретные узлы одним нажатием.
4. Запуск «песочницы»
Вернитесь на главный экран RethinkDNS.
Нажмите кнопку START. Система запросит разрешение на создание VPN-соединения — подтвердите.
Теперь трафик идет через 1.1.1.1, а доступ к локальной сети для max закрыт.
Важный нюанс: Чтобы приложение не сканировало сеть через Wi-Fi/Bluetooth (соседние точки доступа), обязательно зайдите в настройки Android и отзовите у Max разрешение на «Местоположение» (Location). В Android сканирование эфира технически привязано к GPS.