Jak zablokować dostęp do Internetu dla niektórych programów w systemie Linux

20

Ostatnio napotkałem problem ograniczenia dostępu do Internetu do określonych programów. Czy ktoś mógłby polecić dobry sposób na zrobienie tego, bez korzystania z konkretnego oprogramowania?

Ilia Rostowcew
źródło

Odpowiedzi:

31

Dla mnie rozwiązanie było proste.

  1. Utwórz, sprawdź poprawność nowej grupy ; dodaj wymaganych użytkowników do tej grupy:
    • Stwórz: groupadd no-internet
    • Uprawomocnić: grep no-internet /etc/group
    • Dodaj użytkownika: useradd -g no-internet username

      Uwaga: Jeśli modyfikujesz już istniejącego użytkownika, powinieneś uruchomić: usermod -a -G no-internet userName sprawdź za pomocą:sudo groups userName

  2. Utwórz skrypt na swojej ścieżce i spraw, aby był wykonywalny:
    • Stwórz: nano /home/username/.local/bin/no-internet
    • Plik wykonywalny: chmod 755 /home/username/.local/bin/no-internet
    • Zawartość: #!/bin/bash
                    sg no-internet "$@"

  3. Dodaj regułę iptables, aby porzucić aktywność sieciową dla grupy bez internetu :


   4. Sprawdź to, na przykład w przeglądarce Firefox, uruchamiając:

  • no-internet "firefox"

Jeśli chcesz zrobić wyjątek i zezwolić programowi na dostęp do sieci lokalnej :

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

UWAGA: W przypadku odrodzenia zasady zostaną zachowane. Na przykład, jeśli uruchomisz program z regułą braku internetu i ten program otworzy okno przeglądarki, nadal będą stosowane reguły.

Ilia Rostowcew
źródło
2
Kilka notatek Ilia: Ad 1: - aby zmodyfikować istniejącego użytkownika: usermod -a -G groupName nazwa_użytkownika - sprawdź za pomocą: sudo groups nazwa_użytkownika Ad 3: - Mam już wiele reguł w iptables, pozycja nowej reguły jest kluczowa . powinna być pierwszą regułą w łańcuchu WYJŚCIE. Dlatego używam wstawki: iptables -I WYJŚCIE 1 -m właściciel --gid-owner no-internet -j DROP Aby zezwolić na dostęp do sieci LAN: upewnij się, że reguły ACCEPT są powyżej reguły DENY. Działa jak marzenie. Użyj go na przykład na Wifiguard. Prog sprawdza wlan pod kątem nieznanych urządzeń, ale „dzwoni do domu” za każdym razem.
Skrypt przekaże tylko polecenie. Jeśli spróbujesz uruchomić program z parametrami, powinieneś użyć „$ @” zamiast „$ 1”. Z jakiegoś powodu musiałem tymczasowo przechowywać go w zmiennej, aby bash mógł go poprawnie przetworzyć: cmd = "$ @"; sg no-internet "$ {cmd}"
on
użyj „nointernet” zamiast „no-internet”. Z jakiegokolwiek powodu Ubuntu 14.04 nie może obsłużyć myślnika, gdy próbujesz użyć sg lub chgrp (monituje o hasło, a następnie kończy się niepowodzeniem).
1
unshare -n YourAppToBlock> użyj „nointernet” zamiast „no-internet”. może „nie \\ - internet”?
SarK0Y
Próbowałem tak jak opisano, ale dla mnie, po dodaniu mnie do „bez internetu” i ustawieniu tablic ip, nie mogę już połączyć się z Internetem (z i bez skryptu bash no-internet).
Viatorus