Come controllare l'accesso a Internet per ciascun programma?


60

Vorrei utilizzare un software per controllare quale programma può connettersi a Internet. So che questo comportamento è associato alla parola "firewall", ma alcuni utenti Linux sono molto turbati se qualcuno richiede un firewall personale. Non voglio farti arrabbiare dalla richiesta di un simile programma.
Non voglio "proteggere le porte" o altre cose promesse da Personal Firewall su Windows. Ho esaminato iptablesma non soddisfa i miei requisiti.

Ho visto una risposta eccellente qui ( "Come bloccare l'accesso a Internet per le applicazioni del vino" ) ma è molto scomodo da configurare.

Esiste un software che richiede a ciascun programma se può accedere a Internet?


su mac c'è un software chiamato piccolo boccino che fa questo. Penso che ci sia anche una versione di Windows ...
Alvar,

Risposte:


6

C'è uno script Perl nel forum tedesco di Ubuntu ( Google tradotto in inglese ) che sembra farlo. Non l'ho mai provato e non ho dato un'occhiata più da vicino alla sceneggiatura, ma forse funziona per te. La descrizione è solo in tedesco, quindi potresti aver bisogno di un servizio di traduzione (come Google Translate; vedi sopra).


Lo darò un'occhiata. È interessante che possa essere lo strumento giusto. Sfortunatamente, non c'è gui, ma non dovrebbe fermarmi :)
guerda

35

Se stai ancora cercando questo tipo di applicazione, attualmente sto sviluppando esattamente quell'applicazione : http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

La mia applicazione blocca qualsiasi applicazione sconosciuta (le nuove versioni di un'applicazione autorizzata sono bloccate) e ti chiede se ne consenti o neghi il traffico.

Dai un'occhiata al sito web ;-)

immagine dello schermo


Freddo! Ho anche guardato ppa ma nessun pacchetto lì nonostante l'applicazione sia stata creata lì. Inoltre mi chiedo se potrebbe mostrare l'ip risolto in un nome di sito leggibile? E seguirò le istruzioni di compilazione, ho visto molti suggerimenti per i pacchetti di ubuntu dep lì, e userò checkinstall per creare la mia copia locale di pacchetti .deb per gestire facilmente gli aggiornamenti (rimuovi / installa). Forse checkinstall potrebbe essere usato per creare anche i tuoi distributori.
Aquarius Power,

Puoi aprire la richiesta di funzionalità su Github ( github.com/Douane/Douane/issues ) :)
ZedTuX

2
sembra esattamente quello di cui avevo bisogno !! Ma non riesco a trovare un pacchetto per installarlo su Ubuntu.
Azerafati,

Non hai ancora un pacchetto per Ubuntu?
Anwar,

1
Douaneapp.com è tornato! :)
ZedTuX

26

