Local ad blocker. Like Pi-hole but local and using your operating system.
Go to file
Ian G Canino 1b843aaa55
Check if $XDG_CONFIG_HOME is set.
Check to see if the end user has chosen to comply with the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables)
2021-03-08 20:59:20 -05:00
.github Update FUNDING.yml 2021-03-07 17:24:44 +01:00
docs Bump lodash from 4.17.15 to 4.17.19 in /docs 2020-07-20 05:52:56 +00:00
media Delete patreon.png 2021-01-10 12:32:07 +01:00
LICENSE Initial commit 2020-01-03 07:41:49 +01:00
maza Check if $XDG_CONFIG_HOME is set. 2021-03-08 20:59:20 -05:00
README.md Update README.md 2021-01-10 12:31:46 +01:00

🥇 Maza was Top 1 in Hacker News

Comments: https://news.ycombinator.com/item?id=22717650

demo

Like Pi-hole but local and using your operating system

Simple, native and efficient local ad blocker. Bash script compatible with MacOS, Linux and BSD.

  • You don't have to install any browser extensions or applications, you just use the tools of your operating system.
  • You update the list of DNS to be blocked with a single command.
  • It affects any browser or software installed.
  • Pure Opensource.
  • Just bash.
demo

Help me continue to improve

Buy Me a Coffee at ko-fi.com

📟 Commands

📡 Update database

maza update 

🔨 Start

sudo maza start 

🛠 Stop

sudo maza stop 

⚖️ Status

maza status 

⚙️ Install

😥 Requirements

  • bash 4.0 or higher
  • curl
  • Only macOS users, gsed: brew install gnu-sed

Then you do this.

curl -o maza https://raw.githubusercontent.com/tanrax/maza-ad-blocking/master/maza && chmod +x maza && sudo mv maza /usr/local/bin

Optional but recommended, make a backup of your hosts file.

sudo cp /etc/hosts /etc/hosts.backup

🤖 Auto update of domains to be blocked

Open your cron.

crontab -e

Add the following line at the end.

@daily maza update

🔪 Uninstall

sudo rm /usr/local/bin/maza && sudo rm -r ~/.maza

DNSMASQ

Unfortunately the hosts file does not support sub-domains (wildcards), which is necessary to correctly filter all DNS. You will need to install locally a server for that purpose, Maza supports the Dnsmasq format.

MacOS

1 Install

brew install dnsmasq

2 Configure

Edit the file.

/usr/local/etc/dnsmasq.conf

Add the following line at the end.

conf-file=(your user path)/.maza/dnsmasq.conf

Example

conf-file=/Users/myuser/.maza/dnsmasq.conf

Start DNSMASQ.

sudo brew services stop dnsmasq
sudo brew services start dnsmasq

3 Tell your OS to use your DNS server

Delete the list of macOS DNS servers and add the 3 addresses. The first one will be your local server, and the other 2 belong to OpenDNS, which you can use any other.

127.0.0.1
208.67.222.222
208.67.220.220
network macos

Refresh your DNS cache

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

4 Restart/Start Maza

sudo maza stop
sudo maza start

Debian/Ubuntu with Gnome Shell

1 Install

sudo apt update
sudo apt install dnsmasq

2 Configure

Edit file in path.

/etc/dnsmasq.conf

Add the following line at the end.

conf-file=(your user path)/.maza/dnsmasq.conf

Example

conf-file=/home/myuser/.maza/dnsmasq.conf

Start DNSMASQ.

sudo systemctl stop dnsmasq
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

3 Tell your OS to use your DNS server

In Gnome Shell, open Settings->Nework. Click in the sprocket of your connection.

network macos

Add your local server (dnsmasq), and the other 2 belong to OpenDNS, which you can use any other.

127.0.0.1,208.67.222.222,208.67.220.220
network macos

4 Restart/Start Maza

sudo maza stop
sudo maza start

Bonus: dnsmasq is in charge of solving all DNS

Add in configure file: /usr/local/etc/dnsmasq.conf

no-resolv
server=208.67.222.222
server=208.67.220.220

Bonus: dnsmasq have localhost domains

If you want all your .localhost domains, for example, point to localhost add in configure file: /usr/local/etc/dnsmasq.conf or /etc/dnsmasq.conf.

address=/.localhost/127.0.0.1

⚠️ CAUTION

  • Only compatible with Linux and macOS operating systems.
  • Remember to make a backup copy of /etc/hosts in case of unforeseen circumstances, neither the project nor its author will be responsible for any possible repercussions derived from not carrying out this action.

🧑‍🎨 Credits

Andros Fenollosa