Як контролювати доступ до Інтернету для кожної програми?


59

Я хотів би використовувати програмне забезпечення для контролю, яка програма може підключитися до Інтернету. Я знаю, що така поведінка пов’язана зі словом «брандмауер», але деякі користувачі Linux дуже засмучені, якщо хтось вимагає персонального брандмауера. Я не хочу засмучувати вас, вимагаючи такої програми.
Я не хочу "захищати порти" чи інші речі, які особистий брандмауер обіцяє в Windows. Я розглядав, iptablesале це не відповідає моїм вимогам.

Тут я побачив чудову відповідь ( "Як заблокувати доступ до Інтернету для програм для вина" ), але налаштувати це дуже незручно.

Чи є програмне забезпечення, яке запитує кожну програму, чи має вона доступ до Інтернету?


на mac є програмне забезпечення під назвою маленький сніг, який робить це. Я думаю, що також є версія для Windows ...
Альвар

Відповіді:


6

На німецькому форумі Ubuntu ( Google-переклад на англійську ) існує сценарій Perl, який, здається, це робить. Я ніколи не пробував цього, і не придивився уважніше до сценарію, але, можливо, він працює для вас. Опис зроблено лише німецькою мовою, тому вам може знадобитися послуга перекладу (наприклад, Google Translate; див. Вище).


Я буду дивитись на це. Цікаво, що може бути правильним інструментом. На жаль, гуї немає, але це не повинно зупинити мене :)
guerda

34

Якщо ви все ще шукаєте подібний додаток, я зараз розробляю саме цю програму: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Мій додаток блокує будь-які невідомі програми (нові версії авторизованої програми заблоковані) і запитує, чи дозволити чи заборонити трафік.

Подивіться на веб-сайт ;-)

знімок екрана


Класно! Я також дивився на ppa, але жоден пакет, незважаючи на додаток, там не створений. Також мені цікаво, чи може він відображати ip, дозволений для читання імені сайту? І я збираюся дотримуватися інструкцій щодо компіляції, я побачив багато порад щодо пакунків ubuntu dep там, і я використаю checkinstall, щоб створити свою локальну копію пакетів .deb, щоб легко керувати оновленнями (видалити / встановити). Можливо, checkinstall може бути використаний і для створення ваших дистрибутивів, я думаю.
Сила Водолія

Ви можете відкрити запит на функцію в Github ( github.com/Douane/Douane/isissue ) :)
ZedTuX

2
е, здається, саме те, що мені було потрібно !! Але я не можу знайти пакет, щоб встановити його на Ubuntu.
azerafati

Все ще не пакет для Ubuntu?
Анвар

1
Douaneapp.com повернувся! :)
ZedTuX

26