Ho trovato una soluzione conveniente che risolve il problema. Si crea un gruppo a cui non è mai consentito l'uso di Internet e si avvia il programma come membro di questo gruppo.

  1. Crea un gruppo no-internet. Non non aderire a questo gruppo

    sudo addgroup no-internet
    
  2. Aggiungi una regola a iptables che impedisce a tutti i processi appartenenti al gruppo no-internetdi utilizzare la rete (utilizzare ip6tablesper impedire anche il traffico IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Eseguire sudo -g no-internet YOURCOMMANDinvece di YOURCOMMAND.

Puoi facilmente scrivere uno script wrapper che usa sudo per te. È possibile eliminare la richiesta della password aggiungendo

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

o qualcosa di simile con sudo visudo

Utilizzare le regole del firewall iptables-savee iptables-restoreper persistere.


1
Ho provato la tua guida, si sudo -g no-internet firefoxconnette più velocemente di quella predefinita. Non funziona
kenn,

1
@kenn Posso solo dire che funziona bene qui. Immagino che stai facendo qualcosa di sbagliato durante la creazione della regola. Non salvare la regola, non rendere eseguibile lo script o qualcosa del genere.
Tim

Ho riavviato e applicato di nuovo le regole precedenti senza fortuna
kenn

1
ha funzionato perfettamente per me, anche con Firefox. grazie!
Kostanos,

1
Questo non sembra funzionare neanche per me, su Ubuntu 19.04. Ho dovuto installare iptables-persistent per consentire il salvataggio delle modifiche tra i riavvii. (Quindi potresti voler aggiungere questo alla soluzione sopra). Tuttavia, sudo -g no-internet firefox non impedisce a Firefox di accedere a Internet. Concettualmente, questa soluzione sembra funzionare. C'è qualcosa di fondamentale che viene trascurato? Ad esempio, dobbiamo configurare ENTRAMBE ipv4 e ipv6 per farlo funzionare?
PJ Singh,

5

Esiste già un firewall in Ubuntu ufw, ma è disabilitato per impostazione predefinita. Puoi abilitarlo e usarlo dalla riga di comando o dal suo frontend, gufw , che è installabile direttamente da Ubuntu Software Center.

Se è necessario bloccare l'accesso a Internet a un'applicazione specifica, è possibile provare LeopardFlower , che è ancora in versione beta e non è disponibile in Ubuntu Software Center:


4

L'esecuzione di un programma con un altro utente utilizzerà i file di configurazione per quell'utente e non per i tuoi.

Ecco una soluzione che non richiede la modifica delle regole del firewall e viene eseguita nello stesso utente (tramite sudo) con un ambiente modificato, dove si trova l'utente my_usere l'app che si desidera eseguire è my_app:

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

Per maggiori dettagli vedi man unsharee questa risposta .

Firewall GUI Linux

Se stai cercando un firewall GUI ho avuto buoni risultati con OpenSnitch - non è ancora nei repository di Ubuntu e non lo definirei a livello di produzione, ma seguire i passaggi di compilazione dalla pagina github ha funzionato per me.


3

@psusi: Vorrei davvero che le persone non vendessero informazioni cattive e non utili. IPTables consente di farlo, quindi difficilmente lo considero "insensato". Il solo dire "NO" senza comprendere un caso d'uso ha una mentalità piuttosto ristretta. http://www.debian-administration.org/article/120/Application_level_firewalling

EDIT bodhi.zazen

NOTA: QUESTA OPZIONE È STATA RIMOSSA DALL'IPTABL NEL 2005, 8 ANNI PRIMA CHE QUESTA RISPOSTA È STATA PUBBLICATA

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

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Autore: Christoph Hellwig Data: dom 14 ago 17:33:59 2005 -0700

[NETFILTER]: rimuovi l'abuso tasklist_lock nel proprietario ipt {, 6}

Copia la corrispondenza cmd / sid / pid poiché non risolvibile e ostacola il blocco delle modifiche a 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
A chiunque stia considerando di contrassegnare questo: questo non dovrebbe essere un commento, ma risponde alla domanda che è stata posta . @ user141987 Consiglio vivamente di ampliarlo per fornire ulteriori informazioni su come impostare l' iptablesimplementazione delle restrizioni per applicazione. Ti consiglio di includere le informazioni importanti nella tua risposta (e di fornire comunque il link, come riferimento).
Eliah Kagan,

2
iptables NON filtra per applicazione.
Pantera

L'articolo sembra essere disinformato poiché non esiste tale opzione. Il motivo per cui le richieste di creare tale opzione in passato sono state respinte è perché sarebbe intrinsecamente inaffidabile; un'applicazione può semplicemente cambiare il suo nome.
psusi

3
@psusi Stai dicendo "Se il tuo kernel è stato compilato con CONFIG_IP_NF_MATCH_OWNER, allora puoi configurare il tuo firewall iptables per consentire o rifiutare i pacchetti in base al comando" non è corretto? O semplicemente che la maggior parte dei kernel non include l'opzione? Se ciò non è corretto, ci sono fonti di informazioni che lo smascherano? (Si noti inoltre che lo scopo principale delle restrizioni del firewall per applicazione non è quello di cercare di rendere perfettamente sicuro l'esecuzione di applicazioni non attendibili. Lo scopo è principalmente quello di fornire all'utente una misura di controllo oltre alle opzioni di configurazione integrate delle applicazioni. )
Eliah Kagan,

Questa opzione è stata rimossa dal kernel nel 2005, 8 anni prima che fosse data questa risposta - spinics.net/lists/netfilter/msg49716.html e nonostante affermazioni contrarie non siano accurate, NON è possibile filtrare l'applicazione con iptables.
Pantera,

3

Un'altra opzione è firejail . Esegue l'applicazione all'interno del sandbox dove controlli se l'applicazione è in grado di vedere la rete:

firejail --net=none firefox

Questo comando avvierà il browser Firefox senza accesso a Internet. Nota che la distribuzione firejail nel repository di Ubuntu è obsoleta - scarica meglio la sua ultima versione LTS dalla home page di firejail.


2

Ho trovato la soluzione pubblicata qui per essere una buona. Implica la creazione di un gruppo di utenti per il quale è consentito l' accesso a Internet e l'impostazione di regole del firewall per consentire l'accesso solo a questo gruppo. L'unico modo per un'applicazione di accedere a Internet è se è gestito da un membro di questo gruppo. È possibile eseguire programmi in questo gruppo aprendo una shell con sudo -g internet -s.

Per ricapitolare cosa c'è nel post che ho linkato sopra:

  1. Crea il gruppo "internet" digitando quanto segue in una shell: sudo groupadd internet

  2. Assicurarsi che l'utente che eseguirà lo script seguente sia aggiunto al sudogruppo in /etc/group. Se si finisce per modificare questo file, sarà necessario disconnettersi e riconnettersi prima che lo script seguente funzioni.

  3. Creare uno script contenente quanto segue ed eseguirlo:

    #!/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. Eseguendo lo script sopra, avrai una shell in cui puoi eseguire applicazioni con accesso a Internet.

Si noti che questo script non fa nulla per salvare e ripristinare le regole del firewall. Potresti voler modificare lo script per usare i comandi iptables-savee iptables-restoreshell.


1

Nel bene o nel male, Linux usa un approccio diverso. Non esiste una semplice interfaccia grafica per offrire questa funzionalità. Ci sono molte discussioni su questo argomento su Internet e puoi trovare discussioni interessanti se cerchi su Google. Mentre il dibattito è interessante, ad oggi non c'è stato un gruppo dedicato di programmatori che volessero scrivere e mantenere questa funzionalità.

Gli strumenti che offrono questa funzionalità in Linux sono Apparmor, Selinux e Tomoyo.

Nessuno di questi strumenti è eccessivamente facile da imparare e tutti presentano vantaggi e svantaggi. Personalmente preferisco SELinux, sebbene SELinux abbia una curva di apprendimento più ripida.

Vedere:

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

C'era (è) un'applicazione a cui è già stato fatto riferimento, leopardflower. Non sono sicuro dello stato / manutenzione.




0

No, non è possibile. Inoltre, non fa parte della definizione tradizionale di firewall. È qualcosa che Microsoft ha escogitato abbastanza recentemente nel tentativo di documentare i loro problemi di sicurezza del sistema operativo sostanzialmente rotti. È considerato insensato e impraticabile nella comunità Linux perché un programma non consentito può semplicemente eseguire un altro programma che è e ottenere l'accesso in quel modo.

Se non ti piace cosa sta facendo un programma sulla rete quando lo esegui, allora non eseguire quel programma.


7
Il firewall di Microsoft non è stato il primo firewall principale a offrire questa funzionalità. Non è stato nemmeno il primo firewall di Windows a offrirlo. BlackIce Defender, ZoneAlarm e una varietà di altri firewall software per Windows precedono da anni l'introduzione di Windows Internet Connection Firewall. Inoltre, non esiste tale consenso nella comunità Linux. Usiamo spesso AppArmor (o SELinux) per limitare il comportamento delle applicazioni (e mi chiedo se AppArmor potrebbe essere adattato a questo scopo ...). Non c'è motivo per cui sia "sbagliato" voler controllare quali app possono accedere a Internet.
Eliah Kagan,

E, come possono testimoniare diverse altre risposte, le restrizioni del firewall per applicazione sono del tutto possibili ; questa funzionalità è integrata in iptables / netfilter!
Eliah Kagan,

No, né netfilter né iptables possono filtrare per applicazione. Possono filtrare per utente e porta ma non per applicazione.
Pantera

"Può semplicemente eseguirne un altro" ???? Quindi, ovviamente, il creatore di un tale programma che non blocca i processi figlio del programma target è enormemente difettoso.
trusktr,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.