I would like to use a software to control which program may connect to the internet. I know that this behaviour is associated with the word "firewall", but some Linux users are very upset if somebody demands a Personal Firewall. I don't want to upset you by demand such a program.
I don't want to "secure ports" or other stuff a Personal Firewall promises on Windows. I looked into iptables
but it does not fit my requirements.
I saw an excellent answer here ("How to block internet access for wine applications") but it's very uncomfortable to set this up.
Is there a software that asks for each program if it may access the internet?
I found a convenient solution that solves the problem. You create a group that is never allowed to use the internet and start the program as a member of this group.
Create a group
no-internet
. Do not join this groupAdd a rule to iptables that prevents all processes belonging to the group
no-internet
from using the network (useip6tables
to also prevent IPv6 traffic)sudo -g no-internet YOURCOMMAND
instead ofYOURCOMMAND
.You can easily write a wrapper script that uses sudo for you. You can get rid of the password prompt by adding
or, something similar with
sudo visudo
Use the
iptables-save
andiptables-restore
to persist firewall rules.In case you're still looking for this kind of application, I am currently developing exactly that application: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane
My application blocks any unknown applications (new versions of an authorized application are blocked) and asks you if you Allow or Deny its traffic.
Have a look at the website ;-)
Another option is firejail. It runs the application inside sandbox where you control if the application could see the network:
This command will start Firefox browser without internet access. Note that the firejail distribution in the Ubuntu repo is outdated - better download its latest LTS version from the firejail home page.
There is a Perl script in the German Ubuntu forum (Google-translated to English) that seems to do that. I never tried it and I didn't take a closer look at the script, but maybe it works for you. The description is in German only so you may need a translation service (like Google Translate; see above).
There is already a firewall in Ubuntu,
ufw
, but it is disabled by default. You can enable and use it by the command line or its frontend, gufw, that is installable directly from the Ubuntu Software Centre.If you need to block the internet access to a specific application, you can try LeopardFlower, which is still in beta version and it is not available in the Ubuntu Software Centre:
Running a program under another user will use the config files for that user and not yours.
Here is a solution that does not require modifying the firewall rules, and runs under the same user (via
sudo
) with a modified environment, where your user ismy_user
and the app you want to run ismy_app
:For more details see
man unshare
and this answer.Linux GUI firewall
If you are looking for a GUI firewall I've had good results with OpenSnitch — it's not yet in ubuntu repos and I wouldn't call it production-level, but following the build steps from the github page worked for me.
@psusi: I really wish people wouldn't peddle bad and not useful information. IPTables allows one to do this, so I'd hardly consider it "foolhardy". Just saying "NO" without understanding a use case is somewhat narrow minded. http://www.debian-administration.org/article/120/Application_level_firewalling
EDIT bodhi.zazen
NOTE - THIS OPTION WAS REMOVED FROM IPTABLES IN 2005, 8 YEARS BEFORE THIS ANSWER WAS POSTED
SEE - http://www.spinics.net/lists/netfilter/msg49716.html
I have found the solution posted here to be a good one. It involves creating a user-group for which internet access is allowed, and setting up firewall rules to allow access only for this group. The only way for an application to access the internet is if it is run by a member of this group. You can run programs under this group by opening a shell with
sudo -g internet -s
.To recap what's in the post I linked above:
Create the "internet" group by typing the following into a shell:
sudo groupadd internet
Ensure that the user who will run the script below is added to the
sudo
group in/etc/group
. If you end up modifying this file, then you will need to log out and back in before the script below will work.Create a script containing the following, and run it:
By running the above script, you will have a shell in which you can run applications with internet access.
Note that this script doesn't do anything to save and restore your firewall rules. You may wish to modify the script to use the
iptables-save
andiptables-restore
shell commands.Try Leopard Flower. It has a GUI and per-application restrictions.
For better or worse, Linux uses a different approach. There is no simple graphical interface to offer this functionality. There are many discussions on this topic on the internet and you can find interesting discussions if you google search. While debate is interesting, to date there has not been a dedicated group of programmers wanting to write and maintain this functionality.
The tools that offer this functionality in Linux are Apparmor, Selinux, and Tomoyo.
None of these tools are overly easy to learn and all have advantages and disadvantages. Personally I prefer SELinux, although SELinux has a steeper learning curve.
See:
http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/
There was (is) an application that has been referenced already, leopardflower. I am not sure of the status / maintance.