AdBlock dla iOS

Moje komputery radzą sobie z reklamami. Wtyczka AdBlockPlus doskonale spisuje się w Safari i Firefoxie. Niestety nie da się czegoś podobnego zainstalować na iPhone czy iPadzie. Podobno są jakieś rozwiązania dla Androida, ale nie znam się.

By pozbyć się reklam, jedynym rozwiązaniem jest filtrować je, zanim trafią do urządzenia z iOS.

Rozwiązanie ma parę wad:

  • nie blokuje wszystkiego
  • nie działa selektywnie, bardzo trudno wyłączyć blokowanie reklam na wybranych stronach
  • nie da się dodawać własnych blokad ad-hoc

Poniżej jest przepis jak uruchomić filtrowanie reklam przy pomocy serwera z Debianem lub podobną dystrybucją Linuksa.

Opis sytuacji

W sieci domowej mam serwer (do tych celów używam napęd NAS, który się strasznie nudzi, ale może to też być np. RaspberryPi). Serwer ma stały adres IP w sieci domowej: 192.168.1.2. To bardzo ważne, o czym później. Oczywiście, serwer musi mieć dostęp do internetu.

Na serwerze zainstaluję Squida, który będzie działał jako proxy, czyli pośrednik, filtrując treści pasujące do wzorca (tutaj: lista url serwerów z reklamami).

Instalacja

Instalacja potrzebnych pakietów w "debianopochodnych" to oczywiście:

# apt-get install squid curl

Skrypt tworzący listę do filtrowania (możesz znaleźć go tutaj) należy zapisać jako /usr/local/bin/refresh_ads_list i nadać mu atrybuty wykonalności:

# chmod 755 /usr/local/bin/refresh_ads_list

Uruchom go. Zobacz, czy działa:

# /usr/local/bin/refresh_ads_list
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100 41758    0 41758    0     0  78149      0 --:--:-- --:--:-- --:--:--  149k

Jeśli rezultat jest podobny do powyższego, dodaj link do skryptu w cron.weekly, by lista odświeżała się co tydzień:

# ln -s /usr/local/bin/refresh_ads_list /etc/cron.weekly/

Konfiguracja serwera

Poprawki w domyślnej konfiguracji Squida (zwykle znajdującej się w /etc/init/squid.conf) to przede wszystkim definicja naszej sieci lokalnej, w której znajdują się serwer i urządzenia, które mają zamiar korzystać z proxy):

acl localnet src 192.168.1.0/16

Lista adresów serwerów z reklamami, czyli "produkt" skrytpu refresh_ads_list:

acl url_ads url_regex "/etc/squid/adlist.acl"

Blokada dostępu do reklam:

http_access deny url_ads

i zaraz poniżej zezwolenie na ruch z naszej sieci lokalnej:

http_access allow localnet

Sprawdzamy, na którym porcie działa Squid, domyślnie jest to:

http_port 3128

Po zapisaniu zmian w konfiguracji pozostaje restart Squida:

# /etc/init.s/squid restart

Konfiguracja iOS

W ustawieniach Wi-Fi sieci domowej należy wybrać ręczne PROXY HTTP. Wpisać tam adres serwera ze Squidem (dlatego stałe IP jest tam konieczne) i port na którym Squid pracuje. Uwierzytelnianie pozostaw wyłączone.

konfiguracja

Test

Wystarczy wejść z iPhone'a czy iPada na http://gazeta.pl, by przekonać się, czy zniknął banner na górze ekranu.

Aby zobaczyć jak to wygląda w logach Squida, przeczesz access.log szukając frazy TCP_DENIED:

# grep TCP_DENIED /var/log/squid/access.log

Powinna pokazać się pokaźna lista zablokowanych odwołań.

Job done.

Polerowanie

Jeżeli na twoim serwerze działa jakiś serwer WWW, to zamiast blokować reklamy zwykłym: "nie ma takiego miejsca", można podmieniać je na przeźroczysty obrazek w rozmiarze 4x4 (do pobrania tutaj).

Zabieg ten poprawia wygląd niektórych "latająych reklam", które w przypadku "twardego" blokowania wyśwetlają denerwujący komunikat o braku adresu.

W tym celu tworzymy własny plik ERR_CUSTOM_ACCESS_DENIED (do pobrania tutaj), który wrzucamy do /etc/squid. Zaglądnij do jego zawartości i popraw ścieżkę, by pasowała do lokalizacji pliku 4x4.gif na twoim serwerze.

Do /etc/squid/squid.conf dodajemy stosowne poprawki:

error_directory /etc/squid
deny_info ERR_CUSTOM_ACCESS_DENIED url_ads

Restartujemy Squida:

# /etc/init.s/squid restart

Autor

aceJacek

You probably haven't heard of me.

comments powered by Disqus