Jak kontrolować dostęp do Internetu dla każdego programu?

59

Chciałbym użyć oprogramowania do kontrolowania, który program może łączyć się z Internetem. Wiem, że takie zachowanie jest związane ze słowem „zapora ogniowa”, ale niektórzy użytkownicy Linuksa są bardzo zdenerwowani, jeśli ktoś żąda zapory osobistej. Nie chcę cię denerwować, żądając takiego programu.
Nie chcę „zabezpieczać portów” ani innych rzeczy, które zapora osobista zapowiada w systemie Windows. Zajrzałem, iptablesale to nie spełnia moich wymagań.

Widziałem tutaj doskonałą odpowiedź ( „Jak zablokować dostęp do Internetu dla aplikacji do wina” ), ale ustawienie tego jest bardzo niewygodne.

Czy istnieje oprogramowanie, które pyta o każdy program, czy może on uzyskać dostęp do Internetu?

guerda
źródło
na Macu jest oprogramowanie o nazwie mały znicz , który to robi. Wydaje mi się, że jest też wersja dla systemu Windows ...
Alvar

Odpowiedzi:

6

Na niemieckim forum Ubuntu znajduje się skrypt Perla ( przetłumaczony przez Google na angielski ), który wydaje się to robić. Nigdy go nie wypróbowałem i nie przyjrzałem się bliżej skryptowi, ale może to działa dla ciebie. Opis jest tylko w języku niemieckim, więc możesz potrzebować usługi tłumaczeniowej (takiej jak Tłumacz Google; patrz wyżej).

Florian Diesch
źródło
Spojrzę na to. To ciekawe i może być właściwym narzędziem. Niestety nie ma GUI, ale nie powinno mnie to powstrzymywać :)
guerda
34

Jeśli nadal szukasz tego rodzaju aplikacji, obecnie opracowuję dokładnie tę aplikację: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Moja aplikacja blokuje nieznane aplikacje (nowe wersje autoryzowanej aplikacji są blokowane) i pyta, czy zezwalasz na ruch lub go odmawiasz.

Zajrzyj na stronę internetową ;-)

zrzut ekranu

ZedTuX
źródło
Chłodny! Patrzyłem też na ppa, ale nie ma tam żadnego pakietu, mimo że tam jest utworzona aplikacja. Zastanawiam się także, czy może to pokazać IP rozwiązane do czytelnej nazwy strony? I zamierzam postępować zgodnie z instrukcjami kompilacji, widziałem tam wiele wskazówek dotyczących pakietów ubuntu dep i użyję checkinstall, aby utworzyć moją lokalną kopię pakietów .deb w celu łatwego zarządzania aktualizacjami (usuń / zainstaluj). Sądzę, że może być checkinstall może być również używany do tworzenia dystrybucji.
Aquarius Power
Możesz otworzyć żądanie funkcji na Github ( github.com/Douane/Douane/issues ) :)
ZedTuX
2
wygląda na to, czego potrzebowałem !! Ale nie mogę znaleźć pakietu, aby zainstalować go na Ubuntu.
azerafati,
Nadal nie pakiet dla Ubuntu?
Anwar
1
Douaneapp.com powraca! :)
ZedTuX
26