Я знайшов зручне рішення, яке вирішує проблему. Ви створюєте групу, якій ніколи не дозволяється користуватися Інтернетом, і запускаєте програму як член цієї групи.

  1. Створіть групу no-internet. Ви НЕ приєднатися до цієї групи

    sudo addgroup no-internet
    
  2. Додайте правило до iptables, яке забороняє всі процеси, що належать до групи, no-internetвикористовувати мережу (використовувати ip6tablesтакож для запобігання трафіку IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Виконати sudo -g no-internet YOURCOMMANDзамість YOURCOMMAND.

Ви можете легко написати сценарій обгортки, який використовує для вас sudo. Ви можете позбутися запиту пароля, додавши

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

або, щось подібне з sudo visudo

Використовуйте правила брандмауера iptables-saveта iptables-restoreзберігайте їх.


1
Я спробував ваш посібник, sudo -g no-internet firefoxпідключається швидше, ніж стандартний. Це не працює.
kenn

1
@kenn Я можу лише сказати, що тут добре працює. Я б здогадався, що ви робите щось не так, створюючи правило. Не зберігаючи правило, не роблячи сценарій виконуваним чи щось подібне.
Тім

Я перезавантажив і застосував вищезазначені правила знову, не
пощастивши

1
працював ідеально для мене, навіть з firefox. спасибі!
Костанос

1
Це, здається, не працює і для мене на Ubuntu 19.04. Мені довелося встановлювати iptables-стійкі, щоб дозволити збереження змін між перезавантаженнями. (Тож ви можете додати це до рішення вище). Однак Firefox sudo -g no-internet не обмежує доступ Firefox до Інтернету. Концептуально таке рішення здається, що воно має спрацювати. Чи є щось основне, що не помічається? Наприклад, чи потрібно нам встановити BOTH ipv4 та ipv6, щоб зробити цю роботу?
PJ Сінгх

5

У Ubuntu вже є брандмауер ufw, але він відключений за замовчуванням. Ви можете ввімкнути та використовувати його за допомогою командного рядка або його фронту , gufw , який можна встановити безпосередньо з програмного центру Ubuntu.

Якщо вам потрібно заблокувати доступ до Інтернету до певної програми, ви можете спробувати LeopardFlower , який все ще знаходиться в бета-версії, і він недоступний у програмному центрі Ubuntu:


4

Запуск програми під іншим користувачем використовуватиме конфігураційні файли для цього користувача, а не ваш.

Ось рішення, яке не потребує зміни правил брандмауера, і працює під тим самим користувачем (через sudo) із зміненим середовищем, де є ваш користувач my_userі додаток, яке ви хочете запустити my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Більш детальну інформацію див man unshareі ця відповідь .

Брандмауер Linux GUI

Якщо ви шукаєте брандмауер графічного інтерфейсу, у мене були хороші результати з OpenSnitch - він ще не знаходиться у ребусі ubuntu, і я би не називав його виробничим рівнем, але слідуючи крокам збирання зі сторінки github, працював для мене.


3

@psusi: Я дуже хочу, щоб люди не розбирали погану та не корисну інформацію. IPTables дозволяє це зробити, тому я навряд чи вважаю це "дурним". Просто сказати "НІ", не розуміючи випадку використання, є дещо вузьким. http://www.debian-administration.org/article/120/Application_level_firewalling

EDIT bodhi.zazen

ПРИМІТКА - ЦЕ ВАРІАНТІВ ВІДНОВЛЕНО З IPTABLES у 2005 році

ДИВІТЬСЯ - http://www.spinics.net/lists/netfilter/msg49716.html

виконувати 34b4a4a624bafe089107966a6c56d2a1aca026d4 Автор: Крістоф Хеллвіг Дата: Вс 14 серпня 17:33:59 2005 -0700

[NETFILTER]: Видаліть зловживання у списку завдань_блокування в ipt {, 6} власнику

Виконайте відповідність cmd / sid / pid, оскільки його не можна виправити, і це перешкоджає блокуванню змін у tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
Для всіх, хто розглядає це позначення: це не повинен бути коментарем, він відповідає на запитання, яке було задано . @ user141987 Однак я рекомендую розширити це, щоб надати більше інформації про те, як налаштувати iptablesреалізацію обмежень щодо програми. Я рекомендую включити важливу інформацію у свою відповідь (і все ж надавати посилання, для довідки).
Елія Каган

2
iptables НЕ фільтрує за додатком.
Пантера

Ця стаття здається дезінформацією, оскільки такої можливості немає. Причина, по якій прохання про створення такої опції в минулому були відхилені, полягає в тому, що це було б по суті недостовірним; програма може просто змінити свою назву.
psusi

3
@psusi Ви говорите: "Якщо ваше ядро ​​було складено за допомогою CONFIG_IP_NF_MATCH_OWNER, ви можете налаштувати брандмауер iptables, щоб дозволити або відхилити пакети на основі команди" невірно? Або просто, що більшість ядер не містять опцію? Якщо це неправильно, чи є джерела інформації, які розкривають її? (Крім того, зауважте, що основна мета обмежень брандмауера для додатків - не намагатися зробити його абсолютно безпечним для запуску ненадійних програм. Мета полягає в першу чергу, щоб дати користувачеві міру контролю за межами вбудованих параметрів конфігурації додатків. )
Елія Каган

Цю опцію було видалено з ядра в 2005 році, за 8 років до даної відповіді - spinics.net/lists/netfilter/msg49716.html і, незважаючи на те, що протилежне стверджує, не можна НЕ застосовувати фільтр додатків за допомогою iptables.
Пантера

3

Ще один варіант - пожежна машина . Він запускає програму всередині пісочниці, де ви контролюєте, чи програма могла бачити мережу:

firejail --net=none firefox

Ця команда запустить браузер Firefox без доступу до Інтернету. Зауважте, що розподіл firejail у репортажі Ubuntu застарів - краще завантажте останню версію LTS з домашньої сторінки firejail.


2

Я знайшов рішення, розміщене тут, як хороше. Він передбачає створення групи користувачів, для якої доступ до Інтернету дозволений , та встановлення правил брандмауера, щоб дозволити доступ лише для цієї групи. Єдиний спосіб отримання програми для доступу до Інтернету - це якщо ним керує член цієї групи. Ви можете запускати програми в цій групі, відкривши оболонку за допомогою sudo -g internet -s.

Щоб підбити підсумок у публікації, яку я пов’язав вище:

  1. Створіть групу "Інтернет", ввівши в оболонку: sudo groupadd internet

  2. Переконайтеся, що користувач, який запустить сценарій нижче, буде доданий до sudoгрупи в /etc/group. Якщо ви остаточно модифікуєте цей файл, вам потрібно буде вийти з системи та ввійти в систему, перш ніж сценарій спрацює нижче.

  3. Створіть сценарій, що містить таке, і запустіть його:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Запустивши вищевказаний сценарій, у вас з'явиться оболонка, в якій можна запускати програми з доступом до Інтернету.

Зауважте, що цей скрипт не робить нічого для збереження та відновлення правил брандмауера. Ви можете змінити сценарій для використання команд iptables-saveі iptables-restoreоболонок.


1

На краще чи гірше, Linux використовує інший підхід. Немає простого графічного інтерфейсу, який би пропонував цю функціональність. В Інтернеті існує багато дискусій на цю тему, і ви можете знайти цікаві дискусії, якщо ви шукаєте в Google. Хоча дебати цікаві, на сьогоднішній день не існує спеціальної групи програмістів, які бажали б написати та підтримувати цю функціональність.

Інструменти, які пропонують цю функціональність у Linux, - це Apparmor, Selinux та Tomoyo.

Жоден із цих інструментів надто легко засвоїти, і всі вони мають переваги та недоліки. Особисто я віддаю перевагу SELinux, хоча SELinux має більш круту криву навчання.

Побачити:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Була (є) програма, на яку вже посилалося, леопарффлау. Я не впевнений у статусі / обслуговуванні.




0

Ні, це неможливо. Це також не є частиною традиційного визначення брандмауера. Це щось, що Microsoft придумала зовсім недавно, намагаючись вирішити свої принципово розбиті проблеми безпеки ОС. Це вважається нерозумним та непрацездатним у спільноті Linux, оскільки одна програма, яка заборонена, може просто запустити іншу програму та отримати доступ таким чином.

Якщо вам не подобається, що програма працює в мережі, коли ви запускаєте її, тоді не запускайте програму.


7
Брандмауер Microsoft був не першим головним брандмауером, який запропонував цю функціональність. Це навіть не перший брандмауер Windows, який запропонував це. BlackIce Defender, ZoneAlarm та ряд інших програмних брандмауерів для Windows передували впровадженню брандмауера Windows Internet Connection за роки. Крім того, у спільноті Linux такого консенсусу немає. Ми часто використовуємо AppArmor (або SELinux) для обмеження поведінки програм (і мені цікаво, чи можна було б адаптувати AppArmor до цієї мети ...). Немає причин, що це "неправильно", щоб контролювати, які програми можуть мати доступ до Інтернету.
Елія Каган

І, як може засвідчити декілька інших відповідей, обмеження брандмауера для кожної програми цілком можливі ; ця функціональність вбудована в iptables / netfilter!
Елія Каган

Ні, ні netfilter, ні iptables не можуть фільтрувати за програмою. Вони можуть фільтрувати за користувачем та портом, але не за програмою.
Пантера

"Можна просто запустити іншого" ???? Тоді, очевидно, що створювач такої програми, яка не блокує дочірніх процесів цільової програми, є надзвичайно хибною.
trusktr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.