Существует ли интерактивный брандмауэр для исходящего трафика в Ubuntu?

3575
GJ.

Я хочу запретить некоторым программам звонить домой и разрешить другим программам получать доступ только к определенным веб-серверам.

Есть ли способ интерактивно разрешить или отклонить исходящую связь от отдельных программ в Ubuntu?

4

4 ответа на вопрос

1
nik

Это был бы netfilter / ipfilter с некоторым сценарием, который делал бы вещи в интерактивном режиме (возможно, с хорошим API, доступным в Ubuntu), используя фоновые сценарии.

На этой странице UbuntuForums есть старое обсуждение .
Также смотрите страницы Ubuntu IPTablesHowTo и Firewall .

1
user50610

Вы могли бы попробовать Anoubis . Доступны инструкции по установке и пакеты для Karmic Koala (я новичок в superuser, так что вам нужно будет найти их самостоятельно>: - S Подсказка: на странице загрузки прокрутите вниз до "Распространения").

1
stribika

Ну, не совсем интерактивно, но я знаю о 3 способах ограничения доступа к программам в сети.

  1. По умолчанию linux назначает разрешения пользователям, и каждая программа, которую они запускают, имеет одинаковые разрешения. Запустите ненадежную программу как отдельный пользователь. Это довольно просто, если вы можете это сделать. (Иногда вам не нравится, когда программа запрашивает привилегии root.) Добавьте следующее правило брандмауэра:

    iptables -A OUTPUT -m owner --uid-owner $ -j DROP 
  2. Если вы не боитесь исправления ядра, попробуйте grsecurity . Это позволяет разные разрешения для разных исполняемых файлов для одного и того же пользователя. Это, вероятно, лучший способ, потому что вы можете интегрировать его с правилами iptables и указать подробные ограничения. Правила должны выглядеть примерно так:

    ... role your_regular_user u ... subject /path/to/untrusted/program connect disabled ... ... 
  3. Отключите функцию connect () с помощью LD_PRELOAD. Это самый уродливый способ использовать его, только если у вас нет другого выбора. Вам понадобится такая библиотека:

    #include <errno.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h>  int connect(int sockfd, struct sockaddr const* addr, socklen_t addrlen) { errno = ECONNREFUSED; printf("connection refused\n"); return -1; } 

    Скомпилируйте это с

    gcc -fPIC -shared -Wl,-soname,fake_connect fake_connect.c -o libfake_connect.so 

    Запустите программу с

    LD_PRELOAD="./libfake_connect.so" ./untrusted_program 
0
Praveen Sripati

Я использовал gufw в течение некоторого времени, это приятно и легко установить / настроить. gufw не поставляется с установками Ubuntu. Вы должны установить его вручную «sudo apt-get install gufw».

Вот некоторые из ссылок.

https://help.ubuntu.com/community/Gufw