I znaleźć wygodne rozwiązanie, które rozwiązuje ten problem. Tworzysz grupę, która nigdy nie może korzystać z Internetu i uruchamiasz program jako członek tej grupy.

  1. Utwórz grupę no-internet. Czy nie dołączyć do tej grupy

    sudo addgroup no-internet
    
  2. Dodaj regułę do iptables, która uniemożliwia wszystkim procesom należącym do grupy no-internetkorzystanie z sieci (użyj ip6tablesrównież, aby zapobiec ruchowi IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Wykonaj sudo -g no-internet YOURCOMMANDzamiast YOURCOMMAND.

Możesz łatwo napisać skrypt opakowujący, który używa sudo dla Ciebie. Możesz pozbyć się pytania o hasło, dodając

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

lub coś podobnego z sudo visudo

Użyj iptables-savei, iptables-restoreaby zachować reguły zapory.

Tim
źródło
1
Próbowałem twojego przewodnika, sudo -g no-internet firefoxłączy się szybciej niż domyślny. To nie działa
hodowla
1
@kenn Mogę tylko powiedzieć, że tutaj działa dobrze. Domyślam się, że robisz coś złego podczas tworzenia reguły. Nie zapisywanie reguły, niewykonywanie skryptu ani nic podobnego.
Tim
Ponownie uruchomiłem i ponownie zastosowałem powyższe zasady bez powodzenia
kenn
1
działał dla mnie idealnie, nawet z Firefox. Dziękuję Ci!
Kostanos,
1
Wydaje mi się, że to również nie działa na Ubuntu 19.04. Musiałem zainstalować iptables-persistent, aby umożliwić zapisywanie zmian między restartami. (Więc możesz dodać to do powyższego rozwiązania). Jednak sudo -g no-internet firefox nie ogranicza Firefoxowi dostępu do Internetu. Pod względem koncepcyjnym to rozwiązanie wydaje się działać. Czy przeoczy się coś fundamentalnego? Na przykład, czy musimy skonfigurować OBA ipv4 i ipv6, aby to zadziałało?
PJ Singh
5

W Ubuntu jest już zapora ogniowa ufw, ale jest ona domyślnie wyłączona. Możesz włączyć i używać go za pomocą wiersza polecenia lub jego interfejsu GUFW , który można zainstalować bezpośrednio z Centrum oprogramowania Ubuntu.

Jeśli chcesz zablokować dostęp do Internetu dla określonej aplikacji, możesz wypróbować LeopardFlower , który jest nadal w wersji beta i nie jest dostępny w Centrum oprogramowania Ubuntu:

heiko81
źródło
4

Uruchomienie programu pod innym użytkownikiem spowoduje użycie plików konfiguracyjnych dla tego użytkownika, a nie twojego.

Oto rozwiązanie, które nie wymaga modyfikacji reguł zapory i działa pod tym samym użytkownikiem (przez sudo) w zmodyfikowanym środowisku, w którym znajduje się użytkownik my_useri aplikacja, którą chcesz uruchomić my_app:

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

Aby uzyskać więcej informacji, zobacz man unsharei ta odpowiedź .

Zapora graficzna systemu Linux

Jeśli szukasz zapory graficznej z interfejsem GUI, miałem dobre wyniki z OpenSnitch - nie ma jeszcze repozytoriów ubuntu i nie nazwałbym tego poziomem produkcyjnym, ale działały dla mnie kroki kompilacji ze strony github .

ccpizza
źródło
3

@psusi: Naprawdę chciałbym, żeby ludzie nie sprzedawali złych i nieprzydatnych informacji. IPTables pozwala to zrobić, więc nie uważam tego za „nierozsądne”. Samo powiedzenie „NIE” bez zrozumienia przypadku użycia jest nieco zawężone. http://www.debian-administration.org/article/120/Application_level_firewalling

EDYCJA bodhi.zazen

UWAGA - TA OPCJA ZOSTAŁA USUNIĘTA Z IPTABLES W 2005 ROKU, 8 LAT PRZED ZAKOŃCZENIEM ODPOWIEDZI

ZOBACZ - http://www.spinics.net/lists/netfilter/msg49716.html

popełnić 34b4a4a624bafe089107966a6c56d2a1aca026d4 Autor: Christoph Hellwig Data: Nd 14 sierpnia 17:33:59 2005 -0700

[NETFILTER]: Usuń nadużycie tasklist_lock u właściciela ipt {, 6}

Rozerwij dopasowanie cmd / sid / pid, ponieważ jest nieusuwalny, uszkodzony i przeszkadza w blokowaniu zmian w tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
użytkownik141987
źródło
2
Dla każdego, kto zastanawia się nad oznaczeniem tego: To nie powinien być komentarz, ponieważ odpowiada na zadane pytanie . @ user141987 Zalecam jednak rozwinięcie tego, aby zapewnić więcej informacji o tym, jak skonfigurować iptableswdrażanie ograniczeń dla poszczególnych aplikacji. Zalecam podanie w odpowiedzi ważnych informacji (i podanie linku w celach informacyjnych).
Eliah Kagan
2
iptables NIE filtruje według aplikacji.
Panther
Ten artykuł wydaje się być dezinformacją, ponieważ nie ma takiej opcji. Powodem, dla którego wnioski o utworzenie takiej opcji w przeszłości zostały odrzucone, jest to, że byłoby to z natury zawodne; aplikacja może po prostu zmienić nazwę.
psusi
3
@psusi Czy mówisz „Jeśli twoje jądro zostało skompilowane z CONFIG_IP_NF_MATCH_OWNER, możesz skonfigurować zaporę iptables, aby zezwalać na pakiety lub odrzucać je na podstawie poleceń” jest niepoprawne? Lub po prostu, że większość jąder nie zawiera tej opcji? Jeśli jest to niepoprawne, czy istnieją źródła informacji, które je obalają? (Należy również pamiętać, że głównym celem ograniczeń zapory ogniowej dla poszczególnych aplikacji nie jest próba zapewnienia całkowicie bezpiecznego uruchamiania niezaufanych aplikacji. Celem jest przede wszystkim zapewnienie użytkownikowi kontroli poza wbudowanymi opcjami konfiguracji aplikacji. )
Eliah Kagan
Ta opcja została usunięta z jądra w 2005 r., 8 lat przed udzieleniem tej odpowiedzi - spinics.net/lists/netfilter/msg49716.html i mimo że twierdzenia przeciwne są niedokładne, NIE można filtrować aplikacji za pomocą iptables.
Panther
3

Inną opcją jest firejail . Uruchamia aplikację w piaskownicy, w której kontrolujesz, czy aplikacja może zobaczyć sieć:

firejail --net=none firefox

To polecenie uruchomi przeglądarkę Firefox bez dostępu do Internetu. Pamiętaj, że dystrybucja firejail w repozytorium Ubuntu jest nieaktualna - lepiej pobierz jej najnowszą wersję LTS ze strony głównej firejail.

Dimitar II
źródło
2

Znalazłem opublikowane tutaj rozwiązanie , które jest dobre. Polega ona na utworzeniu grupy użytkowników, dla których dostęp do Internetu jest dozwolony , oraz skonfigurowaniu reguł zapory sieciowej, aby umożliwić dostęp tylko dla tej grupy. Jedynym sposobem, aby aplikacja uzyskała dostęp do Internetu, jest uruchomienie jej przez członka tej grupy. Możesz uruchamiać programy w tej grupie, otwierając powłokę za pomocą sudo -g internet -s.

Podsumowując to, co jest w poście, który zamieściłem powyżej:

  1. Utwórz grupę „Internet”, wpisując następujące polecenie w powłoce: sudo groupadd internet

  2. Upewnij się, że użytkownik, który uruchomi poniższy skrypt, zostanie dodany do sudogrupy w /etc/group. Jeśli skończysz modyfikować ten plik, musisz się wylogować i zalogować ponownie, zanim poniższy skrypt zacznie działać.

  3. Utwórz skrypt zawierający następujące elementy i uruchom go:

    #!/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. Po uruchomieniu powyższego skryptu będziesz mieć powłokę, w której możesz uruchamiać aplikacje z dostępem do Internetu.

Pamiętaj, że ten skrypt nie robi nic, aby zapisać i przywrócić reguły zapory. Możesz zmodyfikować skrypt, aby używał poleceń iptables-savei iptables-restorepowłoki.

znak
źródło
1

Na lepsze lub gorsze, Linux stosuje inne podejście. Nie ma prostego interfejsu graficznego, który oferowałby tę funkcjonalność. Istnieje wiele dyskusji na ten temat w Internecie i można znaleźć ciekawe dyskusje, jeśli szukasz w wyszukiwarce Google. Chociaż debata jest interesująca, do tej pory nie było dedykowanej grupy programistów, którzy chcieliby pisać i utrzymywać tę funkcjonalność.

Narzędziami oferującymi tę funkcjonalność w systemie Linux są Apparmor, Selinux i Tomoyo.

Żadne z tych narzędzi nie jest zbyt łatwe do nauczenia się i wszystkie mają zalety i wady. Osobiście wolę SELinux, chociaż SELinux ma bardziej stromą krzywą uczenia się.

Widzieć:

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

Była (jest) aplikacja, do której już się odwołano, leopardflower. Nie jestem pewien statusu / utrzymania.

Pantera
źródło
0

Nie, nie jest to możliwe. Nie jest to również część tradycyjnej definicji zapory. Jest to coś, co Microsoft wymyślił dość niedawno, próbując obejść swoje zasadniczo zepsute problemy bezpieczeństwa systemu operacyjnego. W społeczności Linuksa jest to uważane za nierozsądne i niewykonalne, ponieważ jeden niedozwolony program może po prostu uruchomić inny program i uzyskać w ten sposób dostęp.

Jeśli nie podoba ci się to, co program robi w sieci po uruchomieniu, nie uruchamiaj tego programu.

psusi
źródło
7
Zapora firmy Microsoft nie była pierwszą dużą zaporą oferującą tę funkcjonalność. To nie była nawet pierwsza zapora systemu Windows, która ją oferuje. BlackIce Defender, ZoneAlarm i wiele innych zapór programowych dla systemu Windows poprzedzają wprowadzenie zapory połączenia internetowego systemu Windows o lata. Co więcej, w społeczności Linuksa nie ma takiego konsensusu. Często używamy AppArmor (lub SELinux), aby ograniczyć zachowanie aplikacji (i zastanawiam się, czy AppArmor można by dostosować do tego celu ...). Nie ma powodu, aby „źle” chcieć kontrolować, które aplikacje mogą uzyskać dostęp do Internetu.
Eliah Kagan
I, jak potwierdza kilka innych odpowiedzi, ograniczenia zapory ogniowej dla aplikacji są całkiem możliwe ; ta funkcja jest wbudowana w iptables / netfilter!
Eliah Kagan
Nie, ani netfilter, ani iptables nie mogą filtrować według aplikacji. Mogą filtrować według użytkownika i portu, ale nie według aplikacji.
Panther
„Można po prostu uruchomić inny” ???? Zatem oczywiście twórca takiego programu, który nie blokuje procesów potomnych programu docelowego, jest bardzo wadliwy.
trusktr