how to block specific domains in hosts file?

Solution 1:

From Ubuntu 14.04 LTS (Trusty Tahr) and above, which already have NetworkManager and use dnsmasq by default you don't need to install it.

Just create a file /etc/NetworkManager/dnsmasq.d/local:

address=/tumblr.com/127.0.0.1

and reboot or restart NetworkManager

$ sudo service network-manager restart

This will block tumblr.com and all of its subdomains by redirecting it to localhost (127.0.0.1).

Note this won't do anything unless you also set up your connection to use localhost/dnsmasq for name resolution.


On older than Trusty versions install dnsmasq:

$ sudo apt-get install dnsmasq

Then in /etc/dnsmasq.conf (which you may have to create) add the line:

address=/tumblr.com/127.0.0.1

Solution 2:

The /etc/hosts file does NOT support wildcard subdomains. i.e. you can't say 127.0.0.1 *.tumblr.com and have it block all URLs of the form something.tumblr.com.

If you want to block these at the browser level, you can either use a plugin or better, a filtering proxy like Privoxy.

If you want to block these at the network level, so that no one on that computer can access the sites, you need a simple firewall rule to block something.tumblr.com's IP range, which at first glance appears to be 50.97.143.0/24, i.e. 50.97.143.0-50.97.143.255.